Compare commits

...

77 Commits
v1.12 ... v1.13

Author SHA1 Message Date
Pau Pérez Fabregat
9f6b3498bd Merge pull request #2177 from coopdevs/upgrade-delayed-job
Upgrade delayed_job_active_record from 4.0.2 to 4.1.2
2018-03-27 17:45:33 +02:00
Pau Pérez Fabregat
0b9881b9d3 Merge pull request #2168 from openfoodfoundation/transifex
Update translations with current Transifex version
2018-03-27 17:16:10 +02:00
Transifex-Openfoodnetwork
348364814d Updating translations for config/locales/es.yml 2018-03-28 02:11:09 +11:00
Pau Pérez Fabregat
dbf647f700 Merge pull request #1981 from Duende13/su_issue_1936
Added 'meta_keywords' to search of products
2018-03-27 14:27:40 +02:00
Hugo Daniel
ef2b0b8383 Added tooltips and locale 2018-03-27 15:21:12 +11:00
duende13
f75b865be8 Made changes requested by reviewer, in labels and tests. 2018-03-27 15:21:11 +11:00
duende13
7670d01c6d Changing SEO tab to 'Search' tab 2018-03-27 15:21:11 +11:00
duende13
61300a62c2 Added 'meta_keywords' to search of products in shop page. Changed labels
on SEO tab and SEO form (edit product Screen) and added in en.yml file.
2018-03-27 15:21:11 +11:00
Transifex-Openfoodnetwork
a3fa6db5a9 Updating translations for config/locales/de_DE.yml 2018-03-26 21:38:21 +11:00
Pau Perez
dae883c68d Upgrade dj_active_record from 4.0.2 to 4.1.2
This brings few styling improvements on dlayed_job_active_record but
also upgrades delayed_job from 4.0.4 to 4.1.4, which includes some fixes
and improved error messages.
2018-03-26 12:32:25 +02:00
Pau Pérez Fabregat
808f7b12c7 Merge pull request #2175 from coopdevs/upgrade-skylight
Upgrade Skylight from 1.5.1 to 1.6.0
2018-03-26 12:12:46 +02:00
Pau Perez
82c9cdd874 Upgrade Skylight from 1.5.1 to 1.6.0 2018-03-26 11:13:29 +02:00
Transifex-Openfoodnetwork
a257febc79 Updating translations for config/locales/fr.yml 2018-03-26 20:06:24 +11:00
Pau Pérez Fabregat
17b129ff4f Merge pull request #2079 from mjal/424cart-page-shouldnt-show-admin-handling-if-it-is-zero
Cart page shouldnt show admin handling if it is zero
2018-03-23 18:01:09 +01:00
Pau Pérez Fabregat
6ce552727b Merge pull request #2118 from oeoeaio/payment-summary-for-emails
Show payment summary in confirmation email regardless of payment method
2018-03-23 15:30:44 +01:00
Pau Pérez Fabregat
dadc02fb11 Merge pull request #2030 from lin-d-hop/uk/1663variant-order-emails
Uk/1663variant order emails
2018-03-23 15:29:05 +01:00
Pau Pérez Fabregat
bbd2427493 Merge pull request #2075 from mjal/2001translations-missing-in-order-management-pages
i18n for admin/orders
2018-03-23 15:27:55 +01:00
Pau Pérez Fabregat
82457d2b63 Merge pull request #2138 from Matt-Yorkley/email/manager_invite
Email/manager invite
2018-03-23 15:27:14 +01:00
Pau Pérez Fabregat
9e14186431 Merge pull request #2149 from oeoeaio/subs-remove-fields
Subs: Remove obsolete subscription fields from order cycles table
2018-03-23 15:12:32 +01:00
Pau Pérez Fabregat
d422283b76 Merge pull request #2128 from mkllnk/2113-i18n-config
2113 Display only selected languages in switcher
2018-03-23 15:06:47 +01:00
Pau Pérez Fabregat
13115d4a2d Merge branch 'master' into email/manager_invite 2018-03-23 12:56:10 +01:00
Pau Pérez Fabregat
1005c299a2 Merge pull request #1464 from Matt-Yorkley/uk/bep_images
Uk/bep_images
2018-03-23 12:40:16 +01:00
Pau Pérez Fabregat
3788ec590f Merge pull request #2166 from coopdevs/configure-mails-from
Configure mails_from
2018-03-23 12:19:31 +01:00
Pau Pérez Fabregat
7dd23d20c8 Merge pull request #2160 from coopdevs/fix-enterprise-filter-in-customers
Fix enterprise filter in customers
2018-03-23 08:25:21 +01:00
stveep
231dd7b6a2 Add some rubocop spaces 2018-03-23 17:37:50 +11:00
stveep
8a783bbb7d PR changes: extract SQL in methods to scopes, add case insensitivity to test for sorting 2018-03-23 17:37:50 +11:00
stveep
9375318c4b Codeclimate: remove empty line 2018-03-23 17:37:50 +11:00
stveep
dc76b3922b Add sorting to query for producer mailer 2018-03-23 17:37:50 +11:00
stveep
40506685ef Adding extra sort step for variant name; ignore case in sorting line items by name 2018-03-23 17:37:50 +11:00
Duende13
f5ad950bc3 Change Syntax from :variant => :product to variant: :product 2018-03-23 17:37:50 +11:00
Duende13
ba37db7ccc Refactoring test to adopt most Rspec syntax (expect instead of should) 2018-03-23 17:37:50 +11:00
Duende13
401052be68 Fix Robcop issues (blank spaces and indentation) 2018-03-23 17:37:50 +11:00
Duende13
330e7d71af Sort line items by name and unit_value for confirmation email and summary screen 2018-03-23 17:37:50 +11:00
Maikel Linke
94cc8bb980 Update translations with current Transifex version
Since our Transifex integration has a few flaws, there are many
translations that are not in the code yet. This imports everything, even
translation files that are not at 100%.
2018-03-23 12:55:29 +11:00
Pau Perez
2c588847df Pick from_address from MailMethod as in Spree
Spree::Config[] picks it up from AppConfiguration rather than MailMethod
and so, gets a value different from the one configured.
2018-03-22 18:36:41 +01:00
Pau Perez
3c36d2d1a6 Remove failing mails_from default
As example.com is not a verified domain, Mandrill rejects the email
giving "reject_reason": "unsigned". Also, the mails_from setting is
already defined as a MailMethod preference.
2018-03-22 13:02:57 +01:00
Pau Pérez Fabregat
fa9d61c7fd Merge pull request #2165 from coopdevs/upgrade-skylight
Upgrade Skylight from 1.5.0 to 1.5.1
2018-03-22 09:56:35 +01:00
Pau Pérez Fabregat
92b5f9a313 Merge pull request #2127 from mkllnk/fix-scss
Remove typo from SCSS
2018-03-22 09:41:11 +01:00
Maikel Linke
9588138eb0 Remove typo
Accidentally introduced in febe66b7b0.
2018-03-22 14:18:55 +11:00
Pau Perez
d8dd84e64e Fix enterprise filter in customers page
Angular's filter function uses a pattern object to filter specific
properties on objects contained by the array. We want an exact match
instead, which has to be done by means of a function.
2018-03-21 19:16:14 +01:00
Pau Perez
ae1831241b Upgrade SKylight from 1.5.0 to 1.5.1 2018-03-21 18:41:21 +01:00
Pau Pérez Fabregat
91f30d5427 Merge pull request #2148 from coopdevs/sample-mail-method
Setup mail method automatically
2018-03-21 15:10:56 +01:00
Enrico Stano
3ce7bc54e3 Merge pull request #2143 from Matt-Yorkley/email/enterprise_user_ui
Fix enterprise user unsaved changes
2018-03-20 16:43:40 +01:00
Pau Perez
977c8f6203 Stick to setup+execution+assertion order in tests 2018-03-20 12:07:10 +01:00
Matt-Yorkley
1600067383 Redirect to set password page after invite 2018-03-16 17:32:40 +00:00
Matt-Yorkley
3fad51d271 Clearer angular method naming 2018-03-16 17:32:40 +00:00
Matt-Yorkley
5f0075f8b7 Refactor to use new REST resource 2018-03-16 17:32:38 +00:00
Pau Perez
716e952117 Add mail setting's env vars for development 2018-03-16 13:33:55 +01:00
Pau Perez
092122969c Make mail env vars mandatory 2018-03-16 13:33:21 +01:00
Pau Perez
f27a624687 Create the mail method from db:seed
As opposed the to sample users and enterprises that ease testing and
development, the mail method is needed for the app to function in any
environment.
2018-03-16 13:33:21 +01:00
Pau Perez
7afc999689 Differentiate MAIL_DOMAIN from plain DOMAIN
This way we can have katuma.org as the mail domain and
staging.katuma.org as web domain.
2018-03-16 13:33:20 +01:00
Pau Perez
4fc66356cb Create always a mail method from sample_data
This sets the email config so that mails can be sent right away.
2018-03-16 13:33:20 +01:00
Pau Perez
a7f1ed660b Add service to create a mail method
This will make loading sample data into staging environments easier.
2018-03-16 13:33:20 +01:00
Rob Harrington
9840467b8a Remove obsolete subscription fields from order cycles table 2018-03-16 14:55:22 +11:00
Maxime Lalisse
fa68dd0bcc refactor spec and check price 2018-03-16 01:18:21 +01:00
Rob Harrington
4d757dde78 Show payment summary in confirmation email regardless of payment method 2018-03-16 10:55:56 +11:00
Matt-Yorkley
f3f18d8338 Cleaner routes.rb entry 2018-03-15 18:48:47 +00:00
Matt-Yorkley
128ca3b1ef Invite manager specs 2018-03-15 18:48:47 +00:00
Matt-Yorkley
b64327fbb3 Invite enterprise manager functionality 2018-03-15 18:48:47 +00:00
Matt-Yorkley
5c6624e1d1 Tidy up setDirty() calls in enterprise_controller.js 2018-03-15 12:58:05 +00:00
Matt-Yorkley
4953c69123 Fix enterprise user unsaved changes 2018-03-14 23:04:54 +00:00
Maikel Linke
01dc51c84b Consistent reference of the source locale 2018-03-13 10:25:31 +11:00
Maikel Linke
64063f305b Describe methods of I18nConfig 2018-03-13 10:24:42 +11:00
Maikel Linke
db61a2bb17 Parse available language string more relaxed
Splitting the string with any whitespace makes it more likely the code
knows what the human meant. It also makes `strip` obsolete, since there
can't be any whitespace within the splitted strings.
2018-03-09 19:41:49 +11:00
Maikel Linke
8017921e89 Use I18nConfig in views 2018-03-09 17:45:04 +11:00
Maikel Linke
3743cf1bc3 Use I18nConfig for application defaults 2018-03-09 17:45:03 +11:00
Maikel Linke
7a34c6e3f0 Introduce I18nConfig as single point of truth
It will be used in application.rb and views.
See https://github.com/openfoodfoundation/openfoodnetwork/issues/2113
2018-03-09 17:45:03 +11:00
Matt-Yorkley
fdc14ab44e Add controller specs 2018-02-14 15:37:22 +00:00
Matt-Yorkley
8a11dc3c33 Decouple image upload from Spree 2018-02-14 13:46:05 +00:00
Matt-Yorkley
23deb37876 Save/Update product image test 2018-02-14 13:46:05 +00:00
Matt-Yorkley
526317c373 BEP Image upload specs 2018-02-14 13:46:05 +00:00
Matt-Yorkley
7d27d1325e Bulk Edit image upload
Image Upload Translations

Squashme

Squashme

Squashme

Code review tweaks
2018-02-14 13:46:05 +00:00
Matt-Yorkley
24dca5e51f Add image column to product bulk edit 2018-02-14 13:46:05 +00:00
jtruong2
689aed7080 Add spec for admin & handling 2018-02-12 15:53:28 +01:00
jtruong2
6c92fdf167 fixes issue if admin and handling == 0 then do not render row 2018-02-12 15:53:19 +01:00
Maxime Lalisse
aef73aef38 Add translation keys 2018-02-09 22:15:02 +01:00
Maxime Lalisse
11eda94949 Add i18n for admin/orders 2018-02-09 17:40:31 +01:00
83 changed files with 1662 additions and 544 deletions

View File

@@ -253,11 +253,11 @@ GEM
fog (~> 1.0)
rails (~> 3.0)
debugger-linecache (1.2.0)
delayed_job (4.0.4)
activesupport (>= 3.0, < 4.2)
delayed_job_active_record (4.0.2)
activerecord (>= 3.0, < 4.2)
delayed_job (>= 3.0, < 4.1)
delayed_job (4.1.4)
activesupport (>= 3.0, < 5.2)
delayed_job_active_record (4.1.2)
activerecord (>= 3.0, < 5.2)
delayed_job (>= 3.0, < 5)
devise (2.2.8)
bcrypt-ruby (~> 3.0)
orm_adapter (~> 0.1)
@@ -640,7 +640,7 @@ GEM
shellany (0.0.1)
shoulda-matchers (2.8.0)
activesupport (>= 3.0.0)
skylight (1.5.0)
skylight (1.6.0)
activesupport (>= 3.0.0)
spinjs-rails (1.3)
rails (>= 3.1)

View File

@@ -1,3 +1,14 @@
angular.module("ofn.admin", ["ngResource", "ngAnimate", "admin.utils", "admin.indexUtils", "admin.dropdown", "admin.products", "admin.taxons", "infinite-scroll"]).config ($httpProvider) ->
angular.module("ofn.admin", [
"ngResource",
"mm.foundation",
"angularFileUpload",
"ngAnimate",
"admin.utils",
"admin.indexUtils",
"admin.dropdown",
"admin.products",
"admin.taxons",
"infinite-scroll"
]).config ($httpProvider) ->
$httpProvider.defaults.headers.common["X-CSRF-Token"] = $("meta[name=csrf-token]").attr("content")
$httpProvider.defaults.headers.common["Accept"] = "application/json, text/javascript, */*"

View File

@@ -51,7 +51,6 @@
//= require textAngular.min.js
//= require i18n/translations
//= require darkswarm/i18n.translate.js
//
//= require moment
//= require moment/en-gb.js
//= require moment/es.js
@@ -60,5 +59,7 @@
//= require moment/nb.js
//= require moment/pt-br.js
//= require moment/sv.js
//= require ../shared/mm-foundation-tpls-0.8.0.min.js
//= require angularjs-file-upload
//= require_tree .

View File

@@ -12,7 +12,7 @@ angular.module("admin.customers").controller "customersCtrl", ($scope, $q, $filt
$scope.$watch "shop_id", ->
if $scope.shop_id?
CurrentShop.shop = $filter('filter')($scope.shops, {id: $scope.shop_id})[0]
CurrentShop.shop = $filter('filter')($scope.shops, {id: parseInt($scope.shop_id)}, true)[0]
Customers.index({enterprise_id: $scope.shop_id}).then (data) ->
pendingChanges.removeAll()
$scope.customers_form.$setPristine()

View File

@@ -1,11 +1,11 @@
angular.module("admin.enterprises")
.controller "enterpriseCtrl", ($scope, $window, NavigationCheck, enterprise, EnterprisePaymentMethods, EnterpriseShippingMethods, SideMenu, StatusMessage) ->
.controller "enterpriseCtrl", ($scope, $http, $window, NavigationCheck, enterprise, EnterprisePaymentMethods, EnterpriseShippingMethods, SideMenu, StatusMessage) ->
$scope.Enterprise = enterprise
$scope.PaymentMethods = EnterprisePaymentMethods.paymentMethods
$scope.ShippingMethods = EnterpriseShippingMethods.shippingMethods
$scope.navClear = NavigationCheck.clear
$scope.menu = SideMenu
$scope.newManager = { id: '', email: (t('add_manager')) }
$scope.newManager = { id: null, email: (t('add_manager')) }
$scope.StatusMessage = StatusMessage
$scope.$watch 'enterprise_form.$dirty', (newValue) ->
@@ -26,7 +26,7 @@ angular.module("admin.enterprises")
# from a directive "nav-check" in the page - if we pass it here it will be called in the test suite,
# and on all new uses of this contoller, and we might not want that.
enterpriseNavCallback = ->
if $scope.enterprise_form.$dirty
if $scope.enterprise_form != undefined && $scope.enterprise_form.$dirty
t('admin.unsaved_confirm_leave')
# Register the NavigationCheck callback
@@ -38,16 +38,29 @@ angular.module("admin.enterprises")
return
for i, user of $scope.Enterprise.users when user.id == manager.id
$scope.Enterprise.users.splice i, 1
if $scope.enterprise_form?
$scope.enterprise_form.$setDirty()
$scope.enterprise_form?.$setDirty()
$scope.addManager = (manager) ->
if manager.id? and manager.email?
if manager.id? and angular.isNumber(manager.id) and manager.email?
manager =
id: manager.id
email: manager.email
confirmed: manager.confirmed
if (user for user in $scope.Enterprise.users when user.id == manager.id).length == 0
$scope.Enterprise.users.push manager
$scope.enterprise_form?.$setDirty()
else
alert ("#{manager.email}" + " " + t("is_already_manager"))
$scope.inviteManager = ->
$scope.invite_errors = $scope.invite_success = null
email = $scope.newUser
$http.post("/admin/manager_invitations", {email: email, enterprise_id: $scope.Enterprise.id}).success (data)->
$scope.addManager({id: data.user, email: email})
$scope.invite_success = t('user_invited', email: email)
.error (data) ->
$scope.invite_errors = data.errors
$scope.resetModal = ->
$scope.newUser = $scope.invite_errors = $scope.invite_success = null

View File

@@ -0,0 +1,6 @@
angular.module("ofn.admin").controller "ProductImageCtrl", ($scope, ProductImageService) ->
$scope.imageUploader = ProductImageService.imageUploader
$scope.imagePreview = ProductImageService.imagePreview
$scope.$watch 'product.image_url', (newValue) ->
$scope.imagePreview = newValue if newValue

View File

@@ -0,0 +1,6 @@
angular.module("ofn.admin").directive "imageModal", ($modal, ProductImageService) ->
restrict: 'C'
link: (scope, elem, attrs, ctrl) ->
elem.on "click", (ev) =>
scope.uploadModal = $modal.open(templateUrl: 'admin/modals/image_upload.html', controller: ctrl, scope: scope, windowClass: 'product-image-upload')
ProductImageService.configure(scope.product)

View File

@@ -0,0 +1,15 @@
angular.module("ofn.admin").factory "ProductImageService", (FileUploader, SpreeApiKey) ->
new class ProductImageService
imagePreview: null
imageUploader: new FileUploader
headers:
'X-Spree-Token': SpreeApiKey
autoUpload: true
configure: (product) =>
@imageUploader.url = "/api/product_images/#{product.id}"
@imagePreview = product.image_url
@imageUploader.onSuccessItem = (image, response) =>
product.thumb_url = response.thumb_url
product.image_url = response.image_url

View File

@@ -12,7 +12,7 @@ angular.module("admin.utils").directive "variantAutocomplete", ($timeout) ->
if Spree.routes
element.parent().children(".options_placeholder").attr "id", element.parent().data("index")
element.select2
placeholder: "Select a variant"
placeholder: t('admin.orders.select_variant')
minimumInputLength: 3
quietMillis: 300
ajax:

View File

@@ -1,4 +1,5 @@
window.Darkswarm = angular.module("Darkswarm", ["ngResource",
window.Darkswarm = angular.module("Darkswarm", [
'ngResource',
'mm.foundation',
'LocalStorageModule',
'infinite-scroll',
@@ -10,7 +11,7 @@ window.Darkswarm = angular.module("Darkswarm", ["ngResource",
'duScroll',
'angularFileUpload',
'angularSlideables'
]).config ($httpProvider, $tooltipProvider, $locationProvider, $anchorScrollProvider) ->
]).config ($httpProvider, $tooltipProvider, $locationProvider, $anchorScrollProvider) ->
$httpProvider.defaults.headers['common']['X-CSRF-Token'] = $('meta[name="csrf-token"]').attr('content')
$httpProvider.defaults.headers['common']['X-Requested-With'] = 'XMLHttpRequest'
$httpProvider.defaults.headers.common.Accept = "application/json, text/javascript, */*"

View File

@@ -4,5 +4,5 @@ Darkswarm.filter 'products', (Matcher) ->
text ?= ""
return products if text == ""
products.filter (product) =>
propertiesToMatch = [product.name, product.variant_names, product.supplier.name, product.primary_taxon.name]
propertiesToMatch = [product.name, product.variant_names, product.supplier.name, product.primary_taxon.name, product.meta_keywords]
Matcher.matchBeginning propertiesToMatch, text

View File

@@ -0,0 +1,10 @@
%a.close-reveal-modal{"ng-click" => "$close()"}
%i.fa.fa-times-circle{'aria-hidden' => "true"}
%form#image_upload{ name: 'form', novalidate: true, enctype: 'multipart/form-data', multipart: true, ng: { controller: "ProductImageCtrl" } }
%div.image-preview
%img.spinner{ src: "/assets/spinning-circles.svg", ng: { hide: "!imageUploader.isUploading" }}
%img.preview{ng: {src: "{{imagePreview}}", class: "{'faded': imageUploader.isUploading}"}}
%label{for: 'image-upload', class: 'button'} #{t('admin.products.bulk_edit.upload_an_image')}
%input#image-upload{hidden: true, type: 'file', 'nv-file-select' => true, uploader: "imageUploader"}

View File

@@ -0,0 +1,19 @@
#invite-manager-modal{ng: {app: 'admin.enterprises', controller: 'enterpriseCtrl'}}
.margin-bottom-30.text-center
.text-big
= t('js.admin.modals.invite_title')
%p.alert-box.ok{ng: {show: 'invite_success'}}
{{invite_success}}
%p.alert-box.error{ng: {show: 'invite_errors'}}
{{invite_errors}}
%input#invite_email.fullwidth.margin-bottom-20{ng: {model: 'newUser'}}
.margin-bottom-20.text-center
%button.text-center.margin-top-10{ng: {show: '!invite_success', click: 'inviteManager()'}}
= t('js.admin.modals.invite')
%button.text-center.margin-top-10{ng: {show: 'invite_success', click: 'resetModal(); close()'}}
= t('js.admin.modals.close')

View File

@@ -0,0 +1,198 @@
.reveal-modal-bg {
position: fixed;
top: 0;
bottom: 0;
left: 0;
right: 0;
background: black;
z-index: 1004;
display: none;
left: 0;
}
.reveal-modal, dialog {
visibility: hidden;
display: none;
position: absolute;
z-index: 1005;
width: 100vw;
top: 0;
border-radius: 0.4em;
border: 0px none;
left: 0;
background-color: white;
padding: 1.25rem;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.4);
padding: 1.875rem;
}
.reveal-modal .column, dialog .column, .reveal-modal .columns, dialog .columns {
min-width: 0;
}
.reveal-modal > :first-child, dialog > :first-child {
margin-top: 0;
}
.reveal-modal > :last-child, dialog > :last-child {
margin-bottom: 0;
}
@media only screen and (min-width: 40.063em) {
.reveal-modal, dialog {
width: 80%;
max-width: 62.5rem;
left: 0;
right: 0;
margin: 0 auto;
}
}
.reveal-modal.radius, dialog.radius {
border-radius: 3px;
}
.reveal-modal.round, dialog.round {
border-radius: 1000px;
}
.reveal-modal.collapse, dialog.collapse {
padding: 0;
}
.reveal-modal.full, dialog.full {
top: 0;
left: 0;
height: 100%;
height: 100vh;
min-height: 100vh;
max-width: none !important;
margin-left: 0 !important;
}
.reveal-modal .close-reveal-modal, dialog .close-reveal-modal {
font-size: 2.5rem;
line-height: 1;
position: absolute;
top: 0.625rem;
right: 1.375rem;
color: #aaaaaa;
font-weight: bold;
cursor: pointer;
}
dialog::backdrop, dialog + .backdrop {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
background: black;
background: rgba(0, 0, 0, 0.45);
z-index: auto;
display: none;
left: 0;
}
dialog[open] {
display: block;
}
@media print {
dialog, .reveal-modal, dialog {
display: none;
background: white !important;
}
}
// ANIMATION CLASSES
.fade {
opacity: 0;
-webkit-transition: opacity 0.15s linear;
transition: opacity 0.15s linear;
}
.fade.in {
opacity: 1;
}
.reveal-modal.fade {
-webkit-transition: -webkit-transform 0.2s ease-out;
-moz-transition: -moz-transform 0.2s ease-out;
-o-transition: -o-transform 0.2s ease-out;
transition: transform 0.2s ease-out;
-webkit-transform: translate(0, -25%);
-ms-transform: translate(0, -25%);
transform: translate(0, -25%);
}
.reveal-modal.in {
-webkit-transform: translate(0, 0);
-ms-transform: translate(0, 0);
transform: translate(0, 0);
}
.reveal-modal-bg.fade {
filter: alpha(opacity = 0);
opacity: 0;
}
.reveal-modal-bg.in {
filter: alpha(opacity = 50);
opacity: 0.5;
}
@media only screen and (max-width: 40em) {
.reveal-modal, dialog {
min-height: 100vh;
}
}
@media only screen and (min-width: 40.063em) {
.reveal-modal, dialog {
top: 6.25rem;
}
.reveal-modal.tiny, dialog.tiny {
width: 30%;
max-width: 62.5rem;
left: 0;
right: 0;
margin: 0 auto;
}
.reveal-modal.small, dialog.small {
width: 40%;
max-width: 62.5rem;
left: 0;
right: 0;
margin: 0 auto;
}
.reveal-modal.medium, dialog.medium {
width: 60%;
max-width: 62.5rem;
left: 0;
right: 0;
margin: 0 auto;
}
.reveal-modal.large, dialog.large {
width: 70%;
max-width: 62.5rem;
left: 0;
right: 0;
margin: 0 auto;
}
.reveal-modal.xlarge, dialog.xlarge {
width: 95%;
max-width: 62.5rem;
left: 0;
right: 0;
margin: 0 auto;
}
.reveal-modal.full, dialog.full {
width: 100vw;
max-width: 62.5rem;
left: 0;
right: 0;
margin: 0 auto;
}
}

View File

@@ -1,3 +1,7 @@
input[type="submit"], input[type="button"], button, .button {
cursor: pointer;
}
.text-center {
text-align: center;
}

View File

@@ -33,6 +33,9 @@ table#listing_products.bulk {
margin-bottom: 60px;
colgroup col {
&.image {
width: 1%;
}
&.producer {
width: 18%;
}
@@ -62,6 +65,21 @@ table#listing_products.bulk {
}
}
td.image {
padding: 10px;
text-align: center;
img {
border: 1px solid transparent;
border-radius: 0.4em;
}
img:hover {
opacity: 0.8;
cursor: pointer;
background-color: #fbfbfb;
border: 1px solid #e4e4e4;
}
}
td.unit {
input, select {
width: 100%;
@@ -77,3 +95,46 @@ table#listing_products.bulk {
}
}
}
.reveal-modal.product-image-upload {
width: 300px;
a.close-reveal-modal {
font-size: 23px;
color: #de6060;
right: 0.45rem;
top: 0.35rem;
:hover {
color: #bf4545;
}
}
div.image-preview {
//float: left;
}
label {
margin-top: 20px;
}
}
form#image_upload {
text-align: center;
.spinner {
width: 160px;
height: 65%;
position: absolute;
//background-color: rgba(255, 255, 255, 0.75);
padding: 32px;
margin: 0px -80px;
left: 50%;
z-index: 100;
}
.preview {
width: 240px;
}
.faded {
opacity: 0.25;
}
.button:hover {
cursor: pointer;
}
}

View File

@@ -133,8 +133,6 @@
font-size: 0.875rem;
margin-bottom: 0.75rem;
5rem {}
color: $dark-grey;
}

View File

@@ -0,0 +1,39 @@
module Admin
class ManagerInvitationsController < Spree::Admin::BaseController
def create
@email = params[:email]
@enterprise = Enterprise.find(params[:enterprise_id])
authorize! :edit, @enterprise
existing_user = Spree::User.find_by_email(@email)
if existing_user
render json: { errors: t('admin.enterprises.invite_manager.user_already_exists') }, status: :unprocessable_entity
return
end
new_user = create_new_manager
if new_user
render json: { user: new_user.id }, status: :ok
else
render json: { errors: t('admin.enterprises.invite_manager.error') }, status: 500
end
end
private
def create_new_manager
password = Devise.friendly_token
new_user = Spree::User.create(email: @email, unconfirmed_email: @email, password: password)
new_user.reset_password_token = Devise.friendly_token
new_user.save!
@enterprise.users << new_user
Delayed::Job.enqueue ManagerInvitationJob.new(@enterprise.id, new_user.id)
new_user
end
end
end

View File

@@ -0,0 +1,19 @@
module Api
class ProductImagesController < Spree::Api::BaseController
respond_to :json
def update_product_image
@product = Spree::Product.find(params[:product_id])
authorize! :update, @product
if @product.images.first.nil?
@image = Spree::Image.create(attachment: params[:file], viewable_id: @product.master.id, viewable_type: 'Spree::Variant')
respond_with(@image, status: 201)
else
@image = @product.images.first
@image.update_attributes(attachment: params[:file])
respond_with(@image, status: 200)
end
end
end
end

View File

@@ -38,6 +38,10 @@ class UserConfirmationsController < DeviseController
'not_confirmed'
end
if resource.reset_password_token.present?
return spree.edit_spree_user_password_path(reset_password_token: resource.reset_password_token)
end
path = (session[:confirmation_return_url] || login_path).to_s
path += path.include?('?') ? '&' : '?'
path + "validation=#{result}"

View File

@@ -0,0 +1,7 @@
ManagerInvitationJob = Struct.new(:enterprise_id, :user_id) do
def perform
enterprise = Enterprise.find enterprise_id
user = Spree::User.find user_id
EnterpriseMailer.manager_invitation(enterprise, user).deliver
end
end

View File

@@ -12,6 +12,18 @@ class EnterpriseMailer < Spree::BaseMailer
:subject => subject)
end
def manager_invitation(enterprise, user)
@enterprise = enterprise
@instance = Spree::Config[:site_name]
@instance_email = from_address
subject = t('enterprise_mailer.invite_manager.subject', enterprise: @enterprise.name)
mail(to: user.email,
from: from_address,
subject: subject)
end
private
def find_enterprise(enterprise)

View File

@@ -32,8 +32,8 @@ class ProducerMailer < Spree::BaseMailer
def line_items_from(order_cycle, producer)
Spree::LineItem.
joins(order: :order_cycle, variant: :product).
where('order_cycles.id = ?', order_cycle).
from_order_cycle(order_cycle).
sorted_by_name_and_unit_value.
merge(Spree::Product.in_supplier(producer)).
merge(Spree::Order.by_state('complete'))
end

View File

@@ -7,8 +7,11 @@ Spree::BaseMailer.class_eval do
protected
# This method copies the one defined in Spree's mailers. It should be removed
# once in Spree v2.0 and Spree's BaseMailer class lands in our codebase.
# Then, we'll be able to rely on its #from_address.
def from_address
Spree::Config[:mails_from] || 'test@example.com'
Spree::MailMethod.current.preferred_mails_from
end
def roadie_options

View File

@@ -4,8 +4,6 @@ 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.
preference :mails_from, :string, default: 'no-reply@example.com'
# Embedded Shopfronts
preference :enable_embedded_shopfronts, :boolean, default: false
preference :embedded_shopfronts_whitelist, :text, default: nil

View File

@@ -32,6 +32,15 @@ Spree::LineItem.class_eval do
end
}
# Find line items that are from order sorted by variant name and unit value
scope :sorted_by_name_and_unit_value, joins(variant: :product).
reorder('lower(spree_products.name) asc, lower(spree_variants.display_name) asc, spree_variants.unit_value asc')
scope :from_order_cycle, lambda { |order_cycle|
joins(order: :order_cycle).
where('order_cycles.id = ?', order_cycle)
}
scope :supplied_by, lambda { |enterprise|
joins(:product).
where('spree_products.supplier_id = ?', enterprise)

View File

@@ -61,7 +61,7 @@ Spree::ShippingMethod.class_eval do
end
def adjustment_label
'Shipping'
I18n.t('shipping')
end
# Checks whether the shipping method is of delivery type, meaning that it

View File

@@ -1,5 +1,5 @@
/ insert_bottom "[data-hook='admin_product_tabs']"
- klass = current == 'SEO' ? 'active' : ''
- klass = current == t(:Search) ? 'active' : ''
%li{:class => klass}
= link_to_with_icon 'icon-tasks', t('admin.products.seo'), seo_admin_product_url(@product)
= link_to_with_icon 'icon-tasks', t(:Search), seo_admin_product_url(@product)

View File

@@ -1,13 +1,21 @@
class Api::Admin::ProductSerializer < ActiveModel::Serializer
attributes :id, :name, :sku, :variant_unit, :variant_unit_scale, :variant_unit_name, :on_demand, :inherits_properties
attributes :on_hand, :price, :available_on, :permalink_live, :tax_category_id
attributes :on_hand, :price, :available_on, :permalink_live, :tax_category_id, :image_url, :thumb_url
has_one :supplier, key: :producer_id, embed: :id
has_one :primary_taxon, key: :category_id, embed: :id
has_many :variants, key: :variants, serializer: Api::Admin::VariantSerializer # embed: ids
has_one :master, serializer: Api::Admin::VariantSerializer
def image_url
object.images.present? ? object.images.first.attachment.url(:product) : "/assets/noimage/product.png"
end
def thumb_url
object.images.present? ? object.images.first.attachment.url(:mini) : "/assets/noimage/mini.png"
end
def on_hand
object.on_hand.nil? ? 0 : object.on_hand.to_f.finite? ? object.on_hand : I18n.t(:on_demand)
end

View File

@@ -36,7 +36,7 @@ class Api::CachedProductSerializer < ActiveModel::Serializer
#delegate :cache_key, to: :object
include ActionView::Helpers::SanitizeHelper
attributes :id, :name, :permalink
attributes :id, :name, :permalink, :meta_keywords
attributes :on_demand, :group_buy, :notes, :description, :description_html
attributes :properties_with_values

View File

@@ -0,0 +1,34 @@
# Configures Rails to use the specified mail settings. It does so creating
# a Spree::MailMethod and applying its configuration.
class CreateMailMethod
# Constructor
#
# @param attributes [Hash] MailMethod attributes
def initialize(attributes)
@attributes = attributes
end
def call
persist_attributes
initialize_mail_settings
end
private
attr_reader :attributes
# Updates the created mail method's attributes with the ones specified
def persist_attributes
mail_method.update_attributes(attributes)
end
# Creates a new Spree::MailMethod for the current environment
def mail_method
Spree::MailMethod.create(environment: attributes[:environment])
end
# Makes Spree apply the specified mail settings
def initialize_mail_settings
Spree::Core::MailSettings.init
end
end

View File

@@ -3,7 +3,6 @@
-# So we use onchange and have to get the scope to access the ng controller
= form_for [main_app, :admin, @enterprise], html: { name: "enterprise_form",
"ng-controller" => 'enterpriseCtrl',
'onchange' => 'angular.element(enterprise_form).scope().setFormDirty()',
"ng-cloak" => true } do |f|
%save-bar{ dirty: "enterprise_form.$dirty", persist: "true" }

View File

@@ -42,7 +42,7 @@
%tr
%td
- # Ignore this input in the submit
= hidden_field_tag :ignored, :new_manager, class: "select2 fullwidth", 'user-select' => 'newManager', 'ng-model' => 'newManager'
= hidden_field_tag :ignored, nil, class: "select2 fullwidth", 'user-select' => 'newManager', 'ng-model' => 'newManager'
%td.actions
%a{ 'ng-click' => 'addManager(newManager)', :class => "icon-plus no-text" }
%tr.animate-repeat{ id: "manager-{{manager.id}}", ng: { repeat: 'manager in Enterprise.users' }}
@@ -60,3 +60,16 @@
- @enterprise.users.each do |manager|
= manager.email
%br
- if full_permissions
%form
.row
.three.columns.alpha
%label
= t('.invite_manager')
%div{'ofn-with-tip' => t('.invite_manager_tip')}
%a= t('admin.whats_this')
.eight.columns.omega
.row
%a.button.help-modal{template: 'admin/modals/invite_manager.html'}
= t('.add_unregistered_user')

View File

@@ -0,0 +1,5 @@
object @image
attributes(*image_attributes)
attributes :viewable_type, :viewable_id
node( :thumb_url ) { @product.images.first.attachment.url(:mini) }
node( :image_url ) { @product.images.first.attachment.url(:product) }

View File

@@ -0,0 +1,16 @@
%h3
= t('invite_email.greeting')
%p.lead
= t('invite_email.invited_to_manage', enterprise: @enterprise.name, instance: @instance)
%p
= t('invite_email.confirm_your_email')
%p
= t('invite_email.mistakenly_sent', owner_email: @enterprise.owner.email, instance: @instance, instance_email: @instance_email)
%p
= t :email_help
= render 'shared/mailers/signoff'
= render 'shared/mailers/social_and_contact'

View File

@@ -60,12 +60,12 @@
= t 'powered_by'
%a{href: '/'}
= t 'title'
- if I18n.available_locales.count > 1
- if OpenFoodNetwork::I18nConfig.selectable_locales.count > 1
%li.language-switcher.has-dropdown
%a{href: '#'}
%i.ofn-i_071-globe
%ul.dropdown
- I18n.available_locales.each do |l|
- OpenFoodNetwork::I18nConfig.selectable_locales.each do |l|
%li
%a{href: "?locale=#{l.to_s}" }= t('language_name', locale: l)
- if spree_current_user.nil?

View File

@@ -40,13 +40,13 @@
%span.nav-primary
%i.ofn-i_036-producers
= t 'label_producers'
- if I18n.available_locales.count > 1
- if OpenFoodNetwork::I18nConfig.selectable_locales.count > 1
%li.language-switcher.li-menu
%a
%i.ofn-i_071-globe
= t('language_name')
%ul
- I18n.available_locales.each do |l|
- OpenFoodNetwork::I18nConfig.selectable_locales.each do |l|
- if I18n.locale != l
%li
%a{href: "?locale=#{l.to_s}" }= t('language_name', locale: l)

View File

@@ -1,11 +1,13 @@
.row{"data-hook" => "admin_product_meta_form"}
.alpha.eleven.columns
= f.field_container :meta_description do
= f.label :meta_keywords, t(:meta_keywords)
= f.field_container :meta_keywords do
= f.label :meta_keywords, t(:product_search_keywords)
%span.icon-question-sign{ 'ofn-with-tip' => t('admin.products.product_search_tip') }
%br/
= f.text_field :meta_keywords, :class => 'fullwidth', :rows => 6
= f.field_container :meta_description do
= f.label :meta_description, t(:meta_description)
= f.label :meta_description, t(:SEO_keywords)
%span.icon-question-sign{ 'ofn-with-tip' => t('admin.products.seo_tip') }
%br/
= f.text_field :meta_description, :class => 'fullwidth', :rows => 6
.alpha.eleven.columns

View File

@@ -1,5 +1,6 @@
%colgroup
%col.actions
%col.image{ ng: { show: 'columns.image.visible' } }
%col.producer{ ng: { show: 'columns.producer.visible' } }
%col.sku{ ng: { show: 'columns.sku.visible' } }
%col.name{ ng: { show: 'columns.name.visible' } }
@@ -21,6 +22,7 @@
%th.left-actions
%a{ 'ng-click' => 'toggleShowAllVariants()', :style => 'color: red; cursor: pointer' }
= t(:expand_all)
%th.image{ 'ng-show' => 'columns.image.visible' }
%th.producer{ 'ng-show' => 'columns.producer.visible' }=t('admin.producer')
%th.sku{ 'ng-show' => 'columns.sku.visible' }=t('admin.sku')
%th.name{ 'ng-show' => 'columns.name.visible' }=t('.name')

View File

@@ -2,6 +2,9 @@
%td.left-actions
%a{ 'ofn-toggle-variants' => 'true', :class => "view-variants", 'ng-show' => 'hasVariants(product)' }
%a{ :class => "add-variant icon-plus-sign", 'ng-click' => "addVariant(product)", 'ng-show' => "!hasVariants(product) && hasUnit(product)" }
%td.image{ 'ng-show' => 'columns.image.visible' }
%a{class: 'image-modal'}
%img{'ng-src' => '{{ product.thumb_url }}'}
%td.producer{ 'ng-show' => 'columns.producer.visible' }
%select.select2.fullwidth{ 'ng-model' => 'product.producer_id', :name => 'producer_id', 'ofn-track-product' => 'producer_id', 'ng-options' => 'producer.id as producer.name for producer in producers' }
%td.sku{ 'ng-show' => 'columns.sku.visible' }

View File

@@ -2,6 +2,7 @@
%td.left-actions
%a{ :class => "variant-item icon-caret-right", 'ng-hide' => "$last" }
%a{ :class => "add-variant icon-plus-sign", 'ng-click' => "addVariant(product)", 'ng-show' => "$last", 'ofn-with-tip' => t('.new_variant') }
%td{ 'ng-show' => 'columns.image.visible' }
%td{ 'ng-show' => 'columns.producer.visible' }
%td{ 'ng-show' => 'columns.sku.visible' }
%input{ 'ng-model' => "variant.sku", :name => 'variant_sku', 'ofn-track-variant' => 'sku', :type => 'text' }

View File

@@ -1,8 +1,9 @@
= render :partial => 'spree/admin/shared/product_sub_menu'
= render :partial => 'spree/admin/shared/product_tabs', :locals => { :current => 'SEO' }
= render :partial => 'spree/admin/shared/product_tabs', :locals => { :current => t(:Search) }
= render :partial => 'spree/shared/error_messages', :locals => { :target => @product }
= form_for [:admin, @product], :method => :put, :html => { :multipart => true } do |f|
%fieldset.no-border-top
= render :partial => 'seo_form', :locals => { :f => f }
= render :partial => 'spree/admin/shared/edit_resource_links'
%div{ 'ng-app' => 'ofn.admin' }
= form_for [:admin, @product], :method => :put, :html => { :multipart => true } do |f|
%fieldset.no-border-top
= render :partial => 'seo_form', :locals => { :f => f }
= render :partial => 'spree/admin/shared/edit_resource_links'

View File

@@ -11,7 +11,7 @@
%h4
= t :email_order_summary_price
%tbody
- @order.line_items.each do |item|
- @order.line_items.sorted_by_name_and_unit_value.each do |item|
%tr
%td
= render 'spree/shared/line_item_name', line_item: item

View File

@@ -1,15 +1,14 @@
- if @order.payments.first.andand.payment_method.andand.type == "Spree::PaymentMethod::Check" and @order.payments.first.andand.payment_method.andand.description
%p.callout
%span{:style => "float:right;"}
- if @order.paid?
= t :email_payment_paid
- else
= t :email_payment_not_paid
%strong
= t :email_payment_summary
%h4
= t :email_payment_method
%strong= @order.payments.first.andand.payment_method.andand.name.andand.html_safe
%p
%em= @order.payments.first.andand.payment_method.andand.description.andand.html_safe
%p &nbsp;
%p.callout
%span{:style => "float:right;"}
- if @order.paid?
= t :email_payment_paid
- else
= t :email_payment_not_paid
%strong
= t :email_payment_summary
%h4
= t :email_payment_method
%strong= @order.payments.first.andand.payment_method.andand.name.andand.html_safe
%p
%em= @order.payments.first.andand.payment_method.andand.description.andand.html_safe
%p &nbsp;

View File

@@ -35,13 +35,13 @@
%td.text-right
%span.order-total.item-total= display_checkout_subtotal(@order)
%td
%tr
%td.text-right{colspan:"3"}
= t :orders_form_admin
%td.text-right
%span.order-total.distribution-total= display_checkout_admin_and_handling_adjustments_total_for(@order)
%td
-if display_checkout_admin_and_handling_adjustments_total_for(@order) != Spree::Money.new(0 , currency: @order.currency)
%tr
%td.text-right{colspan:"3"}
= t :orders_form_admin
%td.text-right
%span.order-total.distribution-total= display_checkout_admin_and_handling_adjustments_total_for(@order)
%td
- checkout_adjustments_for(@order, exclude: [:line_item, :admin_and_handling]).reject{ |a| a.amount == 0 }.reverse_each do |adjustment|
%tr.order-adjustment

View File

@@ -11,7 +11,7 @@
%th.text-right.total
%span= t(:total)
%tbody{"data-hook" => ""}
- order.line_items.each do |item|
- order.line_items.sorted_by_name_and_unit_value.each do |item|
%tr.line_item{"data-hook" => "order_details_line_item_row", class: "variant-#{item.variant.id}" }
%td(data-hook = "order_item_description")

View File

@@ -1,6 +1,7 @@
require_relative 'boot'
require 'rails/all'
require_relative "../lib/open_food_network/i18n_config"
if defined?(Bundler)
# If you precompile assets before deploying to production, use this line
@@ -104,9 +105,8 @@ module Openfoodnetwork
# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
config.i18n.default_locale = ENV["LOCALE"] || ENV["I18N_LOCALE"] || "en"
config.i18n.available_locales = ENV["AVAILABLE_LOCALES"].andand.split(/[\s,]/).andand.map(&:strip) || []
config.i18n.available_locales = (config.i18n.available_locales + [config.i18n.default_locale, 'en']).uniq
config.i18n.default_locale = OpenFoodNetwork::I18nConfig.default_locale
config.i18n.available_locales = OpenFoodNetwork::I18nConfig.available_locales
I18n.locale = config.i18n.locale = config.i18n.default_locale
# Setting this to true causes a performance regression in Rails 3.2.17

View File

@@ -22,6 +22,13 @@ CURRENCY: AUD
# See: config/schedule.rb
#SCHEDULE_NOTIFICATIONS: admin@example.com
# Mail settings
MAIL_HOST: 'example.com'
MAIL_DOMAIN: 'example.com'
MAIL_PORT: 25
SMTP_USERNAME: 'ofn'
SMTP_PASSWORD: 'f00d'
# SingleSignOn login for Discourse
#
# DISCOURSE_SSO_SECRET should be a random string. It must be the same as provided to your Discourse instance.

View File

@@ -1,5 +1,5 @@
de_DE:
language_name: "Englisch"
language_name: "Deutsch"
activerecord:
attributes:
spree/order:
@@ -8,6 +8,8 @@ de_DE:
completed_at: Erfolgt am
number: Nummer
email: E-Mail des Kunden
spree/payment:
amount: Menge
errors:
models:
spree/user:
@@ -43,25 +45,23 @@ de_DE:
send_instructions: "Sie erhalten in einigen Minuten eine E-Mail mit Anweisungen zur Bestätigung Ihres Kontos."
failed_to_send: "Beim Senden der Bestätigungs-E-Mail ist ein Fehler aufgetreten."
resend_confirmation_email: "Bestätigungsmail erneut senden."
confirmed: "Danke für die Bestätigung Ihrer E-Mail! Sie können sich jetzt einloggen."
not_confirmed: "Ihre E-Mail-Adresse konnte nicht bestätigt werden. Vielleicht haben Sie diesen Schritt bereits abgeschlossen?"
user_registrations:
spree_user:
signed_up_but_unconfirmed: "Eine Nachricht mit einem Bestätigungslink wurde an Ihre E-Mail-Adresse gesendet. Bitte öffnen Sie den Link, um Ihr Konto zu aktivieren."
failure:
invalid: |
Ungültige E-Mail-Adresse oder Passwort.
Hast du als Gast bestellt? Vielleicht brauchst du ein neues Konto oder musst dein Passwort zurücksetzen.
Ungültige E-Mail-Adresse oder Passwort.
Hast du als Gast bestellt? Vielleicht brauchst du ein neues Konto oder musst dein Passwort zurücksetzen.
unconfirmed: "Sie müssen Ihr Konto bestätigen, bevor Sie fortfahren."
enterprise_confirmations:
enterprise:
confirmed: Danke, deine E-Mail-Adresse wurde bestätigt.
not_confirmed: Ihre E-Mail-Adresse konnte nicht bestätigt werden. Haben Sie dies vielleicht schon getan?
confirmation_sent: "Eine Bestätigungs-E-Mail wurde versandt."
confirmation_not_sent: "Die Bestätigungs-E-Mail konnte nicht geschickt werden."
enterprise_mailer:
confirmation_instructions:
subject: "Bitte bestätige die E-Mail-Adresse für %{enterprise}"
welcome:
subject: "%{enterprise} ist jetzt auf %{sitename}"
invite_manager:
subject: "%{enterprise} hat Sie eingeladen, ein Manager zu sein"
producer_mailer:
order_cycle:
subject: "Bestellungszyklusreport für %{producer}"
@@ -204,6 +204,7 @@ de_DE:
phone: Telefonnummer
price: Preis
producer: Produzent
image: Bild
product: Produkt
quantity: Menge
schedule: Zeitplan
@@ -357,6 +358,15 @@ de_DE:
manages: verwaltet
products:
unit_name_placeholder: 'z.B. Trauben'
bulk_edit:
unit: Einheit
display_as: Darstellen als
category: Kategorie
tax_category: Steuerkategorie
inherits_properties?: Vererbt Eigenschaften?
available_on: Verfügbar auf
av_on: "Ein V. Auf"
upload_an_image: Lade ein Bild hoch
properties:
property_name: Name des Anwesens
inherited_property: Vererbte Eigenschaft
@@ -416,6 +426,7 @@ de_DE:
max_fulfilled_units: "Max erfüllte Einheiten"
order_error: "Einige Fehler müssen behoben werden, bevor Sie Aufträge aktualisieren können.\nFelder mit roten Rahmen enthalten Fehler."
variants_without_unit_value: "WARNUNG: Einige Varianten haben keinen Einheitswert"
select_variant: "Wählen Sie eine Variante"
enterprise:
select_outgoing_oc_products_from: Wählen Sie ausgehende OC-Produkte aus
enterprises:
@@ -577,6 +588,9 @@ de_DE:
notifications_note: 'Hinweis: Eine neue E-Mail-Adresse muss möglicherweise vor der Verwendung bestätigt werden'
managers: Manager
managers_tip: Die anderen Benutzer mit der Berechtigung, dieses Unternehmen zu verwalten.
invite_manager: "Einladungsmanager"
invite_manager_tip: "Laden Sie einen nicht registrierten Benutzer ein, sich anzumelden und ein Manager dieses Unternehmens zu werden."
add_unregistered_user: "Fügen Sie einen nicht registrierten Benutzer hinzu"
email_confirmed: "E-Mail bestätigt"
email_not_confirmed: "E-Mail nicht bestätigt"
actions:
@@ -636,6 +650,9 @@ de_DE:
welcome_text: Sie haben erfolgreich eine erstellt
next_step: Nächster Schritt
choose_starting_point: 'Wählen Sie Ihren Ausgangspunkt:'
invite_manager:
user_already_exists: "Benutzer existiert bereits"
error: "Etwas ist schief gelaufen"
order_cycles:
edit:
advanced_settings: Erweiterte Einstellungen
@@ -839,6 +856,7 @@ de_DE:
confirm_unpause_msg: Möchten Sie dieses Abonnement wirklich wieder aktivieren?
unpause_failure_msg: 'Entschuldigung, fehlgeschlagen!'
confirm_cancel_open_orders_msg: "Einige Bestellungen für dieses Abonnement sind derzeit geöffnet. Der Kunde wurde bereits darüber informiert, dass die Bestellung aufgegeben wird. Möchten Sie diese Bestellung (en) stornieren oder behalten?"
resume_canceled_orders_msg: "Einige Bestellungen für dieses Abonnement können jetzt fortgesetzt werden. Sie können sie aus dem Dropdown-Menü für Bestellungen wiederherstellen."
yes_cancel_them: Annulliere sie
no_keep_them: Behalte sie
yes_i_am_sure: Ja, ich bin mir sicher
@@ -1173,6 +1191,12 @@ de_DE:
email_signup_shop_html: "Sie können sich jetzt unter %{link} anmelden."
email_signup_text: "Danke, dass Sie dem Netzwerk beigetreten sind. Wenn Sie ein Kunde sind, freuen wir uns, Ihnen viele fantastische Bauern, wunderbare Essenszentren und leckeres Essen vorzustellen! Wenn Sie ein Produzent oder ein Lebensmittelunternehmen sind, freuen wir uns, Sie als Teil des Netzwerks zu haben."
email_signup_help_html: "Wir begrüßen alle Ihre Fragen und Rückmeldungen; Sie können die Schaltfläche <em> Feedback senden </ em> auf der Website verwenden oder uns eine E-Mail an %{email} senden"
invite_email:
greeting: "Hallo!"
invited_to_manage: "Sie wurden eingeladen, %{enterprise} auf %{instance} zu verwalten."
confirm_your_email: "Sie werden in Kürze eine E-Mail erhalten, um Ihre Registrierung zu bestätigen."
set_a_password: "Sie werden dann aufgefordert, ein Kennwort festzulegen, bevor Sie das Unternehmen verwalten können."
mistakenly_sent: "Nicht sicher, warum Sie diese E-Mail erhalten haben? Bitte kontaktieren Sie %{owner_email} für weitere Informationen, oder kontaktieren Sie %{instance} unter %{instance_email}."
producer_mail_greeting: "Liebe/r"
producer_mail_text_before: "Wir haben jetzt alle Verbraucherbestellungen für den nächsten Essenstropfen."
producer_mail_order_text: "Hier finden Sie eine Zusammenfassung der Bestellungen für Ihre Produkte:"
@@ -1361,8 +1385,8 @@ de_DE:
orders_could_not_cancel: "Entschuldigung, die Bestellung konnte nicht storniert werden"
orders_cannot_remove_the_final_item: "Der letzte Artikel aus einer Bestellung kann nicht entfernt werden. Bitte stornieren Sie stattdessen die Bestellung."
orders_bought_items_notice:
one: Für diesen Bestellzyklus ist bereits eine zusätzliche Position bestätigt
other: '%{count} zusätzliche Artikel, die bereits für diesen Bestellzyklus bestätigt wurden'
one: "Für diesen Bestellzyklus ist bereits eine zusätzliche Position bestätigt"
other: "%{count} zusätzliche Artikel, die bereits für diesen Bestellzyklus bestätigt wurden"
orders_bought_edit_button: Bestätigte Artikel bearbeiten
orders_bought_already_confirmed: "* schon bestätigt"
orders_confirm_cancel: Sind Sie sicher, dass Sie diese Bestellung stornieren möchten?
@@ -1435,6 +1459,7 @@ de_DE:
password_reset_sent: "Eine E-Mail mit Anweisungen zum Zurücksetzen Ihres Passworts wurde gesendet!"
reset_password: "Passwort zurücksetzen"
who_is_managing_enterprise: "Wer ist verantwortlich für die Verwaltung von %{enterprise}?"
update_and_recalculate_fees: "Aktualisieren und Gebühren neu berechnen"
enterprise:
registration:
modal:
@@ -1946,7 +1971,8 @@ de_DE:
products_unsaved: "Änderungen an %{n} Produkten bleiben ungesichert."
is_already_manager: "ist schon ein Manager!"
no_change_to_save: " Keine Änderung zum Speichern"
add_manager: "Fügen Sie einen Manager hinzu"
user_invited: "%{email} wurde eingeladen, dieses Unternehmen zu verwalten"
add_manager: "Fügen Sie einen vorhandenen Benutzer hinzu"
users: "Benutzer"
about: "Über"
images: "Bilder"
@@ -1957,6 +1983,7 @@ de_DE:
social: "Sozial"
business_details: "Geschäftsdetails"
properties: "Eigenschaften"
shipping: "Versand"
shipping_methods: "Lieferoptionen"
payment_methods: "Zahlungsarten"
payment_method_fee: "Transaktionsgebühr"
@@ -2007,6 +2034,8 @@ de_DE:
order_cycles_email_to_producers_notice: 'E-Mails, die an die Produzenten gesendet werden sollen, wurden zum Senden in die Warteschlange gestellt.'
order_cycles_no_permission_to_coordinate_error: "Keines Ihrer Unternehmen ist berechtigt, einen Bestellzyklus zu koordinieren"
order_cycles_no_permission_to_create_error: "Sie sind nicht berechtigt, einen von diesem Unternehmen koordinierten Bestellzyklus zu erstellen"
back_to_orders_list: "Zurück zur Bestellliste"
amount: "Menge"
js:
saving: 'Speichern ...'
changes_saved: 'Änderungen gespeichert'
@@ -2024,8 +2053,8 @@ de_DE:
choose: Wählen
resolve_errors: Bitte beheben Sie die folgenden Fehler
more_items: "+ %{count} Mehr"
closes: schließt
admin:
enterprise_limit_reached: "Sie haben die Standardgrenze für Unternehmen pro Konto erreicht. Schreiben Sie an %{contact_email}, wenn Sie es erhöhen müssen."
modals:
got_it: Ich habs
tag_rule_help:
@@ -2186,8 +2215,8 @@ de_DE:
could_not_delete_customer: 'Der Kunde konnte nicht gelöscht werden'
product_import:
confirmation: |
Dadurch wird der Lagerbestand für alle Produkte auf Null gesetzt
Unternehmen, die in der hochgeladenen Datei nicht vorhanden sind.
Dadurch wird der Lagerbestand für alle Produkte auf Null gesetzt
Unternehmen, die in der hochgeladenen Datei nicht vorhanden sind.
order_cycles:
update_success: 'Ihr Bestellzyklus wurde aktualisiert.'
no_distributors: In diesem Bestellzyklus gibt es keine Distributoren. Dieser Bestellzyklus ist für Kunden erst sichtbar, wenn Sie einen hinzufügen. Möchten Sie diesen Bestellzyklus weiterhin speichern?
@@ -2197,6 +2226,10 @@ de_DE:
customers:
select_shop: 'Bitte wählen Sie zuerst ein Geschäft aus'
could_not_create: Es tut uns leid! Konnte nicht ... Erstellen
subscriptions:
closes: schließt
closed: geschlossen
close_date_not_set: Abschlussdatum nicht eingestellt
producers:
signup:
start_free_profile: "Beginnen Sie mit einem kostenlosen Profil und erweitern Sie es, wenn Sie fertig sind!"
@@ -2347,11 +2380,11 @@ de_DE:
user_mailer:
reset_password_instructions:
request_sent_text: |
Es wurde angefragt, das Passwort zurückzusetzen. Falls dies nicht der Fall ist, bitten wir dieses Email zu ignorieren.
Es wurde angefragt, das Passwort zurückzusetzen. Falls dies nicht der Fall ist, bitten wir dieses Email zu ignorieren.
link_text: >
Möchtest Du das Passwort zurücksetzen? Bitte den Link unten auszuwählen.
issue_text: |
Falls die URL unten nicht funktionieren sollte, versuche die Adresse mit Hilfe von "copy and paste" in dein Browserfenster zu übertragen.
Falls die URL unten nicht funktionieren sollte, versuche die Adresse mit Hilfe von "copy and paste" in dein Browserfenster zu übertragen.
confirmation_instructions:
subject: Bitte bestätigen Sie Ihren OFN-Account
weight: Gewicht (pro kg)

View File

@@ -64,6 +64,8 @@ en:
completed_at: Completed At
number: Number
email: Customer E-Mail
spree/payment:
amount: Amount
errors:
models:
spree/user:
@@ -114,6 +116,8 @@ en:
subject: "Please confirm the email address for %{enterprise}"
welcome:
subject: "%{enterprise} is now on %{sitename}"
invite_manager:
subject: "%{enterprise} has invited you to be a manager"
producer_mailer:
order_cycle:
subject: "Order cycle report for %{producer}"
@@ -265,6 +269,7 @@ en:
phone: Phone
price: Price
producer: Producer
image: Image
product: Product
quantity: Quantity
schedule: Schedule
@@ -436,6 +441,20 @@ en:
products:
unit_name_placeholder: 'eg. bunches'
bulk_edit:
unit: Unit
display_as: Display As
category: Category
tax_category: Tax Category
inherits_properties?: Inherits Properties?
available_on: Available On
av_on: "Av. On"
upload_an_image: Upload an image
product_search_keywords: Product Search Keywords
product_search_tip: Type words to help search your products in the shops. Use space to separate each keyword.
SEO_keywords: SEO Keywords
seo_tip: Type words to help search your products in the web. Use space to separate each keyword.
Search: Search
properties:
property_name: Property Name
inherited_property: Inherited Property
@@ -443,7 +462,6 @@ en:
to_order_tip: "Items made to order do not have a set stock level, such as loaves of bread made fresh to order."
product_distributions: "Product Distributions"
group_buy_options: "Group Buy Options"
seo: "SEO"
back_to_products_list: "Back to products list"
variant_overrides:
@@ -496,6 +514,7 @@ en:
max_fulfilled_units: "Max Fulfilled Units"
order_error: "Some errors must be resolved before you can update orders.\nAny fields with red borders contain errors."
variants_without_unit_value: "WARNING: Some variants do not have a unit value"
select_variant: "Select a variant"
enterprise:
select_outgoing_oc_products_from: Select outgoing OC products from
@@ -655,6 +674,9 @@ en:
notifications_note: 'Note: A new email address may need to be confirmed prior to use'
managers: Managers
managers_tip: The other users with permission to manage this enterprise.
invite_manager: "Invite Manager"
invite_manager_tip: "Invite an unregistered user to sign up and become a manager of this enterprise."
add_unregistered_user: "Add an unregistered user"
email_confirmed: "Email confirmed"
email_not_confirmed: "Email not confirmed"
actions:
@@ -714,6 +736,9 @@ en:
welcome_text: You have successfully created a
next_step: Next step
choose_starting_point: 'Choose your starting point:'
invite_manager:
user_already_exists: "User already exists"
error: "Something went wrong"
order_cycles:
edit:
advanced_settings: Advanced Settings
@@ -1309,6 +1334,13 @@ See the %{link} to find out more about %{sitename}'s features and to start using
If you are a producer or food enterprise, we are excited to have you as a part of the network."
email_signup_help_html: "We welcome all your questions and feedback; you can use the <em>Send Feedback</em> button on the site or email us at %{email}"
invite_email:
greeting: "Hello!"
invited_to_manage: "You have been invited to manage %{enterprise} on %{instance}."
confirm_your_email: "You will receive an email shortly to confirm your registration."
set_a_password: "You will then be prompted to set a password before you are able to administer the enterprise."
mistakenly_sent: "Not sure why you have received this email? Please contact %{owner_email} for more information, or you can contact %{instance} at %{instance_email}."
producer_mail_greeting: "Dear"
producer_mail_text_before: "We now have all the consumer orders for the next food drop."
producer_mail_order_text: "Here is a summary of the orders for your products:"
@@ -1600,6 +1632,7 @@ See the %{link} to find out more about %{sitename}'s features and to start using
reset_password: "Reset password"
registration_greeting: "Greetings!"
who_is_managing_enterprise: "Who is responsible for managing %{enterprise}?"
update_and_recalculate_fees: "Update And Recalculate Fees"
enterprise:
registration:
modal:
@@ -2123,10 +2156,10 @@ See the %{link} to find out more about %{sitename}'s features and to start using
unsaved_changes_confirmation: "Unsaved changes will be lost. Continue anyway?"
one_product_unsaved: "Changes to one product remain unsaved."
products_unsaved: "Changes to %{n} products remain unsaved."
add_manager: "Add a manager"
is_already_manager: "is already a manager!"
no_change_to_save: " No change to save"
add_manager: "Add a manager"
user_invited: "%{email} has been invited to manage this enterprise"
add_manager: "Add an existing user"
users: "Users"
about: "About"
images: "Images"
@@ -2138,6 +2171,7 @@ See the %{link} to find out more about %{sitename}'s features and to start using
social: "Social"
business_details: "Business Details"
properties: "Properties"
shipping: "Shipping"
shipping_methods: "Shipping Methods"
payment_methods: "Payment Methods"
payment_method_fee: "Transaction fee"
@@ -2188,6 +2222,14 @@ See the %{link} to find out more about %{sitename}'s features and to start using
order_cycles_email_to_producers_notice: 'Emails to be sent to producers have been queued for sending.'
order_cycles_no_permission_to_coordinate_error: "None of your enterprises have permission to coordinate an order cycle"
order_cycles_no_permission_to_create_error: "You don't have permission to create an order cycle coordinated by that enterprise"
back_to_orders_list: "Back to order list"
order_information: "Order Information"
date_completed: "Date Completed"
amount: "Amount"
state_names:
ready: Ready
pending: Pending
shipped: Shipped
js:
saving: 'Saving...'
changes_saved: 'Changes saved.'
@@ -2209,6 +2251,9 @@ See the %{link} to find out more about %{sitename}'s features and to start using
enterprise_limit_reached: "You have reached the standard limit of enterprises per account. Write to %{contact_email} if you need to increase it."
modals:
got_it: Got it
close: "Close"
invite: "Invite"
invite_title: "Invite an unregistered user"
tag_rule_help:
title: Tag Rules
overview: Overview
@@ -2380,6 +2425,8 @@ See the %{link} to find out more about %{sitename}'s features and to start using
# TODO: remove 'account_updated' key once we get to Spree 2.0
account_updated: "Account updated!"
my_account: "My account"
date: "Date"
time: "Time"
admin:
orders:
invoice:

View File

@@ -16,14 +16,8 @@ en_GB:
devise:
failure:
invalid: |
Invalid email or password.
Were you a guest last time? Perhaps you need to create an account or reset your password.
enterprise_confirmations:
enterprise:
confirmed: Thank you, your email address has been confirmed.
not_confirmed: Your email address could not be confirmed. Perhaps you have already completed this step?
confirmation_sent: "Confirmation email sent!"
confirmation_not_sent: "Could not send a confirmation email."
Invalid email or password.
Were you a guest last time? Perhaps you need to create an account or reset your password.
enterprise_mailer:
confirmation_instructions:
subject: "Please confirm the email address for %{enterprise}"
@@ -660,6 +654,11 @@ en_GB:
description: Invoices for import into Xero
packing:
name: Packing Reports
subscriptions:
review:
details: Details
address: Address
products: Products
stripe_connect_settings:
edit:
title: "Stripe Connect"
@@ -1150,8 +1149,8 @@ en_GB:
orders_could_not_cancel: "Sorry, the order could not be cancelled"
orders_cannot_remove_the_final_item: "Cannot remove the final item from an order, please cancel the order instead."
orders_bought_items_notice:
one: An additional item is already confirmed for this order cycle
other: '%{count} additional items already confirmed for this order cycle'
one: "An additional item is already confirmed for this order cycle"
other: "%{count} additional items already confirmed for this order cycle"
orders_bought_edit_button: Edit confirmed items
orders_bought_already_confirmed: "* already confirmed"
orders_confirm_cancel: Are you sure you want to cancel this order?
@@ -1968,8 +1967,8 @@ en_GB:
could_not_delete_customer: 'Could not delete customer'
product_import:
confirmation: |
This will set stock level to zero on all products for this
enterprise that are not present in the uploaded file.
This will set stock level to zero on all products for this
enterprise that are not present in the uploaded file.
order_cycles:
update_success: 'Your order cycle has been updated.'
no_distributors: There are no distributors in this order cycle. This order cycle will not be visible to customers until you add one. Would you like to continue saving this order cycle?'
@@ -2120,13 +2119,13 @@ en_GB:
user_mailer:
reset_password_instructions:
request_sent_text: |
A request to reset your password has been made.
If you did not make this request, simply ignore this email.
A request to reset your password has been made.
If you did not make this request, simply ignore this email.
link_text: >
If you did make this request just click the link below:
issue_text: |
If the above URL does not work try copying and pasting it into your browser.
If you continue to have problems please feel free to contact us.
If the above URL does not work try copying and pasting it into your browser.
If you continue to have problems please feel free to contact us.
weight: Weight (per kg)
zipcode: Postcode
users:

View File

@@ -16,14 +16,8 @@ en_US:
devise:
failure:
invalid: |
Invalid email or password.
Were you a guest last time? Perhaps you need to create an account or reset your password.
enterprise_confirmations:
enterprise:
confirmed: Thank you, your email address has been confirmed.
not_confirmed: Your email address could not be confirmed. Perhaps you have already completed this step?
confirmation_sent: "Confirmation email sent!"
confirmation_not_sent: "Could not send a confirmation email."
Invalid email or password.
Were you a guest last time? Perhaps you need to create an account or reset your password.
enterprise_mailer:
confirmation_instructions:
subject: "Please confirm the email address for %{enterprise}"
@@ -660,6 +654,11 @@ en_US:
description: Invoices for import into Xero
packing:
name: Packing Reports
subscriptions:
review:
details: Details
address: Address
products: Products
stripe_connect_settings:
edit:
title: "Stripe Connect"
@@ -1962,8 +1961,8 @@ en_US:
could_not_delete_customer: 'Could not delete customer'
product_import:
confirmation: |
This will set stock level to zero on all products for this
enterprise that are not present in the uploaded file.
This will set stock level to zero on all products for this
enterprise that are not present in the uploaded file.
order_cycles:
update_success: 'Your order cycle has been updated.'
no_distributors: There are no distributors in this order cycle. This order cycle will not be visible to customers until you add one. Would you like to continue saving this order cycle?'
@@ -2114,13 +2113,13 @@ en_US:
user_mailer:
reset_password_instructions:
request_sent_text: |
A request to reset your password has been made.
If you did not make this request, simply ignore this email.
A request to reset your password has been made.
If you did not make this request, simply ignore this email.
link_text: >
If you did make this request just click the link below.
issue_text: |
If the above URL does nor work, try to copy and paste it into your browser.
If you continue to have problems please feel free to contact us.
If the above URL does nor work, try to copy and paste it into your browser.
If you continue to have problems please feel free to contact us.
weight: Weight (per lb)
zipcode: Zipcode
users:

View File

@@ -8,6 +8,8 @@ es:
completed_at: Completado en
number: Número
email: E-mail del consumidor
spree/payment:
amount: Cantidad
errors:
models:
spree/user:
@@ -58,6 +60,8 @@ es:
subject: "Confirma la dirección de correo electrónico de %{enterprise}"
welcome:
subject: "%{enterprise} está ahora en %{sitename}"
invite_manager:
subject: "%{enterprise} te ha invitado a ser administrador"
producer_mailer:
order_cycle:
subject: "Informe Ciclo de Pedido para %{producer}"
@@ -200,6 +204,7 @@ es:
phone: Teléfono
price: Precio
producer: Productora
image: Imagen
product: Producto
quantity: Cantidad
schedule: Programación
@@ -353,6 +358,14 @@ es:
manages: Gestionan
products:
unit_name_placeholder: 'ej. manojos'
bulk_edit:
unit: Unidad
display_as: Mostrar como
category: Categoría
tax_category: Categoría de impuestos
inherits_properties?: ¿Hereda propiedades?
available_on: Disponible en
upload_an_image: Subir una imagen
properties:
property_name: Nombre de la Propiedad
inherited_property: Propiedad Heredada
@@ -412,6 +425,7 @@ es:
max_fulfilled_units: "Max Unidades Completadas"
order_error: "Algunos errores deberán ser resueltos antes de que puedas actualizar los pedidos.\nTodos los campos con borde rojo contienen errores."
variants_without_unit_value: "CUIDADO: Algunas variedades no tienen un valor unitario "
select_variant: "Seleccione una variante"
enterprise:
select_outgoing_oc_products_from: Selecciona los productos OC que salgan de
enterprises:
@@ -573,6 +587,9 @@ es:
notifications_note: 'Nota: Una nueva dirección de correo debe ser confirmada. '
managers: Gestoras
managers_tip: Otras usuarias con permiso para gestionar esta organización.
invite_manager: "Invitar administrador"
invite_manager_tip: "Invite a un usuario no registrado a registrarse y convertirse en administrador de esta organización."
add_unregistered_user: "Agregar un usuario no registrado"
email_confirmed: "Correo electrónico confirmado"
email_not_confirmed: "Correo electrónico no confirmado"
actions:
@@ -632,6 +649,9 @@ es:
welcome_text: Has creado correctamente un
next_step: Siguiente paso
choose_starting_point: 'Elige tu punto de partida:'
invite_manager:
user_already_exists: "El usuario ya existe"
error: "Algo salió mal"
order_cycles:
edit:
advanced_settings: Configuración Avanzada
@@ -1170,6 +1190,12 @@ es:
email_signup_shop_html: "Ahora puedes iniciar sesión en %{link}."
email_signup_text: "Gracias por unirte a la red. Si eres un comprador, ¡esperamos presentarte a muchos agricultores, grupos de consumo y deliciosa comida! Si eres una productora o formas parte de una organización de alimentos, estamos emocionados de que formes parte de la red."
email_signup_help_html: "Agradecemos todas tus preguntas y feedback; puedes usar el botón de <em>Enviar Feedback</em> en el sitio o escribir un email a %{email}"
invite_email:
greeting: "¡Hola!"
invited_to_manage: "Ha sido invitado a administrar %{enterprise} en %{instance}."
confirm_your_email: "En breve recibirá un correo electrónico para confirmar su registro."
set_a_password: "Luego se le pedirá que establezca una contraseña antes de poder administrar la organización."
mistakenly_sent: "¿No está seguro de por qué ha recibido este correo electrónico? Por favor, póngase en contacto con %{owner_email} para obtener más información, o puede ponerse en contacto con %{instance} en %{instance_email}."
producer_mail_greeting: "Estimada"
producer_mail_text_before: "Ahora tenemos todas los pedidos de las consumidoras para la siguiente ronda."
producer_mail_order_text: "Se muestra un resumen de los pedidos de tus productos:"
@@ -1432,6 +1458,7 @@ es:
password_reset_sent: "¡Le enviamos un correo electrónico con instrucciones para restaurar la contraseña!"
reset_password: "Restaurar contraseña"
who_is_managing_enterprise: "¿Quién es responsable de administrar %{enterprise}?"
update_and_recalculate_fees: "Actualizar y recalcular tarifas"
enterprise:
registration:
modal:
@@ -1625,7 +1652,7 @@ es:
outstanding_balance: "Saldo extraordinario"
admin_entreprise_relationships: "Relaciones de la Organización"
admin_entreprise_relationships_everything: "Marcar todos"
admin_entreprise_relationships_permits: "Permisos"
admin_entreprise_relationships_permits: "Permite"
admin_entreprise_relationships_seach_placeholder: "Buscar"
admin_entreprise_relationships_button_create: "Crear"
admin_entreprise_groups: "Redes de organizaciones"
@@ -1943,7 +1970,8 @@ es:
products_unsaved: "Los cambios de %{n} productos aún no se han guardado."
is_already_manager: "¡Ya eres un administrador!"
no_change_to_save: "No hay cambios para guardar"
add_manager: "Añadir a un administrador"
user_invited: "%{email} ha sido invitado a administrar esta organización"
add_manager: "Agrega un usuario existente"
users: "Usuarias"
about: "Acerca de"
images: "Imagenes"
@@ -1954,6 +1982,7 @@ es:
social: "Social"
business_details: "Detalles de la Organización"
properties: "Propiedades"
shipping: "Envío"
shipping_methods: "Métodos de envío"
payment_methods: "Métodos de Pago"
payment_method_fee: "Tarifa de Transacción"
@@ -2004,6 +2033,9 @@ es:
order_cycles_email_to_producers_notice: 'Los correos electrónicos que se enviarán a las productoras se han puesto en cola para enviarlos.'
order_cycles_no_permission_to_coordinate_error: "Ninguna de tus organizaciones tiene permiso para coordinar un ciclo de pedido"
order_cycles_no_permission_to_create_error: "No tienes permiso para crear un ciclo de pedido coordinado por esta empresa."
back_to_orders_list: "Volver a la lista de pedidos"
order_information: "información del pedido"
amount: "Cantidad"
js:
saving: 'Guardando...'
changes_saved: 'Cambios guardados.'
@@ -2195,6 +2227,7 @@ es:
subscriptions:
closes: cierra
closed: cerrado
close_date_not_set: Fecha de cierre no establecida
producers:
signup:
start_free_profile: "Empieze con un perfil gratuito, y amplíelo cuando esté preparado!"
@@ -2308,14 +2341,23 @@ es:
address: dirección
adjustments: ajustes
awaiting_return: Esperando retorno
canceled: cancelado
cart: carrito
complete: completar
confirm: Confirmar
delivery: Entrega
paused: pausado
payment: pago
pending: pendiente
resumed: resumido
returned: devuelto
skrill: skrill
subscription_state:
active: activo
pending: pendiente
ended: terminado
paused: pausado
canceled: cancelado
payment_states:
balance_due: saldo debido
completed: completado
@@ -2356,6 +2398,7 @@ es:
cards: Tarjetas de crédito
transactions: Transacciones
settings: Configuración de la cuenta
unconfirmed_email: "Correo electrónico pendiente de confirmación para: %{unconfirmed_email}. Su dirección de correo electrónico se actualizará una vez que se confirme el nuevo correo electrónico."
orders:
open_orders: Pedidos Abiertos
past_orders: Pedidos anteriores

View File

@@ -8,6 +8,8 @@ fr:
completed_at: 'Passée à '
number: N° commande
email: Email acheteur
spree/payment:
amount: Montant
errors:
models:
spree/user:
@@ -43,25 +45,23 @@ fr:
send_instructions: "Un email a été envoyé avec des instructions pour confirmer votre adresse email. Vérifiez votre boite mail!"
failed_to_send: "Une erreur est survenue lors de l'envoi de l'email de confirmation."
resend_confirmation_email: "Renvoyer l'email de confirmation."
confirmed: "Merci d'avoir confirmé votre adresse email. Vous pouvez maintenant vous connecter."
not_confirmed: "Votre adresse email n'a pas pu être confirmée. Peut-être avez-vous déjà confirmé cette adresse email?"
user_registrations:
spree_user:
signed_up_but_unconfirmed: "Un message avec un lien de confirmation a été envoyé à l'adresse email indiquée. Veuillez cliquer sur ce lien pour activer votre compte."
failure:
invalid: |
Email / mot de passe incorrect.
Créez votre compte ou réinitialisez votre mot de passe.
Email / mot de passe incorrect.
Créez votre compte ou réinitialisez votre mot de passe.
unconfirmed: "Veuillez valider le lien envoyé par email pour pouvoir continuer."
enterprise_confirmations:
enterprise:
confirmed: Merci, votre adresse email a bien été confirmée!
not_confirmed: Votre adresse email n'a pas pu être confirmée. Peut-être l'aviez-vous déjà confirmée?
confirmation_sent: "Un mail de confirmation a été envoyé!"
confirmation_not_sent: "Impossible d'envoyer le mail de confirmation."
enterprise_mailer:
confirmation_instructions:
subject: "Confirmez l'adresse email pour %{enterprise}"
welcome:
subject: "%{enterprise} est maintenant sur %{sitename}"
invite_manager:
subject: "%{enterprise} vous a invité comme manager"
producer_mailer:
order_cycle:
subject: "Rapport de cycle de vente pour %{producer}"
@@ -204,6 +204,7 @@ fr:
phone: N° tel
price: Prix
producer: Producteur
image: Image
product: Produit
quantity: Quantité
schedule: Rythme d'abonnement
@@ -357,6 +358,15 @@ fr:
manages: gère
products:
unit_name_placeholder: 'ex: botte'
bulk_edit:
unit: Unité
display_as: Unité affichéé
category: Catégorie
tax_category: TVA applicable
inherits_properties?: Hériter des propriétés?
available_on: Disponible via
av_on: "Disp. via"
upload_an_image: Importer une image
properties:
property_name: Nom du label
inherited_property: Label producteur appliqué par défaut
@@ -416,6 +426,7 @@ fr:
max_fulfilled_units: "Nombre max d'unités commandées"
order_error: "Des erreurs doivent être résolues avant de pouvoir mettre à jour les commandes.\nLes champs entourés en rouge contiennent des erreurs."
variants_without_unit_value: "ATTENTION: certaines variantes n'ont pas de nombre d'unités"
select_variant: "Choisir une variante"
enterprise:
select_outgoing_oc_products_from: Sélectionner les produits sortants pour le cycle de vente parmi
enterprises:
@@ -576,6 +587,9 @@ fr:
notifications_note: 'A noter: si vous saisissez une nouvelle adresse, un email de confirmation sera envoyé à cette adresse avec un lien de validation à cliquer.'
managers: Managers
managers_tip: Sélectionner ici les utilisateurs ayant la permission de gérer cette entreprise. Ils doivent avoir un compte sur Open Food France pour être sélectionnés.
invite_manager: "Inviter un manager"
invite_manager_tip: "Inviter un nouvel utilisateur à créer son compte et le nommer comme manager de cette entreprise."
add_unregistered_user: "Ajouter un nouvel utilisateur"
email_confirmed: "Email confirmé"
email_not_confirmed: "Email non confirmé"
actions:
@@ -635,6 +649,9 @@ fr:
welcome_text: 'Vous avez créé avec succès '
next_step: Etape suivante
choose_starting_point: 'Choisissez par où commencer:'
invite_manager:
user_already_exists: "Le compte existe déjà"
error: "Un problème est survenu"
order_cycles:
edit:
advanced_settings: Paramétrages avancés
@@ -821,6 +838,12 @@ fr:
allowed_payment_method_types_tip: Seules des méthodes de paiement de type "cash" ou "Stripe" peuvent être utilisées pour le moment
credit_card: Carte de crédit
no_cards_available: Pas de carte disponible
loading_flash:
loading: Abonnements en cours de chargement
review:
details: Informations
address: Adresse
products: Produits
product_already_in_order: Ce produit a déjà été ajouté à la commande. Veuillez directement modifier la quantité.
orders:
number: Nombre
@@ -832,6 +855,7 @@ fr:
confirm_unpause_msg: Voulez-vous vraiment annuler la mise en pause de cet abonnement?
unpause_failure_msg: 'Désolé, l''annulation de la mise en pause a échoué!'
confirm_cancel_open_orders_msg: "Cet abonnement a des commandes ouvertes. Les acheteurs ont été notifiés que leur commande allait être passée. Voulez-vous annulez ces commandes ou les conserver?"
resume_canceled_orders_msg: "Certaines commandes pour cet abonnement peuvent être réouvertes dès maintenant. Vous pouvez les réouvrir depuis la liste des commandes."
yes_cancel_them: Les annuler
no_keep_them: Les conserver
yes_i_am_sure: Oui, je confirme
@@ -1084,7 +1108,7 @@ fr:
order_delivery_address: Adresse de livraison
order_delivery_time: Créneau de livraison/retrait
order_special_instructions: "Vos commentaires:"
order_pickup_time: Prêt à être retirer
order_pickup_time: Prêt à être retiré
order_pickup_instructions: Instructions de retrait
order_produce: Produit
order_total_price: Total
@@ -1166,6 +1190,12 @@ fr:
email_signup_shop_html: "Vous pouvez maintenant vous connecter sur %{link}."
email_signup_text: "Merci d'avoir rejoint le réseau. Si vous êtes un client, nous sommes impatients de vous faire découvrir de nombreux agriculteurs fantastiques, de merveilleux hubs de distribution et des plats délicieux! Si vous êtes un producteur ou autre entreprise alimentaire, nous sommes ravis de vous compter parmi les membres du réseau."
email_signup_help_html: "Vos questions et feedbacks sont les bienvenus! Cliquez sur le bouton <em>Envoyer un commentaire</em> sur le site ou envoyez-nous un email à %{email}"
invite_email:
greeting: "Bonjour!"
invited_to_manage: "Vous avez été invité(e) à gérer %{enterprise} sur %{instance}."
confirm_your_email: "Vous avez reçu ou allez recevoir un email avec un lien de confirmation. Vous ne pourrez pas accéder au profil de l'entreprise avant d'avoir confirmé votre email."
set_a_password: "Vous serez ensuite invité(e) à choisir un mot de passe avant de pouvoir accéder et gérer le profil de l'entreprise."
mistakenly_sent: "Vous ne savez pas pourquoi vous recevez cet email? Veuillez contacter %{owner_email} pour toute question."
producer_mail_greeting: "Cher(ère)"
producer_mail_text_before: "Nous avons reçu toutes les commandes pour la prochaine livraison."
producer_mail_order_text: "Voilà la liste et les quantités des produits commandés vous concernant:"
@@ -1333,8 +1363,8 @@ fr:
orders_edit_title: Panier
orders_edit_headline: Votre panier
orders_edit_time: Commande prête pour
orders_edit_continue: Poursuivre mes achats
orders_edit_checkout: Poursuivre ma commande
orders_edit_continue: Retour à la boutique
orders_edit_checkout: Etape suivante (coordonnées)
orders_form_empty_cart: "Vider le panier"
orders_form_subtotal: Sous-total
orders_form_admin: Admin & traitements
@@ -1354,8 +1384,8 @@ fr:
orders_could_not_cancel: "Désolé, la commande n'a pas pu être annulée"
orders_cannot_remove_the_final_item: "Impossible de supprimer le dernier produit d'une commande, si vous souhaitez supprimer l'ensemble des produits, veuillez annuler la commande."
orders_bought_items_notice:
one: Un produit ajouté a bien été confirmé pour ce cycle de vente
other: '%{count} produits ajoutés ont été confirmés pour ce cycle de vente.'
one: "Un produit ajouté a bien été confirmé pour ce cycle de vente"
other: "%{count} produits ajoutés ont été confirmés pour ce cycle de vente."
orders_bought_edit_button: Modifier les produits confirmés
orders_bought_already_confirmed: "* déjà confirmé"
orders_confirm_cancel: Voulez-vous vraiment annuler cette commande ?
@@ -1428,6 +1458,7 @@ fr:
password_reset_sent: "Un email contenant les instructions pour changer votre mot de passe a été envoyé!"
reset_password: "Changer de mot de passe"
who_is_managing_enterprise: "Qui gère %{enterprise}?"
update_and_recalculate_fees: "Mettre à jour et recalculer les frais"
enterprise:
registration:
modal:
@@ -1939,7 +1970,8 @@ fr:
products_unsaved: "Des changements sur %{n} produits n'ont pas été sauvegardés."
is_already_manager: "est déjà manager!"
no_change_to_save: "Pas de changement à sauvegarder"
add_manager: "Ajouter un manager"
user_invited: "%{email}a été invité à gérer cette entreprise"
add_manager: "Ajouter un utilisateur existant"
users: "Managers"
about: "A propos"
images: "Images"
@@ -1950,6 +1982,7 @@ fr:
social: "Réseaux sociaux"
business_details: "Juridique"
properties: "Propriétés / labels"
shipping: "Expédition"
shipping_methods: "Méthodes de livraison"
payment_methods: "Méthodes de paiement"
payment_method_fee: "Frais de transaction"
@@ -1966,7 +1999,7 @@ fr:
content_configuration_pricing_table: "(A FAIRE : Tableau des tarifs)"
content_configuration_case_studies: "(A FAIRE : Etudes de Cas)"
content_configuration_detail: "(A FAIRE : Détails)"
enterprise_name_error: "est déjà utilisé. Si vous êtes le gérant de cette entreprise et que vous souhaitez demander le transfert du compte, merci de contacter le manager actuel du profil à %{email}."
enterprise_name_error: "est déjà utilisé. Si vous êtes le gérant de cette entreprise et que vous souhaitez demander le transfert du compte, ou bien si vous souhaitez distribuer les produits de cette entreprise, merci de contacter le manager actuel du profil à %{email}."
enterprise_owner_error: "^ %{email} ne peut pas créer de nouvelles entreprises (limite actuelle : %{enterprise_limit} entreprises )."
enterprise_role_uniqueness_error: "^Ce rôle existe déjà."
inventory_item_visibility_error: doit être vrai ou faux
@@ -2002,6 +2035,8 @@ fr:
order_cycles_email_to_producers_notice: 'Les emails à destination des producteurs ont été mis en file d''attente.'
order_cycles_no_permission_to_coordinate_error: "Aucune de vos entreprises n'a les droits requis pour coordonner un cycle de vente"
order_cycles_no_permission_to_create_error: "Vous n'avez pas les droits requis pour créer un cycle de vente coordonné par cette entreprise"
back_to_orders_list: "Retour à la liste des commandes"
amount: "Montant"
js:
saving: 'Enregistrement en cours...'
changes_saved: 'Modifications sauvegardées.'
@@ -2015,11 +2050,12 @@ fr:
unavailable: Non disponible
profile: Profil
hub: Hub
shop: Faire mes courses
shop: Boutique
choose: Choisir
resolve_errors: Veuillez corriger les erreurs suivantes
more_items: "+ %{count} en plus"
admin:
enterprise_limit_reached: "Vous avez atteint le nombre limite d'entreprises autorisées par défaut. Ecrivez à %{contact_email}si vous avez besoin d'augmenter cette limite."
modals:
got_it: J'ai compris
tag_rule_help:
@@ -2183,8 +2219,8 @@ fr:
could_not_delete_customer: 'L''acheteur n''a pas pu être supprimé'
product_import:
confirmation: |
Cette action remettra tous les niveaux de stock à zero pour cette
entreprises pour les produits non présents dans ce fichier.
Cette action remettra tous les niveaux de stock à zero pour cette
entreprises pour les produits non présents dans ce fichier.
order_cycles:
update_success: 'Votre cycle de vente a été mis à jour.'
no_distributors: Il n'y a pas de distributeur pour ce cycle de vente. Il ne sera pas visible aux acheteurs tant qu'il n'y aura pas de distributeur. Voulez-vous tout de même sauvegarder ce cycle de vente ?
@@ -2194,6 +2230,10 @@ fr:
customers:
select_shop: 'Veuillez d''abord choisir une boutique'
could_not_create: Oups ! Création impossible...
subscriptions:
closes: ferme
closed: fermé
close_date_not_set: Date de fin non renseignée
producers:
signup:
start_free_profile: "Commencez par créer votre profil entreprise, et changez de formule quand vous êtes prêt !"
@@ -2344,14 +2384,14 @@ fr:
user_mailer:
reset_password_instructions:
request_sent_text: |
Votre demande de nouveau mot de passe a bien été prise en compte.
Si vous n'avez pas demandé de nouveau mot de passe, veuillez ignorer cet e-mail.
Votre demande de nouveau mot de passe a bien été prise en compte.
Si vous n'avez pas demandé de nouveau mot de passe, veuillez ignorer cet e-mail.
link_text: >
Si vous êtes bien à l'origine de cette demande, veuillez cliquer sur le
lien ci-dessous :
issue_text: |
Si le lien ne fonctionne pas, essayez de le copier - coller dans la barre d'adresse de votre navigateur.
Si le problème persiste, n'hésitez pas à nous contacter.
Si le lien ne fonctionne pas, essayez de le copier - coller dans la barre d'adresse de votre navigateur.
Si le problème persiste, n'hésitez pas à nous contacter.
confirmation_instructions:
subject: Veuillez confirmer votre compte
weight: Poids (au kg)

View File

@@ -4,30 +4,31 @@ it:
spree/order:
payment_state: Stato del pagamento
shipment_state: Stato della spedizione
errors:
models:
spree/user:
attributes:
email:
taken: "Esiste già un account con questa email. Ti preghiamo di effettuare il login o impostare una nuova password."
devise:
failure:
invalid: |
Email o password non valida.
La volta scorsa eri ospite? Forse devi creare un account o resettare la tua password.
enterprise_confirmations:
enterprise:
confirmed: Grazie, il tuo indirizzo email è stato confermato.
not_confirmed: L'indirizzo email non è stato confermato. Forse avevi già completato questo step?
confirmation_sent: "Email di conferma inviata!"
confirmation_not_sent: "Non è stato possibile mandare l'email di conferma."
Email o password non valida.
La volta scorsa eri ospite? Forse devi creare un account o resettare la tua password.
enterprise_mailer:
confirmation_instructions:
subject: "Per favore conferma l'indirizzo email per %{enterprise}"
welcome:
subject: "%{enterprise} è ora su %{sitename}"
home: "OFN"
title: Open Food Network
welcome_to: 'Benvenuto a'
site_meta_description: "Cominciamo da zero. Con i produttori e gli allevatori pronti a raccontare le loro storie, sinceramente e orgogliosamente. Con i distributori pronti a connettere le persone con i prodotti in modo giusto ed equo. Con i compratori che credono che migliori decisioni per l'acquisto settimanale possano..."
search_by_name: Cerca per nome o zona...
producers: 'Produttori'
producers_join: I Produttori sono ora invitati ad unirsi ad Open Food Network
charges_sales_tax: Addebiti l'IVA?
print_invoice: "Stampa fattura"
print_ticket: "Stampa Biglietto"
send_invoice: "Manda fattura"
resend_confirmation: "Rimanda conferma"
view_order: "Vedi l'ordine"
@@ -49,6 +50,22 @@ it:
say_yes: "Sì"
then: poi
sort_order_cycles_on_shopfront_by: "Ordina cicli d'ordine in vetrina per"
select_continue: Seleziona e continua
remove: Rimuovi
or: o
show_more: Mostra di più
show_all: Mostra tutti
show_all_with_more: "Mostra tutti (ancora %{num})"
cancel: Annulla
edit: Modifica
all: Tutti
available: Disponibile
weight: Peso
'yes': "Sì"
'no': "No"
blocked_cookies_alert: "Il tuo browser sembra stia bloccando i cookies necessari ad usare questa pagina del negozio. Clicca sotto per consentire i cookies e ricaricare la pagina."
notes: Note
error: Eorrore
admin:
date: Data
email: Email
@@ -66,62 +83,26 @@ it:
sku: articolo gestito a magazzino
tags: Tag
variant: Variante
weight: Peso
select_all: Seleziona tutto
quick_search: Ricerca veloce
clear_all: Cancella tutto
start_date: "Data di inizio"
end_date: "Data di fine"
clear_filters: Cancella filtri
clear: Pulisci
columns: Colonne
actions: Azioni
viewing: "Vista: %{current_view_name}"
description: Descrizione
whats_this: Cos'è questo?
tag_has_rules: "Regole esistenti per questo tag: %{num}"
has_one_rule: "ha una regola"
has_n_rules: "ha %{num} regole"
unsaved_confirm_leave: "Ci sono cambiamenti non salvati in questa pagina. Continuare senza salvare?"
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"
@@ -141,15 +122,9 @@ it:
select_country: 'Seleziona il paese'
select_state: 'Selezione la provincia'
edit: 'Modifica'
products:
bulk_edit:
unit: Unità
display_as: Visualizza come
category: Categoria
tax_category: Categoria di imposta
inherits_properties?: Eredita proprietà?
available_on: Disponibile il
av_on: "Disp. il"
cache_settings:
show:
error: Eorrore
variant_overrides:
index:
title: Inventario
@@ -191,28 +166,27 @@ it:
max_fulfilled_units: "Massime unità riempite"
order_error: "Qualche errore deve essere risolto prima che tu possa aggiornare gli ordini.\nOgni campo con i bordi rossi contiene errori."
variants_without_unit_value: "ATTENZIONE: Alcune varianti non hanno il valore dell'unità"
order_cycles:
edit:
choose_products_from: "Scegli prodotti da:"
enterprise:
select_outgoing_oc_products_from: Seleziona prodotti OC in uscita da
enterprises:
index:
producer?: Produttore?
producer?: "Produttore?"
package: Imballaggio
status: Stato
manage: Gestisci
form:
primary_details:
shopfront_requires_login: "La pagina del negozio richiede il login?"
shopfront_requires_login_tip: "Scegli se i clienti devono effettuare il login per vedere la pagina del negozio."
shopfront_requires_login_false: "Pubblico"
shopfront_requires_login_true: "Richiedi ai clienti di effettuare il login"
home:
hubs:
show_closed_shops: "Mostra negozi chiusi"
hide_closed_shops: "Nascondi negozi chiusi"
show_on_map: "Mostra tutto sulla mappa"
stripe_connect:
confirm_modal:
cancel: Annulla
users:
contact: "Contatto"
subscriptions:
review:
address: Indirizzo
products: Prodotti
stripe_connect_settings:
edit:
settings: "Impostazioni"
shared:
register_call:
selling_on_ofn: "Interessato ad entrare in Open Food Network?"
@@ -225,10 +199,10 @@ it:
require_customer_login: "Questo negozio è solo per clienti."
require_login_html: "Per favore, %{login} se hai già un account. Altrimenti %{register} per diventare un cliente."
require_customer_html: "Per favore %{contact} %{enterprise} per diventare un cliente."
invoice_column_item: "Articolo"
invoice_column_qty: "Qtà."
invoice_column_tax: "IVA"
invoice_column_price: "Prezzo"
invoice_column_item: "Articolo"
invoice_column_qty: "Qtà."
logo: "Logo (640x130)"
logo_mobile: "Mobile logo (75x26)"
logo_mobile_svg: "Mobile logo (SVG)"
@@ -254,8 +228,8 @@ it:
address: Indirizzo
address2: Indirizzo (continua)
city: Comune
state: Stato
postcode: CAP
state: Stato
country: Paese
unauthorized: Non autorizzato
terms_of_service: "Termini di servizio"
@@ -278,24 +252,14 @@ it:
label_more: "Mostra di più"
label_less: "Mostra meno"
label_notices: "Avvisi"
items: "articoli"
cart_headline: "Il tuo carrello"
total: "Totale"
checkout: "Paga ora"
cart_updating: "Aggiornamento del carrello..."
cart_empty: "Carrello vuoto"
cart_edit: "Modifica il tuo carrello"
card_number: Numero della carta
card_securitycode: "Codice di sicurezza"
card_expiry_date: Data di scadenza
ofn_cart_headline: "Carrello attuale per:"
ofn_cart_distributor: "Distributore:"
ofn_cart_oc: "Ciclo d'ordine:"
ofn_cart_from: "Da:"
ofn_cart_to: "A:"
ofn_cart_product: "Prodotto:"
ofn_cart_quantitiy: "Quantità:"
ofn_cart_send: "Comprami"
ie_warning_headline: "Il tuo browser non è aggiornato :-("
ie_warning_text: "Per una migliore esperienza con Open Food Network, ti raccomandiamo caldamente di aggiornare il browser:"
ie_warning_chrome: Scarica Chrome
@@ -405,7 +369,6 @@ it:
email_confirmation_click_link: "Per favore clicca il link di seguito per confermare la tua email e continuare l'impostazione del tuo profilo"
email_confirmation_link_label: "Conferma questo indirizzo email »"
email_confirmation_help_html: "Dopo aver confermato il tuo indirizzo email puoi accedere al tuo account di amministrazione per questa impresa. Vedi il link %{link} per scoprire di più sulle funzionalità di %{sitename} e iniziare a usare il tuo profilo e il tuo negozio online."
email_confirmation_userguide: "Guida utente"
email_social: "Connettiti con Noi:"
email_contact: "Scrivici:"
email_signoff: "Saluti,"
@@ -436,9 +399,6 @@ it:
email_special_instructions: "Tue note:"
email_signup_greeting: Ciao!
email_signup_welcome: "Benvenuto a %{sitename}!"
email_signup_login: Il tuo login
email_signup_email: La tua email per il login è
email_signup_shop_html: "Puoi cominciare adesso ad acquistare on-line su %{link}."
email_signup_text: "Grazie per esserti unito alla rete. Se sei un cliente, non vediamo l'ora di introdurti a molti produttori fantastici, distributori di cibo spettacolari e cibo delizioso! Se sei un produttore o un'impresa del cibo, siamo entusiasti di averti come parte della rete."
email_signup_help_html: "Accettiamo volentieri tutte le tue domane e i tuoi suggerimenti: puoi usare il bottone <em>Invia Feedback</em> sul sito o scriverci a %{email}"
producer_mail_greeting: "Caro"
@@ -460,6 +420,7 @@ it:
enterprises_next_closing: "Prossimo ordine in chiusura"
enterprises_ready_for: "Pronto per"
enterprises_choose: "Scegli quando vuoi il tuo ordine:"
maps_open: "Aperto"
hubs_buy: "Acquista per:"
hubs_shopping_here: "Compra qui"
hubs_orders_closed: "Ordini chiusi"
@@ -604,7 +565,6 @@ it:
orders_edit_checkout: Paga
orders_form_empty_cart: "Carrello vuoto"
orders_form_subtotal: Calcola il subtotale
orders_form_admin: Amministrazione e trasporto
orders_form_total: Totale
orders_oc_expired_headline: Gli ordini sono chiusi per questo ciclo di ordini
orders_oc_expired_text: "Spiacenti, gli ordini per questo ciclo son chiusi %{time} da! Per favore contatta direttamente il tuo hub per sapere se accettano ordini tardivi."
@@ -614,7 +574,6 @@ it:
orders_oc_expired_phone: "Telefono:"
orders_show_title: Conferma dell'ordine
orders_show_time: Ordine pronto
orders_show_number: Conferma dell'ordine
products_cart_distributor_choice: "Distributore per il tuo ordine:"
products_cart_distributor_change: "Il tuo distributore per questo ordine sarà sostituito da %{name} se aggiungi questo prodotto al tuo carrello."
products_cart_distributor_is: "Il tuo distributore per quest'ordine è %{name}."
@@ -709,7 +668,6 @@ it:
enterprise_about_headline: "Bello!"
enterprise_about_message: "Adesso completiamo i dettagli su"
enterprise_success: "Successo! %{enterprise} aggiunta ad Open Food Network"
enterprise_registration_exit_message: "Se esci da questa guida in qualsiasi momento, dovrai cliccare sul link di conferma nell'email che riceverai. Ciò ti condurrà al tuo pannello di amministrazione dove potrai continuare l'impostazione del profilo."
enterprise_description: "Descrizione breve"
enterprise_description_placeholder: "Una frase corta che descriva la tua azienda"
enterprise_long_desc: "Descrizione lunga"
@@ -749,8 +707,6 @@ it:
registration_finished_headline: "Finito!"
registration_finished_thanks: "Grazie per aver riempito i dettagli per %{enterprise}."
registration_finished_login: "Puoi cambiare o aggiornare la tua azienda ad ogni passo accedendo a Open Food Network e andando su Amministrazione."
registration_finished_activate: "Attiva %{enterprise}."
registration_finished_activate_instruction_html: "Abbiamo mandato un'email di conferma a <strong>%{email}</strong> se ancora non è stata ancora attivata.<br/>Per favore segui le istruzioni indicate per rendere la tua azienda visibile su Open Food Network."
registration_finished_action: "Open Food Network home"
registration_type_headline: "Ultimo passo per aggiungere %{enterprise}!"
registration_type_question: "Sei un produttore?"
@@ -844,6 +800,7 @@ it:
supplier: "Fornitore"
coordinator: "Coordinatore"
distributor: "Distributore"
enterprise_fees: "Contributi dell'azienda"
fee_type: "Tipo di contributo"
tax_category: "Categoria di imposta"
calculator: "Calcolatore"
@@ -884,18 +841,12 @@ it:
spree_admin_enterprises_producers_order_cycles: "Prodotti in OC"
spree_admin_enterprises_tabs_hubs: "HUBS"
spree_admin_enterprises_tabs_producers: "PRODUTTORI"
spree_admin_enterprises_producers_manage_order_cycles: "GESTISCI CICLI D'ORDINE"
spree_admin_enterprises_producers_manage_products: "GESTISCI PRODOTTI"
spree_admin_enterprises_producers_orders_cycle_text: "Non hai cicli d'ordine attivi."
spree_admin_enterprises_any_active_products_text: "Non hai prodotti attivi."
spree_admin_enterprises_create_new_product: "CREA UN NUOVO PRODOTTO"
spree_admin_order_cycles: "Cicli d'ordine"
spree_admin_order_cycles_tip: "I cicli d'ordine determinano quando e dove i tuoi prodotti saranno disponibili ai clienti."
dashbord: "Bacheca"
spree_admin_single_enterprise_alert_mail_confirmation: "Conferma l'indirizzo email per"
spree_admin_single_enterprise_alert_mail_sent: "Abbiamo spedito una mail a"
spree_admin_overview_action_required: "Azione richiesta"
spree_admin_overview_check_your_inbox: "Per favore controlla la tua posta in arrivo per istruzioni ulteriori. Grazie!"
change_package: "Cambia pacchetto"
spree_admin_single_enterprise_hint: "Suggerimento: Per permettere alle persone di trovarti, abilita la tua visibilità sotto"
your_profil_live: "Il tuo profilo è attivo"
@@ -927,7 +878,6 @@ it:
hub_sidebar_blue: "blu"
hub_sidebar_red: "rosso"
shop_trial_in_progress: "Il tuo negozio di prova scade tra %{days}."
shop_trial_expired: "Buone notizie! Abbiamo deciso di estendere le prove dei negozi fino a nuova notifica (probabilmente intorno a marzo 2015)."
report_customers_distributor: "Distributore"
report_customers_supplier: "Fornitore"
report_customers_cycle: "Ciclo d'ordine"
@@ -945,6 +895,7 @@ it:
report_order_cycle: "Ciclo d'ordine:"
report_entreprises: "Aziende:"
report_users: "Utenti:"
report_header_weight: Peso
initial_invoice_number: "Numero di fattura iniziale:"
invoice_date: "Data fattura:"
due_date: "Scadenza:"
@@ -977,7 +928,6 @@ it:
shipping_methods: "Metodi di Spedizione"
payment_methods: "Metodi di pagamento"
payment_method_fee: "Imposta di transizione"
enterprise_fees: "Contributi dell'azienda"
inventory_settings: "Impostazioni dell'inventario"
tag_rules: "Regole dei tag"
shop_preferences: "Preferenze di acquisto"
@@ -986,13 +936,25 @@ it:
validation_msg_product_category_cant_be_blank: "^Categoria di prodotto non può essere vuoto"
validation_msg_tax_category_cant_be_blank: "^Categoria di tassa non può essere vuoto"
validation_msg_is_associated_with_an_exising_customer: "è associato con un cliente esistente"
js:
error: Eorrore
admin:
panels:
enterprise_status:
description: Descrizione
spree:
shipment_states:
backorder: ordine arretrato
partial: parziale
pending: in pendenza
ready: pronto
shipped: spedito
order_state:
address: indirizzo
adjustments: aggiustamenti
awaiting_return: restituzione attesa
cart: carrello
complete: completo
confirm: conferma
delivery: consegna
payment: pagamento
resumed: ripreso
returned: restituito
skrill: skrill
payment_states:
balance_due: saldo
completed: completato
@@ -1004,16 +966,13 @@ it:
processing: in elaborazione
void: vuoto
invalid: invalido
order_state:
address: indirizzo
adjustments: aggiustamenti
awaiting_return: restituzione attesa
canceled: cancellato
cart: carrello
complete: completo
confirm: conferma
delivery: consegna
payment: pagamento
resumed: ripreso
returned: restituito
skrill: skrill
shipment_states:
backorder: ordine arretrato
partial: parziale
pending: in pendenza
ready: pronto
shipped: spedito
users:
open_orders:
edit: Modifica
cancel: Annulla

View File

@@ -43,20 +43,16 @@ nb:
send_instructions: "Du vil motta en epost med instruksjoner om hvordan du bekrefter kontoen din om noen få minutter."
failed_to_send: "Det oppsto en feil under sending av bekreftelses-eposten din."
resend_confirmation_email: "Send bekreftelses-epost på nytt."
confirmed: "Takk for at du bekreftet din epost! Du kan nå logge inn."
not_confirmed: "Din epostadresse kunne ikke bekreftes. Kanskje har du allerede fullført dette trinnet?"
user_registrations:
spree_user:
signed_up_but_unconfirmed: "En melding med en bekreftelseslink er sendt til epostadressen din. Vennligst åpne lenken for å aktivere kontoen din."
failure:
invalid: |
Ugyldig epost eller passord.
Var du gjest forrige gang? Kanskje du må opprette en konto eller nullstille passordet.
Ugyldig epost eller passord.
Var du gjest forrige gang? Kanskje du må opprette en konto eller nullstille passordet.
unconfirmed: "Du må bekrefte kontoen din før du fortsetter."
enterprise_confirmations:
enterprise:
confirmed: Takk, epostadressen din er bekreftet.
not_confirmed: Din epostadresse kan ikke bekreftes. Kanskje du allerede har fullført dette steget?
confirmation_sent: "Bekreftelsesepost er sendt!"
confirmation_not_sent: "Kunne ikke sende bekreftelsesepost."
enterprise_mailer:
confirmation_instructions:
subject: "Vennligst bekreft epostadressen til %{enterprise}"
@@ -820,6 +816,12 @@ nb:
allowed_payment_method_types_tip: Bare Kontant og Stripe betalingsmetoder kan brukes for øyeblikket
credit_card: Kredittkort
no_cards_available: Ingen kort tilgjengelig
loading_flash:
loading: LASTER ABONNEMENT
review:
details: Detaljer
address: Adresse
products: Produkter
product_already_in_order: Dette produktet er allerede lagt til i bestillingen. Vennligst rediger mengden direkte.
orders:
number: Antall
@@ -831,6 +833,7 @@ nb:
confirm_unpause_msg: Er du sikker på at du vil fortsette dette abonnementet?
unpause_failure_msg: 'Beklager, fortsettelse mislyktes!'
confirm_cancel_open_orders_msg: "Noen bestillinger for dette abonnementet er for øyeblikket åpne. Kunden har allerede blitt varslet om at bestillingen vil bli lagt inn. Vil du avbryte disse bestillingene eller beholde dem?"
resume_canceled_orders_msg: "Noen bestillinger for dette abonnementet kan gjenopptas akkurat nå. Du kan gjenoppta dem fra nedtrekksmenyen for bestillinger."
yes_cancel_them: Avbryt dem
no_keep_them: Behold dem
yes_i_am_sure: Ja jeg er sikker
@@ -1353,8 +1356,8 @@ nb:
orders_could_not_cancel: "Beklager, bestillingen kunne ikke avbrytes"
orders_cannot_remove_the_final_item: "Kan ikke fjerne den siste varen fra en bestilling, vennligst avbryt bestillingen i stedet."
orders_bought_items_notice:
one: Et ekstra element er allerede bekreftet for denne bestillingsperioden
other: Ytterligere%{count} varer er allerede bekreftet for denne bestillingsrunden
one: "Et ekstra element er allerede bekreftet for denne bestillingsperioden"
other: "Ytterligere%{count} varer er allerede bekreftet for denne bestillingsrunden"
orders_bought_edit_button: Rediger bekreftede varer
orders_bought_already_confirmed: "* allerede bekreftet"
orders_confirm_cancel: Er du sikker på at du vil avbryte denne bestillingen?
@@ -2017,6 +2020,7 @@ nb:
resolve_errors: Vennligst løse følgende feil
more_items: "+ %{count} Flere"
admin:
enterprise_limit_reached: "Du har nådd standardgrensen for bedrifter per konto. Skriv til %{contact_email} hvis du trenger å øke den."
modals:
got_it: Jeg forstår
tag_rule_help:
@@ -2171,7 +2175,7 @@ nb:
could_not_delete_customer: 'Kunne ikke slette kunde'
product_import:
confirmation: |
Dette vil sette varebeholdning til null på alle produkter for denne virksomheten som ikke er til stede i den nedlastede filen.
Dette vil sette varebeholdning til null på alle produkter for denne virksomheten som ikke er til stede i den nedlastede filen.
order_cycles:
update_success: 'Din bestillingsrunde har blitt oppdatert.'
no_distributors: Det er ingen distributører i denne bestillingsrunden. Denne bestillingsrunden vil ikke være synlig for kundene før du legger til en. Vil du fortsette å lagre denne bestillingsrunden? '
@@ -2181,6 +2185,10 @@ nb:
customers:
select_shop: 'Vennligst velg en butikk først'
could_not_create: Beklager! Kunne ikke opprette
subscriptions:
closes: stenger
closed: stengt
close_date_not_set: Stengedato ikke angitt
producers:
signup:
start_free_profile: "Start med en gratis profil, og utvid når du er klar!"
@@ -2331,13 +2339,13 @@ nb:
user_mailer:
reset_password_instructions:
request_sent_text: |
En forespørsel om å nullstille ditt passord er utført.
Hvis det ikke var du som forespurte dette kan du se bort i fra denne eposten.
En forespørsel om å nullstille ditt passord er utført.
Hvis det ikke var du som forespurte dette kan du se bort i fra denne eposten.
link_text: >
Hvis det var du som forespurte dette kan du klikke nedenfor:
issue_text: |
Hvis URL'en ovenfor ikke fungerer prøv å kopier og lim den inn i din nettleser.
Hvis du fortsatt har problemer vennligst ta kontakt.
Hvis URL'en ovenfor ikke fungerer prøv å kopier og lim den inn i din nettleser.
Hvis du fortsatt har problemer vennligst ta kontakt.
confirmation_instructions:
subject: Vennligst bekreft OFN-kontoen din
weight: Vekt (per kg)

View File

@@ -7,7 +7,7 @@ pt:
shipment_state: Estado do envio
completed_at: Completado em
number: Número
email: Email do cliente
email: Email do/a consumidor/a
errors:
models:
spree/user:
@@ -43,20 +43,16 @@ pt:
send_instructions: "Receberá um email com instruções sobre como confirmar a sua conta em alguns minutos."
failed_to_send: "Ocorreu um erro no envio do email de confirmação"
resend_confirmation_email: "Reenviar email de confirmação."
confirmed: "Obrigada por confirmar o seu email! Agora já pode fazer login."
not_confirmed: "O seu email não pôde ser confirmado. Talvez já tenha completado este passo?"
user_registrations:
spree_user:
signed_up_but_unconfirmed: "Foi enviada para o seu endereço de email uma mensagem com um link de confirmação. Por favor clique nesse link para activar a sua conta."
signed_up_but_unconfirmed: "Foi enviada uma mensagem para o seu endereço de email com um link de confirmação. Por favor clique nesse link para activar a sua conta."
failure:
invalid: |
Email ou senha incorrecto.
Entrou como visitante da última vez? Talvez precise de criar uma conta ou de redefinir a sua senha.
Email ou senha incorrecto.
Entrou como visitante da última vez? Talvez precise de criar uma conta ou de redefinir a sua senha.
unconfirmed: "Tem de confirmar a sua conta antes de continuar."
enterprise_confirmations:
enterprise:
confirmed: Obrigada! O seu endereço de email está confirmado.
not_confirmed: Não foi possível confirmar o seu endereço de email. Talvez já tenha completado este passo?
confirmation_sent: "Email de confirmação enviado!"
confirmation_not_sent: "Não foi possível enviar o email de confirmação."
enterprise_mailer:
confirmation_instructions:
subject: "Por favor confirme o endereço de email da %{enterprise}"
@@ -103,7 +99,7 @@ pt:
home: "OFN"
title: Open Food Network
welcome_to: 'Bem vindo a'
site_meta_description: "Partimos da terra. Com agricultores e produtores prontos a contarem as suas histórias verdadeiras com um brilho nos olhos. Com distribuidores prontos a estabelecerem ligações entre pessoas e produtos de forma justa e honesta. Com consumidores que acreditam que podem tomar melhores decisões no momento da compra..."
site_meta_description: "Começamos a partir da terra. Com agricultores e produtores prontos a contarem as suas histórias com um brilho nos olhos. Com distribuidores prontos a estabelecerem ligações entre pessoas e produtos de forma justa e honesta. Com consumidores que acreditam que melhores decisões no momento da compra..."
search_by_name: Procurar por nome ou localidade
producers_join: Produtores e produtoras nacionais, estão convidados a juntarem-se à Open Food Network!
charges_sales_tax: Cobra GST?
@@ -256,13 +252,13 @@ pt:
update_user_invoice_explained: "Use este botão para actualizar imediatamente as facturas do mês, até ao dia de hoje, para cada organização no sistema. Esta tarefa pode ser configurada para ser realizada automaticamente todas as noites."
finalise_user_invoices: "Lançar Facturas de Utilizador"
finalise_user_invoice_explained: "Use este botão para lançar no sistema todas as facturas relativas ao mês anterior. Esta tarefa pode ser configurada para ser realizada automaticamente uma vez por mês."
update_user_invoices: "Atualizar Facturas de Utilizador"
update_user_invoices: "Actualizar Facturas de Utilizador"
errors:
accounts_distributor: deve estar definido, se desejar criar facturas para organizações
default_payment_method: deve estar definido se desejar criar facturas para organizações
default_shipping_method: deve estar definido se desejar criar facturas para organizações registadas
shopfront_settings:
embedded_shopfront_settings: "Incorporar definições de loja"
embedded_shopfront_settings: "Definições de loja incorporadas"
enable_embedded_shopfronts: "Permitir lojas incorporadas"
embedded_shopfronts_whitelist: "Whitelist de domínios externos"
number_localization:
@@ -292,16 +288,16 @@ pt:
example_monthly_turnover_tip: "Exemplo de volume de negócios mensal de uma organização que será usado para calcular a conta mensal dada como exemplo abaixo."
cap_reached?: "Atingido o limite?"
cap_reached?_tip: "Se o \"tecto\" (limite definido à esquerda) foi atingido, dadas as definições e o volume de negócios indicado."
included_tax: "Taxa inclusa"
included_tax_tip: "A taxa total incluída no exemplo de conta mensal , dadas as definições e o volume de negócios indicado."
total_monthly_bill_incl_tax: "Total de conta mensal (taxa inclusa)"
included_tax: "Taxa incluída"
included_tax_tip: "A taxa total incluída no exemplo de conta mensal, dadas as definições e o volume de negócios indicado."
total_monthly_bill_incl_tax: "Total de conta mensal (taxa incluída)"
total_monthly_bill_incl_tax_tip: "O exemplo de conta mensal total incluindo taxas, dadas as definições e o volume de negócios indicado."
customers:
index:
add_customer: "Adicionar Cliente"
new_customer: "Novo Cliente"
customer_placeholder: "cliente@exemplo.org"
valid_email_error: Favor usar um endereço de email válido
valid_email_error: Por favor usar um endereço de email válido
add_a_new_customer_for: Adicionar novo cliente para %{shop_name}
code: Código
duplicate_code: "Este código já está a ser usado."
@@ -361,7 +357,7 @@ pt:
property_name: Nome da propriedade
inherited_property: Propriedade herdada
variants:
to_order_tip: "Os itens feitos por encomenda não têm um nível de estoque definido, como pão fresco, por exemplo."
to_order_tip: "Os itens feitos por encomenda não têm um nível de stock definido, como pão fresco, por exemplo."
product_distributions: "Distribuições de Produto"
group_buy_options: "Opções de Compra Colectiva"
seo: "SEO"
@@ -385,9 +381,9 @@ pt:
no_matching_hidden_products: Nenhum produto oculto corresponde à sua pesquisa
no_new_products: Nenhum novo produto está disponível para ser adicionado a este inventário
no_matching_new_products: Nenhum novo produto corresponde à sua busca
inventory_powertip: Este é seu inventário de produtos. Para adicionar produtos ao seu inventário, selecione 'Novos Produtos' no menu Exibição
hidden_powertip: Estes produtos foram escondidos no seu inventário e não estarão disponíveis para serem adicionados à sua loja. Você pode clicar em 'Adicionar' para adicionar um produto a seu inventário.
new_powertip: 'Estes produtos estão disponíveis para serem adicionados ao seu inventário. Clique em ''Adicionar'' para adicionar um produto em seu inventário, ou ''Ocultar'' para escondê-lo. Você pode voltar atrás quando quiser! '
inventory_powertip: Este é o seu inventário de produtos. Para adicionar produtos ao seu inventário, selecione 'Novos Produtos' no menu Visualizar
hidden_powertip: Estes produtos foram escondidos no seu inventário e não estarão disponíveis para serem adicionados à sua loja. Pode clicar em 'Adicionar' para adicionar um produto ao seu inventário.
new_powertip: 'Estes produtos estão disponíveis para serem adicionados ao seu inventário. Clique em ''Adicionar'' para adicionar um produto em seu inventário, ou ''Ocultar'' para escondê-lo. Pode voltar atrás quando quiser! '
controls:
back_to_my_inventory: Voltar ao inventário
orders:
@@ -406,15 +402,15 @@ pt:
weight_volume: "Peso/Volume"
ask: "Perguntar?"
page_title: "Gestão de Pedidos a Granel"
actions_delete: "Deletar Selecionado"
loading: "Carregando pedidos"
no_results: "Nenhum pedido encontrado. "
actions_delete: "Apagar Selecionado"
loading: "Carregando encomendas"
no_results: "Nenhuma encomenda encontrada. "
group_buy_unit_size: "Tamanho de Unidade para Compras de Grupo"
total_qtt_ordered: "Quantidade Total do Pedido"
max_qtt_ordered: "Quantidade Máxima do Pedido"
current_fulfilled_units: "Unidades Completadas no Momento"
max_fulfilled_units: "Máximo de Unidades Completadas "
order_error: "Alguns erros devem ser corrigidos antes de atualizar os pedidos.\nOs campos com bordas vermelhas contém erros."
current_fulfilled_units: "Unidades Completas no Momento"
max_fulfilled_units: "Máximo de Unidades Completas "
order_error: "Alguns erros devem ser corrigidos antes de actualizar os pedidos.\nOs campos com bordas vermelhas contêm erros."
variants_without_unit_value: "AVISO: Algumas variantes não possuem unidade de valor"
enterprise:
select_outgoing_oc_products_from: 'Selecione a saída do ciclo de pedidos '
@@ -422,16 +418,16 @@ pt:
index:
title: Organizações
new_enterprise: Nova Organização
producer?: "Produtor?"
producer?: "Produtor/a?"
package: Embalagem
status: Status
manage: Administrar
status: Estado
manage: Gerir
form:
about_us:
desc_short: Descrição curta
desc_short_placeholder: Conte-nos sobre a sua organização em uma ou duas frases
desc_long: Sobre nós
desc_long_placeholder: Conte aos consumidores sobre você. Esta informação aparece no seu perfil público.
desc_long_placeholder: Conte um pouco de si aos consumidores. Esta informação aparece no seu perfil público.
business_details:
abn: ABN
abn_placeholder: 'ex: 99 123 456 789'
@@ -462,92 +458,91 @@ pt:
promo_image_note2: Qualquer imagem promocional carregada aqui será cortada para 1200 x 260.
promo_image_note3: A imagem promocional é exibida no topo da página de perfil da organização e em janelas pop-up.
inventory_settings:
text1: Você pode optar por gerenciar o seu nível de estoque e preços através de seu
inventory: inventório
text1: Pode optar por gerir o seu nível de stock e preços através do seu
inventory: inventário
text2: >
Se você está usando a ferramenta de inventário, você pode selecionar
se novos produtos adicionados pelos seus fornecedores precisam ser adicionados
ao seu inventário antes de serem estocados. Se você não está usando
o inventário para gerenciar os seus produtos, você deve selecionar a
opção 'recomendado' abaixo.
preferred_product_selection_from_inventory_only_yes: Novos produtos podem ser colocados na minha vitrine (recomendado)
preferred_product_selection_from_inventory_only_no: Novos produtos devem ser adicionados no meu inventário antes de serem colocados na minha vitrine
Se está a usar a ferramenta de inventário, pode selecionar se novos
produtos adicionados pelos seus fornecedores precisam de ser adicionados
ao seu inventário antes de entrarem em stock. Se não está a usar o inventário
para gerir os seus produtos, deve selecionar a opção 'recomendado' abaixo.
preferred_product_selection_from_inventory_only_yes: Novos produtos podem ser colocados na minha montra (recomendado)
preferred_product_selection_from_inventory_only_no: Novos produtos devem ser adicionados ao meu inventário antes de serem colocados na minha montra
payment_methods:
name: Nome
applies: Aplica?
manage: Gerenciar métodos de pagamento
not_method_yet: Você ainda não tem nenhum método de pagamento.
manage: Gerir métodos de pagamento
not_method_yet: Ainda não tem nenhum método de pagamento.
create_button: Criar novo método de pagamento
create_one_button: 'Criar um agora '
primary_details:
name: 'Nome '
name_placeholder: 'ex: Trufas Biodinâmicas do Pereira'
groups: Grupos
groups_tip: Seleccione grupos e regiões das quais é membro. Isso ajudará os consumidores a encontrar a sua organização.
groups_tip: Seleccione grupos e regiões das quais é membro. Isso ajudará os consumidores a encontrarem a sua organização.
groups_placeholder: Comece a digitar para pesquisar grupos disponíveis...
primary_producer: Produtor primário?
primary_producer_tip: Selecione 'produtor' se você é primeiramente um produtor de alimentos
primary_producer_tip: Selecione 'produtor' se é acima de tudo um/a produtor/a de alimentos
producer: Produtor
any: Qualquer
none: Nenhum
own: Próprio
sells: Vende
sells_tip: "Nenhum - a organização não vende directamente aos consumidores. <br /> Próprio - a organização vende os seus próprios produtos aos consumidores. <br /> Qualquer - a organização vende os seus próprios produtos ou produtos de outras organizações. <br />"
visible_in_search: Visível na busca?
visible_in_search: Visível na pesquisa?
visible_in_search_tip: Determina se esta organização vai estar visível para os consumidores quando estes pesquisarem no website.
visible: Visível
not_visible: Invisível
permalink: Permalink (sem espaços)
permalink_tip: "Esse link é usado para criar a URL para a sua loja: %{link}nome-loja/loja"
permalink_tip: "Este link é usado para criar o URL para a sua loja: %{link}nome-loja/loja"
link_to_front: Link para a loja
link_to_front_tip: Um link direto para a sua loja no Open Food Network.
shipping_methods:
name: Nome
applies: Aplica?
manage: Gerenciar formas de envio
manage: Gerir formas de envio
create_button: Criar nova forma de envio
create_one_button: Criar um agora
no_method_yet: Você ainda não tem nenhuma forma de envio.
no_method_yet: Ainda não tem nenhuma forma de envio.
shop_preferences:
shopfront_requires_login: "Mercado visível publicamente?"
shopfront_requires_login_tip: "Escolha se os clientes precisarão fazer o login para ver os produtos do mercado, ou se eles estarão visíveis para todos."
shopfront_requires_login_false: "Publico"
shopfront_requires_login_true: "Disponível somente para clientes registrados"
recommend_require_login: "Recomendamos pedir login dos usuários quando permitido que pedidos possam ser alterados."
allow_guest_orders: "Pedidos dos convidados"
allow_guest_orders_tip: "Permitir o checkout como convidado, ou requisitar um usuário registrado. "
allow_guest_orders_false: "Requisitar o registro para fazer pedidos"
shopfront_requires_login_tip: "Escolha se os consumidores vão precisar de fazer login para ver a montra da loja, ou se esta estará visível para toda a gente."
shopfront_requires_login_false: "Público"
shopfront_requires_login_true: "Disponível somente para clientes registados"
recommend_require_login: "Recomendamos que peça login dos utilizadores quando é permitido que as encomendas sejam alteradas. "
allow_guest_orders: "Encomendas de convidados"
allow_guest_orders_tip: "Permitir o checkout como convidado, ou requisitar um utilizador registado. "
allow_guest_orders_false: "Requisitar o registo para fazer encomendas"
allow_guest_orders_true: "Permitir checkout de convidados"
allow_order_changes: "Mudar pedidos"
allow_order_changes_tip: "Permitir que os consumidores mudem seus pedidos enquanto a compra estiver aberta."
allow_order_changes_false: "Pedidos enviados não podem ser mudados ou cancelados."
allow_order_changes_true: "Consumidor pode mudar ou cancelar pedidos enquanto a compra estiver aberta."
allow_order_changes: "Alterar encomendas"
allow_order_changes_tip: "Permitir que os consumidores alterem os seus pedidos enquanto o ciclo de encomendas estiver aberto."
allow_order_changes_false: "Encomendas submetidas não podem ser alteradas / canceladas."
allow_order_changes_true: "Os consumidores pode alterar / cancelar encomendas enquanto o ciclo de encomendas estiver aberto."
enable_subscriptions: "Subscrições"
enable_subscriptions_tip: "Activar funcionalidade das subscrições?"
enable_subscriptions_false: "Desactivado"
enable_subscriptions_true: "Activado"
shopfront_message: Mensagem da vitrine da loja
enable_subscriptions_true: "Activo"
shopfront_message: Mensagem da montra da loja
shopfront_message_placeholder: >
Uma breve e opcional explicação para os consumidores detalhando como
funciona a sua loja, a ser exibida acima da lista de produtos na sua
vitrine.
Uma explicação breve e opcional para os consumidores a explicar como
funciona a loja, a ser exibida acima da lista de produtos na sua montra.
shopfront_closed_message: Mensagem de loja fechada
shopfront_closed_message_placeholder: >
Uma mensagem que forneça uma explicação detalhada sobre o porque de
a loja estar fechada e quando os consumidores podem esperar que abra
novamente, a ser exibida quando não houver nenhum ciclo de pedidos ativo.
Uma mensagem que forneça uma explicação detalhada sobre o motivo da
loja estar fechada e quando é que os consumidores podem esperar que
abra novamente, a ser exibida quando não houver nenhum ciclo de encomendas
activo.
shopfront_category_ordering: Categoria de pedidos da loja
open_date: Dia de abertura
close_date: Dia de fechamento
close_date: Dia de fecho
social:
twitter_placeholder: 'ex: @o_prof'
stripe_connect:
connect_with_stripe: "Conectar usando o Stripe"
connect_with_stripe: "Conectar com o Stripe"
stripe_connect_intro: "Para aceitar pagamentos com cartão de crédito, vai ser necessário ligar a sua conta Stripe à Open Food Network. Use o botão à direita para começar."
stripe_account_connected: "Conta Stripe conectada"
disconnect: "Desligar conta"
confirm_modal:
title: Conectar usando o Stripe
title: Conectar com o Stripe
part1: O Stripe é um serviço de processamento de pagamentos que permite às lojas OFN aceitarem pagamentos dos seus clientes com cartão de crédito.
part2: Para usar esta funcionalidade, tem de ligar a sua conta Stripe à OFN. Ao clicar em 'Concordo' abaixo vai ser redirecionado para o website Stripe onde pode estabelecer ligação com uma conta existente, ou criar uma conta nova caso ainda não tenha uma.
part3: Isto vai permitir à Open Food Network aceitar pagamentos dos seus clientes com cartão de crédito em seu nome. Tenha em conta que do seu lado vai ser necessário manter a sua própria conta Stripe, pagar as taxas à Stripe e lidar com quaisquer rejeições ou serviços ao cliente.
@@ -564,7 +559,7 @@ pt:
add_new_rule: '+ Adicionar nova regra'
add_new_tag: '+ Adicionar nova etiqueta'
users:
email_confirmation_notice_html: "Confirmação de e-mail está pendente. Enviamos um e-mail de confirmação para %{email}."
email_confirmation_notice_html: "A confirmação de e-mail está pendente. Enviamos um e-mail de confirmação para %{email}."
resend: Reenviar
owner: 'Proprietário'
contact: "Contacto"
@@ -596,22 +591,22 @@ pt:
producer: Produtor
change_type_form:
producer_profile: Perfil do produtor
connect_ofn: Conecte-se através do Open Food Network
connect_ofn: Conectar através da Open Food Network
always_free: SEMPRE GRATUITO
producer_description_text: Adicione os seus produtos ao Open Food Network, permitindo que os hubs os comercialize em suas lojas.
producer_shop: Loja do produtor
sell_your_produce: 'Venda seus próprios produtos '
producer_description_text: Adicione os seus produtos à Open Food Network, permitindo que os hubs os comercializem nas suas lojas.
producer_shop: Loja de produtor
sell_your_produce: 'Venda os seus próprios produtos '
producer_shop_description_text: Venda os seus produtos directamente aos seus clientes através da sua própria montra Open Food Network.
producer_shop_description_text2: Uma Loja de Produtor/a é somente para os seus produtos, se quiser vender produtos de outro local, selecione Hub de Produtores.
producer_hub: Hub de produtor
producer_hub_text: Venda seus próprios produtos e de outros produtores
producer_hub_description_text: A sua organização é a espinha dorsal do seu sistema de produção e consumo local. Através dela, pode comercializar os seus próprios produtos, assim como produtos agregados de outras iniciativas e produtores, através da sua loja na Open Food Network.
producer_hub: Hub de Produtores
producer_hub_text: Venda os seus próprios produtos e também os de outros produtores
producer_hub_description_text: A sua organização é a espinha dorsal de um sistema de produção e consumo local. Através dela, pode comercializar os seus próprios produtos, assim como produtos agregados de outras iniciativas e produtores, através da sua loja na Open Food Network.
profile: Somente perfil
get_listing: Obter uma listagem
profile_description_text: As pessoas podem encontrá-lo e contactá-lo na Open Food Network. A sua organização ficará visível no mapa e poderá ser encontrada através do motor de pesquisa.
hub_shop: Loja do hub
hub_shop_text: Comercialize produtos de outros
hub_shop_description_text: A sua organização é a espinha dorsal do seu sistema de produção e consumo local. Através dela, pode agregar produtos de outras organizações e produtores, e comercializá-los na sua loja na Open Food Network.
hub_shop_description_text: A sua organização é a espinha dorsal de um sistema de produção e consumo local. Através dela, pode agregar produtos de outras organizações e produtores, e comercializá-los na sua loja na Open Food Network.
choose_option: Por favor escolha uma das opções acima.
change_now: Mudar agora
enterprise_user_index:
@@ -838,6 +833,7 @@ pt:
confirm_unpause_msg: Tem a certeza que pretende parar a pausa desta subscrição?
unpause_failure_msg: 'Desculpe, não foi possível parar a pausa!'
confirm_cancel_open_orders_msg: "Algumas encomendas para esta subscrição estão actualmente abertas. O/a consumidor/a foi notificado que a encomenda será processada. Quer cancelar esta(s) encomenda(s) ou mantê-las?"
resume_canceled_orders_msg: "Algumas encomendas desta subscrição podem ser retomadas neste momento. Para retomá-las, selecione no menú dropdown de encomendas."
yes_cancel_them: Cancelá-las
no_keep_them: Mantê-las
yes_i_am_sure: Sim, tenho a certeza
@@ -1033,7 +1029,7 @@ pt:
home_shop: Compre Agora
brandstory_headline: "Alimentos, com liberdade"
brandstory_intro: "Às vezes, a melhor maneira de consertar o sistema é construir um novo..."
brandstory_part1: "A gente começa por quem produz os alimentos, contando suas histórias e de seus cultivos, passando por quem distribui de modo justo e sem desperdício, até chegar em quem acredita que suas decisões de consumo podem..."
brandstory_part1: "Começamos a partir da terra. Com agricultores e produtores prontos a contarem as suas histórias com um brilho nos olhos. Com distribuidores prontos a estabelecerem ligações entre pessoas e produtos de forma justa e honesta. Com consumidores que acreditam que melhores decisões no momento da compra podem mudar o mundo. "
brandstory_part2: "Precisamos de uma ferramenta para empoderar a todos que produzem, vendem e compram comida. Uma maneira de contar histórias, e controlar toda a logística. "
brandstory_part3: "Por isso construímos um mercado online, transparente, capaz de criar conexões verdadeiras. O código é aberto, e pode ser modificado para melhor se adaptar as particularidades de cada canto do planeta. "
brandstory_part4: "Queremos de volta o controle sobre os alimentos que consumimos."
@@ -1170,7 +1166,7 @@ pt:
email_signup_welcome: "Bem vindo a %{sitename}!"
email_signup_confirmed_email: "Obrigada por confirmar o seu email."
email_signup_shop_html: "Já pode fazer log in em %{link}."
email_signup_text: "Obrigada por se juntar à rede. Se é consumidor/a, vai ficar a conhecer vários produtores fantásticos, pontos de venda incríveis e comidas deliciosas! Se é produtor/a ou uma organização de consumo local, estamos felizes por tê-lo na nossa rede"
email_signup_text: "Obrigada por juntar-se à rede. Se é consumidor/a, vai ficar a conhecer vários produtores fantásticos, pontos de venda incríveis e comidas deliciosas! Se é produtor/a ou uma organização de consumo local, estamos felizes por tê-lo na nossa rede"
email_signup_help_html: "Dúvidas e comentários são sempre benvindos; você pode usar o botão <em>Enviar Comentário</em> no site, ou enviar um e-mail para %{email}"
producer_mail_greeting: "Querido"
producer_mail_text_before: "Agora temos todos os pedidos do cliente para a próxima entrega."
@@ -1327,32 +1323,32 @@ pt:
shops_text: 'A colheita é feita em ciclos, a comida é produzida em ciclos, e nós fazemos nossos pedidos em ciclos. Se você encontrar um ciclo de pedidos fechado, volte em breve para tentar novamente. '
shops_signup_title: Registre-se como uma central
shops_signup_headline: 'Um mercado de alimentos sem tamanho. '
shops_signup_motivation: 'Seja qual for seu perfil, nos oferecemos suporte. Somos sem fins lucrativos, independentes, e open source. '
shops_signup_action: Cadastre-se agora
shops_signup_motivation: Seja qual for o seu modelo, nós ajudamos. Se houver mudanças, estamos consigo. Somos sem fins lucrativos, independentes, e open source. Somos os parceiros de software com os quais sonhou.
shops_signup_action: Junte-se agora
shops_signup_pricing: Contas da Organização
shops_signup_stories: Histórias de nossas centrais.
shops_signup_stories: Histórias dos nossos membros.
shops_signup_help: Estamos prontos para ajudar
shops_signup_help_text: Você precisa de mais retorno, novos compradores e parceiros de logística. Você precisa contar a sua história.
shops_signup_help_text: Você está a precisar de melhor retorno, de novos clientes e parceiros de logística. Está a precisar que a sua história seja contada em grupos de consumo, em retalho e à mesa de jantar.
shops_signup_detail: Aqui está o detalhe.
orders: Encomendas
orders_fees: Taxas...
orders_edit_title: Carrinho de compras
orders_edit_headline: seu carrinho de compras
orders_edit_headline: O seu carrinho de compras
orders_edit_time: Pedido pronto para
orders_edit_continue: Continuar comprando
orders_edit_continue: Continuar a comprar
orders_edit_checkout: Fechar pedido
orders_form_empty_cart: "Carrinho vazio"
orders_form_subtotal: Subtotal dos produtos
orders_form_admin: Administração & Logística
orders_form_total: Total
orders_oc_expired_headline: Este ciclo de pedidos está fechado para pedidos
orders_oc_expired_text: "Desculpe, este ciclo de pedidos fechou há %{time} atrás. Favor entrar em contato diretamente com sua central para saber se podem aceitar pedidos atrasados."
orders_oc_expired_text_others_html: "Desculpe, este ciclo de pedidos fechou há %{time} atrás. Favor entrar em contato diretamente com sua central para saber se podem aceitar pedidos atrasados <strong>%{link}</strong>."
orders_oc_expired_text_link: "ou veja os outros ciclos de pedidos disponíveis nessa central"
orders_oc_expired_headline: Este ciclo de encomendas está fechado para pedidos
orders_oc_expired_text: "Desculpe, este ciclo de encomendas fechou há %{time} atrás. Por favor entre em contacto directamente com a sua central para saber se podem aceitar pedidos tardios."
orders_oc_expired_text_others_html: "Desculpe, este ciclo de encomendas fechou há %{time} atrás. Por favor entre em contacto directamente com a sua central para saber se podem aceitar pedidos tardios <strong>%{link}</strong>."
orders_oc_expired_text_link: "ou veja os outros ciclos de encomendas que estão disponíveis nesta central"
orders_oc_expired_email: "Email:"
orders_oc_expired_phone: "Telefone:"
orders_show_title: Confimação de Pedido
orders_show_time: Pedido pronto em
orders_show_title: Confimação de Encomenda
orders_show_time: Encomenda pronta em
orders_show_order_number: "Encomenda #%{number}"
orders_show_cancelled: Cancelada
orders_show_confirmed: Confirmada
@@ -1360,30 +1356,30 @@ pt:
orders_could_not_cancel: "Pedimos desculpa, a sua encomenda não pode ser cancelada"
orders_cannot_remove_the_final_item: "Não é possível remover o item final de uma encomenda, em vez disso, por favor cancele a encomenda."
orders_bought_items_notice:
one: Um item adicional já está confirmado para este ciclo de encomendas
other: '%{count}itens adicionais já confirmados para este ciclo de encomendas '
one: "Um item adicional já está confirmado para este ciclo de encomendas"
other: "%{count}itens adicionais já confirmados para este ciclo de encomendas "
orders_bought_edit_button: Editar itens confirmados
orders_bought_already_confirmed: "* já confirmado"
orders_confirm_cancel: Tem a certeza que quer cancelar esta encomenda?
products_cart_distributor_choice: "Distribuidor para seu pedido:"
products_cart_distributor_change: "O distribuidor para este pedido será trocado para %{name} se você adicionar este produto no carrinho."
products_cart_distributor_change: "O distribuidor para esta encomenda será alterado para %{name} se adicionar este produto ao carrinho."
products_cart_distributor_is: "O distribuidor para este pedido é %{name}."
products_distributor_error: "Favor completar seu pedido no %{link} antes de comprar com outro distribuidor."
products_oc: "Ciclo de pedido para seu pedido:"
products_oc_change: "O ciclo de pedido para esse pedido será trocada para %{name} se você adicionar este produto ao carrinho."
products_oc_is: "O ciclo de pedido para este pedido é %{name}."
products_oc_error: "Favor completar seu pedido no %{link} antes de comprar em outro ciclo de pedido."
products_oc_current: "seu ciclo de pedido atual"
products_oc_current: "o seu actual ciclo de encomendas"
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.
products_distributor_info: Quando seleccionar um distribuidor para a sua encomenda, o endereço e data de levantamento serão exibidos aqui.
products_distribution_adjustment_label: "Distribuição de produto por %{distributor} para %{product}."
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
remember_me: Lembre-me
are_you_sure: "Tem certeza?"
orders_open: Pedidos abertos
orders_open: Encomendas abertas
closing: "Fechando"
going_back_to_home_page: "Voltando à pagina inicial"
creating: Criando
@@ -1392,14 +1388,14 @@ pt:
failed_to_create_enterprise_unknown: "Falha ao criar a sua organização. \nPor favor verifique se todos os campos foram preenchidos correctamente."
failed_to_update_enterprise_unknown: "Falha ao actualizar a sua organização. \nPor favor verifique se todos os campos foram preenchidos correctamente."
enterprise_confirm_delete_message: "Isto também vai apagar o %{product} que esta organização fornece. Tem a certeza que deseja continuar?"
order_not_saved_yet: "Seu pedido ainda não foi salvo. Aguarde um momento. "
order_not_saved_yet: "A sua encomenda ainda não foi guardada. Só mais uns minutinhos para teminar! "
filter_by: "Filtrar por"
hide_filters: "Esconder filtros"
one_filter_applied: "1 filtro aplicado"
x_filters_applied: "filtros aplicados"
submitting_order: "Processando seu pedido: favor aguardar"
submitting_order: "A processar o seu pedido: favor aguarde"
confirm_hub_change: "Tem certeza? Isso irá mudar a central selecionada e remover todos os ítens do carrinho de compras."
confirm_oc_change: "Tem certeza? Isso irá mudar o ciclo de pedidos selecionado e remover todos os ítens do carrinho de compras."
confirm_oc_change: "Tem a certeza? Isto mudará o ciclo de encomendas seleccionado e removerá todos os itens do carrinho de compras."
location_placeholder: "Digite uma localidade..."
error_required: "Não pode ser vazio"
error_number: "Precisa ser um número"
@@ -1622,7 +1618,7 @@ pt:
Ready: "Pronto"
ok: OK
not_visible: não visível
you_have_no_orders_yet: "Você ainda não tem pedidos"
you_have_no_orders_yet: "Ainda não tem encomendas"
running_balance: "Balanço corrente"
outstanding_balance: "Saldo devedor"
admin_entreprise_relationships: "Relações da Organização"
@@ -1650,7 +1646,7 @@ pt:
admin_entreprise_groups_web: "Recursos Web"
admin_entreprise_groups_web_twitter: "ex. @nome_perfil"
admin_entreprise_groups_web_website_placeholder: "ex. www.cogumelos.com.br"
admin_order_cycles: "Ciclo de Pedidos do Administrador"
admin_order_cycles: "Ciclos de Encomendas do Administrador"
open: "Aberto"
close: "Fechado"
create: "Criar"
@@ -1670,11 +1666,11 @@ pt:
calculator: "Calculadora"
calculator_values: "Valores da calculadora"
flat_percent_per_item: "Percentual (por unidade)"
new_order_cycles: "Novo Ciclo de Pedidos"
new_order_cycle: "Novo ciclo de pedido"
select_a_coordinator_for_your_order_cycle: "Escolher um coordenador para novo ciclo de pedidos"
new_order_cycles: "Novos Ciclo de Encomendas"
new_order_cycle: "Novo ciclo de encomendas"
select_a_coordinator_for_your_order_cycle: "Escolher um coordenador para o seu ciclo de encomendas"
notify_producers: 'Notificar produtores'
edit_order_cycle: "Editar Ciclo de Pedidos"
edit_order_cycle: "Editar Ciclo de Encomendas"
roles: "Papeis"
update: "Atualizar"
delete: Apagar
@@ -1694,7 +1690,7 @@ pt:
price: "Preço"
on_hand: "Disponível"
save_changes: "Salvar Modificações"
order_saved: "Pedido salvo"
order_saved: "Pedido guardado"
no_products: Sem Produtos
spree_admin_overview_enterprises_header: "As minhas Organizações"
spree_admin_overview_enterprises_footer: "GERIR AS MINHAS ORGANIZAÇÕES"
@@ -1743,8 +1739,8 @@ pt:
resend: "Re-enviar"
trial: Experiência
add_and_manage_products: "Adicionar e gerenciar produtos"
add_and_manage_order_cycles: "Adicionar e enviar ciclos de pedidos"
manage_order_cycles: "Gerenciar ciclos de pedidos"
add_and_manage_order_cycles: "Adicionar e gerir ciclos de encomendas"
manage_order_cycles: "Gerir ciclos de encomendas"
manage_products: "Gerenciar produtos"
edit_profile_details: "Editar detalhes de perfil "
edit_profile_details_etc: "Modificar a descrição dos seu perfil, imagem, etc."
@@ -2023,18 +2019,17 @@ pt:
choose: Escolha
resolve_errors: Por favor resolva os seguintes erros
more_items: "+ %{count} Mais"
closes: fecha
closed: fechado
admin:
enterprise_limit_reached: "Atingiu o número limite de organizações por conta. Escreva para %{contact_email} se precisar de aumentá-lo."
modals:
got_it: Percebi
tag_rule_help:
title: Regras de Etiquetas
overview: Visão geral
overview_text: >
As regras de tag fornecem uma maneira para descrever quais itens são
visíveis ou não e para quais clientes, como formas de pagamento, formas
de entrega, produtos e ciclos de pedidos.
As regras de tag permitem descrever quais os itens que são visíveis
ou não e para que clientes. Os itens podem ser métodos de envio, formas
de pagamento, produtos e ciclos de encomendas.
by_default_rules: "Regras 'Por Defeito...'"
by_default_rules_text: >
As regras por defeito permitem esconder itens de forma a que estes não
@@ -2182,7 +2177,7 @@ pt:
could_not_delete_customer: 'Não foi possível eliminar o cliente'
product_import:
confirmation: |
Isto colocará a zero o stock de todos os produtos desta organização que não estejam presentes no ficheiro carregado.
Isto colocará a zero o stock de todos os produtos desta organização que não estejam presentes no ficheiro carregado.
order_cycles:
update_success: 'O seu ciclo de encomendas foi actualizado.'
no_distributors: Não existem distribuidores neste ciclo. Este ciclo de encomendas só ficará visível para os clientes quando um distribuidor for adicionado. Gostaria de continuar a guardar este ciclo de encomendas?
@@ -2192,6 +2187,10 @@ pt:
customers:
select_shop: 'Por favor selecione primeiro uma loja'
could_not_create: Perdão! Não conseguimos criar
subscriptions:
closes: fecha
closed: fechado
close_date_not_set: Data de fecho não definida
producers:
signup:
start_free_profile: "Começa com um perfil gratuito e expande quando estiveres pronto/a!"
@@ -2305,14 +2304,23 @@ pt:
address: endereço
adjustments: ajustes
awaiting_return: aguardando retorno
canceled: cancelado
cart: carrinho
complete: completo
confirm: confirmado
delivery: entrega
paused: em pausa
payment: pagamento
pending: pendente
resumed: retomado
returned: retornado
skrill: skrill
subscription_state:
active: activo
pending: pendente
ended: terminou
paused: em pausa
canceled: cancelado
payment_states:
balance_due: saldo devedor
completed: completado
@@ -2321,9 +2329,9 @@ pt:
failed: falha
paid: pago
pending: pendente
processing: processando
processing: em processamento
void: vazio
invalid: inváliod
invalid: inválido
shipment_states:
backorder: atrasos
partial: parcial
@@ -2333,12 +2341,14 @@ pt:
user_mailer:
reset_password_instructions:
request_sent_text: |
Recebemos um pedido para redefinir a sua senha.
Se não fez este pedido, simplesmente ignore esta mensagem.
Recebemos um pedido para redefinir a sua senha.
Se não fez este pedido, simplesmente ignore esta mensagem.
link_text: >
Se fez este pedido, clique na ligação abaixo:
issue_text: |
Se o endereço URL acima não funcionar, tente copiá-lo e colá-lo directamente no browser. Se continuar a ter problemas por favor entre em contacto.
Se o endereço URL acima não funcionar, tente copiá-lo e colá-lo directamente no browser. Se continuar a ter problemas por favor entre em contacto.
confirmation_instructions:
subject: Por favor confirme a sua conta OFN
weight: Peso (por kg)
zipcode: Código postal
users:
@@ -2350,6 +2360,7 @@ pt:
cards: Cartões de Crédito
transactions: Transações
settings: Definições de Conta
unconfirmed_email: "Confirmação de email pendente para: %{unconfirmed_email}. O seu endereço de email será actualizado assim que o novo email esteja confirmado. "
orders:
open_orders: Encomendas Abertas
past_orders: Encomendas Passadas

View File

@@ -3,7 +3,7 @@ sv:
attributes:
spree/order:
payment_state: Betalningstatus
shipment_state: Leveranstatus
shipment_state: Leveransstatus
errors:
models:
spree/user:
@@ -13,14 +13,8 @@ sv:
devise:
failure:
invalid: |
Ogiltig e-post eller lösenord.
Var du gäst senast? Du behöver kanske skapa ett konto eller återställa ditt lösenord.
enterprise_confirmations:
enterprise:
confirmed: Tack, din e-postadress har blivit bekräftad.
not_confirmed: Din e-postadress kunde inte bekräftas. Du kanske redan har genomfört det här steget?
confirmation_sent: "Bekräftelsemail skickat!"
confirmation_not_sent: "Kunde ej skicka bekräftelsemail."
Ogiltig e-post eller lösenord.
Var du gäst senast? Du behöver kanske skapa ett konto eller återställa ditt lösenord.
enterprise_mailer:
confirmation_instructions:
subject: "Vänligen bekräfta e-postadressen för %{enterprise}"
@@ -32,45 +26,45 @@ sv:
home: "OFN"
title: Open Food Network
welcome_to: 'Välkommen till'
site_meta_description: "dölja"
site_meta_description: "Vi börjar från grunden. Med bönder och odlare redo att berätta sina berättelser stolt och verkligt. Med distributörer redo att ansluta människor med produkter rättvist och ärligt. Med köpare som tror att bättre veckovisa köpbeslut kan ..."
search_by_name: Sök på ortnamn eller förort...
producers_join: Svenska producenter kan nu gå med i Open Food Network. Välkomna!
charges_sales_tax: Debiterar Moms?
print_invoice: "Skriv ut faktura"
print_ticket: "Skriv ut kvitto"
select_ticket_printer: "Välj skrivare för bijetterna"
select_ticket_printer: "Välj skrivare för kvitton"
send_invoice: "Skicka faktura"
resend_confirmation: "Skicka bekräftelse igen"
view_order: "Se beställning"
resend_confirmation: "Skicka om bekräftelse"
view_order: "Granska beställning"
edit_order: "Ändra beställning"
ship_order: "Skicka beställning"
cancel_order: "Ångra beställning"
confirm_send_invoice: "En faktura på denna beställning kommer att skickas till kunden. Är du säker på att du vill fortsätta? "
confirm_resend_order_confirmation: "Är du säker på att du vill skicka orderbekräftelsen en gång till? "
confirm_resend_order_confirmation: "Är du säker på att du vill skicka beställningsbekräftelsen en gång till? "
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"
capped_at_cap: "begränsat till %{cap}"
per_month: "per månad"
free: "gratis"
free_trial: "prova gratis"
plus_tax: "plus Moms"
free_trial: "gratis pröva-på period"
plus_tax: "plus moms"
min_bill_turnover_desc: "när omsättning överskrider %{mbt_amount}"
say_no: "Nej"
say_yes: "Ja"
then:
sort_order_cycles_on_shopfront_by: "Sortera Cykler Av Ordrar På Skyltfönster Efter"
required_fields: Fält som måste fyllas i är märkta med en asterisk
select_continue: Välj och fortsätt
sort_order_cycles_on_shopfront_by: "Sortera butikens beställningsomgångar efter"
required_fields: Obligatoriska fält är märkta med en asterisk
select_continue: Markera och fortsätt
remove: Ta bort
or: eller
collapse_all: Minimera alla
expand_all: Expandera alla
loading: Laddning...
loading: Laddar...
show_more: Visa mer
show_all: Visa alla
show_all_with_more: "Visa alla (%{num} More)"
cancel: Makulera
show_all_with_more: "Visa alla (ytterligare %{num})"
cancel: Avbryt
edit: Redigera
distributors: Distributörer
distribution: Distribution
@@ -107,22 +101,22 @@ sv:
on_hand: På lager
on_demand: På begäran
on_demand?: På begäran?
order_cycle: Ordercykel
order_cycle: Beställningsomgång
phone: Telefon
price: Pris
producer: Producent
product: Produkt
quantity: Kvantitet
shop: Butik
sku: Orderrad
sku: SKU
tags: Taggar
variant: Variant
weight: Vikt
volume: Volym
items: Artiklar
select_all: Välj alla
select_all: Markera alla
obsolete_master: Föråldrad mästare
quick_search: Snabb sökning
quick_search: Snabbsökning
clear_all: Rensa allt
start_date: "Startdatum"
end_date: "Slutdatum"
@@ -170,27 +164,27 @@ sv:
business_model_configuration_tip: "Beräkna det belopp som varje affär skall betala varje månad för användningen av OFN. "
bill_calculation_settings: "Inställningar för beräkning av fakturor"
bill_calculation_settings_tip: "Justera det belopp företag skall faktureras varje månad för användning av OFN."
shop_trial_length: "Försöksperiod (Dagar)"
shop_trial_length: "Pröva-på period (dagar)"
shop_trial_length_tip: "Antal dagar som företag som definierats som affärer kan ha som försöksperiod."
fixed_monthly_charge: "Bestämd månadsavgift"
fixed_monthly_charge_tip: "En bestämd månadsavgift för alla företag som är definierade som affärer och som överskridit minsta fakturerade omsättningen (om sådan bestämts)."
fixed_monthly_charge_tip: "En bestämd månadsavgift för alla företag som är definierade som butiker och som överskridit minsta tillåtna omsättning (om sådan bestämts)."
percentage_of_turnover: "Procent av omsättning"
percentage_of_turnover_tip: "När den är större än noll, denna taxa (0,0 - 1,0) kommer att läggas till den totala omsättningen för varje affär och adderas till varje bestämd avgift (till vänster) vid beräkning av månadsavgiften."
monthly_cap_excl_tax: "månadstak (exkl. GST)"
monthly_cap_excl_tax_tip: "När det är större än noll, kommer detta värde att användas som tak för det belopp som affärer skall faktureras varje månad."
percentage_of_turnover_tip: "När den är större än noll, kommer denna taxa (0,0 - 1,0) att läggas till den totala omsättningen för varje affär och adderas till varje bestämd avgift (till vänster) vid beräkning av månadsavgiften."
monthly_cap_excl_tax: "månadstak (exkl. moms)"
monthly_cap_excl_tax_tip: "När det är större än noll, kommer detta värde att användas som tak för det belopp som butiker skall faktureras varje månad."
tax_rate: "Skattesats"
tax_rate_tip: "Skattesats som används på månadsfakturan som företag skall betala för att använda systemet."
minimum_monthly_billable_turnover: "Minsta månatliga fakturerbara omsättning"
minimum_monthly_billable_turnover_tip: "Minsta månadsomsättning i en en butiks skyltfönster får betala för att använda OFN. Företag vars omsättning understiger detta belopp under en månad behöver ej betala vare sig procentuellt eller med en fast taxa."
minimum_monthly_billable_turnover: "Minsta månatliga omsättning"
minimum_monthly_billable_turnover_tip: "Minsta månadsomsättning som en butik får betala för att använda OFN. Företag vars omsättning understiger detta belopp under en månad behöver ej betala vare sig procentuellt eller en fast taxa."
example_bill_calculator: "Exempel på beräkning av en faktura"
example_bill_calculator_legend: "Ändra omsättningen i exemplet för att åskådliggöra effekten av ändrade inställningar till vänster."
example_monthly_turnover: "Exempel på månatlig omsättning"
example_monthly_turnover_tip: "Ett exempel på månatlig omsättning för företaget som används för att beräkna en månatlig faktura i exemplet nedan."
example_bill_calculator_legend: "Ändra omsättning i exemplet för att åskådliggöra effekten av ändrade inställningar."
example_monthly_turnover: "Exempel på månadsomsättning"
example_monthly_turnover_tip: "Ett exempel på månadsomsättning som används för att beräkna en månatlig faktura i exemplet nedan."
cap_reached?: "Är taket nått?"
cap_reached?_tip: "Visar om taket (specificerat till vänster) har nåtts. med de givna inställningarna och omsättningen."
included_tax: "Skatten är inkluderad"
included_tax_tip: "All skatt är inkluderad i exemplets månadsfaktura enligt de inställningar och den omsättning som var angiven."
total_monthly_bill_incl_tax: "Total månadsfaktura (inkl skatt)"
total_monthly_bill_incl_tax: "Totalt månadsfaktura (inkl moms)"
total_monthly_bill_incl_tax_tip: "Exemplets totala månadsfaktura med skatt inkluderad enligt de inställningar och den omsättning som var angiven."
customers:
index:
@@ -207,11 +201,11 @@ sv:
update_address_error: 'Oj! Du måste fylla i alla obligatoriska fält'
edit_bill_address: 'Ändra fakturaadress'
edit_ship_address: 'Ändra leveransadress'
required_fileds: 'Obligatoriska fält är markerade med en stjärna'
required_fileds: 'Obligatoriska fält är markerade med en asterisk'
select_country: 'Välj land'
select_state: 'Välj län'
edit: 'Ändra'
update_address: 'Uppdatera Adress'
update_address: 'Uppdatera adress'
confirm_delete: 'Vill du verkligen radera?'
search_by_email: "Sök via e-post/kod..."
destroy:
@@ -220,7 +214,7 @@ sv:
show:
title: Inkomst
distributor: Distributör
order_cycle: Ordercykel
order_cycle: Beställningsomgång
status: Status
diff: Differens
error: Fel
@@ -253,14 +247,6 @@ sv:
manages: hanterar
products:
unit_name_placeholder: 't.ex. klasar'
bulk_edit:
unit: Enhet
display_as: Visa som
category: Kategori
tax_category: Taxområde
inherits_properties?: Ärva egenskaper?
available_on: 'Tillgänglig '
av_on: "Md. På"
properties:
property_name: Egendomens Namn
inherited_property: Ärvd Egendom
@@ -340,8 +326,6 @@ sv:
contact:
name: Namn
name_placeholder: ex. Gustav Persson
email_address: E-postadress
email_address_placeholder: ex gustav@telia.com
phone: Telefon
phone_placeholder: ex 123 456 789
website: Hemsida
@@ -448,6 +432,7 @@ sv:
email_confirmation_notice_html: "E-post bekräftelse har inte kommit. Vi har sänt en bekräftande e-post till %{email}."
resend: Återsänd
owner: 'Ägare'
contact: "Kontakt"
owner_tip: Den primära användaren är ansvarig för detta företag.
notifications: Meddelanden
notifications_tip: Meddelanden om order kommer att sändas till denna e-postadress,
@@ -517,8 +502,6 @@ sv:
advanced_settings: Avancerade inställningar
update_and_close: Uppdatera och Stäng
choose_products_from: 'Välj produkter från:'
pickup_time_tip: När beställningar från denna Beställningsomgång kommer att vara redo för kunden
pickup_instructions_tip: Dessa instruktioner visas för kunderna efter att de har slutfört en beställning
exchange_form:
pickup_instructions_placeholder: "Instruktioner för upphämtning"
pickup_time_placeholder: "Klar för (dvs. Datum/Tid)"
@@ -633,6 +616,10 @@ sv:
description: Fakturor för import till Xero
packing:
name: Förpackningsrapporter
subscriptions:
review:
address: Adress
products: Produkter
checkout:
already_ordered:
cart: "vagn"
@@ -739,7 +726,6 @@ sv:
label_more: "Visa mer"
label_less: "Visa mindre"
label_notices: "Anmälan"
items: "artiklar"
cart_headline: "Din varukorg"
total: "Summa "
cart_updating: "Uppdatera din varukorg"
@@ -765,7 +751,7 @@ sv:
footer_sites_userguide: "Användarguide"
footer_secure: "Säkert och anförtrott."
footer_secure_text: "Open Food Network använder SSL-kryptering (2048 bitars RSA) överallt för att hålla din beställnings- och betalningsinformation privat. Våra servrar lagrar inte dina kreditkortsdetaljer och betalningar processeras av PCI-beskedliga tjänster."
footer_contact_headline: "Hålla kontakten"
footer_contact_headline: "Håll kontakten"
footer_contact_email: "Mejla oss"
footer_nav_headline: "Navigera"
footer_join_headline: "Gå med oss"
@@ -863,7 +849,6 @@ sv:
email_confirmation_click_link: "Var vänlig att klicka på länken nedan för att bekräfta din e-postadress och fortsätt att skapa din profil."
email_confirmation_link_label: "Bekräfta din e-postadress »"
email_confirmation_help_html: "Sedan du bekräftat din e-postadress har du tillgång till ditt konto för denna firma. Se %{link} för att ta reda på mer om %{sitename} artiklar och börja använda din profil eller online butik."
email_confirmation_userguide: "Användarguide"
email_social: "Koppla ihop med Oss:"
email_contact: "Mejla oss:"
email_signoff: "Hälsningar,"
@@ -894,9 +879,6 @@ sv:
email_special_instructions: "Dina anteckningar:"
email_signup_greeting: Hallå!
email_signup_welcome: "Välkommen till %{sitename}!"
email_signup_login: Din inloggning
email_signup_email: Din e-postadress för inloggning är
email_signup_shop_html: "Du kan starta ditt onlineköp nu på %{link}."
email_signup_text: "Tack för att du anslutit dig till vårt nätverk. Om du är kund, vi vill introducera dig för många utmärkta odlare och ett stort urval av god mat. Om du är producent eller matföretag är vi glada att ha dig som en del av vårt nätverk.\n."
email_signup_help_html: "Vi uppskattar alla frågor och synpunkter; du kan använda <em>Send Feedback</em> knappen på sidan eller skicka e-post till %{email}"
producer_mail_greeting: "Kära"
@@ -918,6 +900,8 @@ sv:
enterprises_next_closing: "Nästa order stängs"
enterprises_ready_for: "Klar för"
enterprises_choose: "Välj när du vill ha din beställning:"
maps_open: "Öppen"
maps_closed: "Stängd"
hubs_buy: "Handla:"
hubs_shopping_here: "Att handla här"
hubs_orders_closed: "Beställningar avslutade"
@@ -1084,8 +1068,8 @@ sv:
orders_could_not_cancel: "Tyvärr kan denna beställning inte avbrytas"
orders_cannot_remove_the_final_item: "Det går inte att ta bort det sista varan från en beställning, var god och avbryt beställningen istället."
orders_bought_items_notice:
one: Ett ytterligare objekt är redan bekräftat för denna ordercykel
other: '%{count} ytterligare artiklar är redan bekräftade för denna beställningsomgång'
one: "Ett ytterligare objekt är redan bekräftat för denna ordercykel"
other: "%{count} ytterligare artiklar är redan bekräftade för denna beställningsomgång"
orders_bought_edit_button: Redigera bekräftade varor
orders_bought_already_confirmed: "* redan bekräftad"
orders_confirm_cancel: Är du säker på att du vill avbryta denna beställning?
@@ -1103,7 +1087,7 @@ sv:
products_distributor_info: När du väljer distributör för din order kommer leveranstider att visas här
products_distribution_adjustment_label: "Distribution för %{distributor} av %{product}"
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. "
shop_trial_expired_notice: "Goda nyheter! Vi har beslutat utöka butikens pröva-på period tills vidare. "
password: Lösenord
remember_me: Kom ihåg mig
are_you_sure: "Är du säker?"
@@ -1187,7 +1171,6 @@ sv:
enterprise_about_headline: "Snygg sak"
enterprise_about_message: "Låt oss nu bli lite mer detaljerade om"
enterprise_success: "Succé! %{enterprise} ingår nu i Open Food Network "
enterprise_registration_exit_message: "Om du vid något tillfälle lämnar denna guide ska du klicka på \"confirmation\" länken på den e-post du erhållit. Detta gör att du kommer till administrationsstatus där du kan fortsätta att bygga din profil."
enterprise_description: "Kort beslrivning"
enterprise_description_placeholder: "En kort mening som beskriver ditt företag"
enterprise_long_desc: "Lång beskrivning"
@@ -1228,8 +1211,6 @@ sv:
registration_finished_headline: "Klar!"
registration_finished_thanks: "Tack för att du fyllt i alla uppgifter för %{enterprise}."
registration_finished_login: "Du kan ändra eller uppdatera dina uppgifter när som helst genom att logga in på Open Food Network och klicka på Admin."
registration_finished_activate: "Aktivera %{enterprise}."
registration_finished_activate_instruction_html: "Vi har sänt bekräftelse via e-post till <strong>%{email}</strong> om den inte varit aktiverad tidigare. <br/> Var vänlig följ instruktionerna där så att ditt företag visas på Open Food Network."
registration_finished_action: "Open Food Network hem"
registration_type_headline: "Sista steget för att lägga till %{enterprise}!"
registration_type_question: "Är du en producent?"
@@ -1670,7 +1651,6 @@ sv:
order_cycles_email_to_producers_notice: 'E-postmeddelanden till producenter har blivit placerade i kön för att skickas.'
order_cycles_no_permission_to_coordinate_error: "Ingen av dina företag har tillstånd att samordna en beställningsomgång"
order_cycles_no_permission_to_create_error: "Du har inte behörighet att skapa en beställningsomgång som samordnas av företaget"
order_cycles_no_permission_to_delete_error: "Denna beställningsomgång har valts av en kund och kan inte raderas. För att förhindra att kunder får tillgång till det, stäng det istället."
js:
saving: 'Sparar...'
changes_saved: 'Ändringar sparade.'
@@ -1839,7 +1819,7 @@ sv:
could_not_delete_customer: 'Kunde inte radera kund'
product_import:
confirmation: |
Detta kommer att ställa lagersaldot till noll på alla produkter för detta företag, som inte är närvarande i den uppladdade filen.
Detta kommer att ställa lagersaldot till noll på alla produkter för detta företag, som inte är närvarande i den uppladdade filen.
order_cycles:
update_success: 'Din beställningsomgång har uppdaterats.'
no_distributors: Det finns inga distributörer i denna beställningsomgång. Den kommer inte att vara synlig för kunderna tills du lägger till en distributör. Vill du fortsätta och spara denna beställningsomgång? '
@@ -1907,7 +1887,6 @@ sv:
address: adress
adjustments: justeringar
awaiting_return: väntar återsändning
canceled: makulerad
cart: kundvagn
complete: komplett
confirm: bekräfta
@@ -1936,19 +1915,16 @@ sv:
user_mailer:
reset_password_instructions:
request_sent_text: |
En begäran om att återställa ditt lösenord har gjorts.
Om du inte gjorde denna förfrågan ignorerar du bara det här e-postmeddelandet.
En begäran om att återställa ditt lösenord har gjorts.
Om du inte gjorde denna förfrågan ignorerar du bara det här e-postmeddelandet.
link_text: >
Om du gjorde denna förfrågan klickar du bara på länken nedan:
issue_text: |
Om den ovan nämnda webbadressen inte fungerar kan du försöka kopiera och klistra in den i webbläsaren.
Om du får problem, var god kontakta oss.
Om den ovan nämnda webbadressen inte fungerar kan du försöka kopiera och klistra in den i webbläsaren.
Om du får problem, var god kontakta oss.
weight: Vikt (kg)
zipcode: Postkod
users:
show:
open_orders: Öppna beställningar
transaction_history: Transaktionshistorik
open_orders:
order: Beställningar
shop: 'Butik '

View File

@@ -113,6 +113,8 @@ Openfoodnetwork::Application.routes.draw do
resources :tag_rules, only: [:destroy]
end
resources :manager_invitations, only: [:create]
resources :enterprise_relationships
resources :enterprise_roles
@@ -210,6 +212,8 @@ Openfoodnetwork::Application.routes.draw do
resource :status do
get :job_queue
end
post '/product_images/:product_id', to: 'product_images#update_product_image'
end
namespace :open_food_network do
@@ -285,7 +289,6 @@ Spree::Core::Engine.routes.prepend do
resources :orders do
get :managed, on: :collection
end
end
namespace :admin do

View File

@@ -0,0 +1,11 @@
class RemovePlacedAtAndConfirmedAtFromOrderCycles < ActiveRecord::Migration
def up
remove_column :order_cycles, :standing_orders_placed_at
remove_column :order_cycles, :standing_orders_confirmed_at
end
def down
add_column :order_cycles, :standing_orders_placed_at, :datetime
add_column :order_cycles, :standing_orders_confirmed_at, :datetime
end
end

View File

@@ -11,7 +11,7 @@
#
# It's strongly recommended to check this file into your version control system.
ActiveRecord::Schema.define(:version => 20180222231639) do
ActiveRecord::Schema.define(:version => 20180316034336) do
create_table "account_invoices", :force => true do |t|
t.integer "user_id", :null => false
@@ -319,10 +319,8 @@ ActiveRecord::Schema.define(:version => 20180222231639) do
t.datetime "orders_open_at"
t.datetime "orders_close_at"
t.integer "coordinator_id"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.datetime "standing_orders_placed_at"
t.datetime "standing_orders_confirmed_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
create_table "producer_properties", :force => true do |t|

View File

@@ -29,3 +29,24 @@ states.each do |state|
)
end
end
def create_mail_method
Spree::MailMethod.destroy_all
CreateMailMethod.new(
environment: Rails.env,
preferred_enable_mail_delivery: true,
preferred_mail_host: ENV.fetch('MAIL_HOST'),
preferred_mail_domain: ENV.fetch('MAIL_DOMAIN'),
preferred_mail_port: ENV.fetch('MAIL_PORT'),
preferred_mail_auth_type: 'login',
preferred_smtp_username: ENV.fetch('SMTP_USERNAME'),
preferred_smtp_password: ENV.fetch('SMTP_PASSWORD'),
preferred_secure_connection_type: 'None',
preferred_mails_from: "no-reply@#{ENV.fetch('MAIL_DOMAIN')}",
preferred_mail_bcc: '',
preferred_intercept_email: ''
).call
end
create_mail_method

View File

@@ -58,6 +58,7 @@ module OpenFoodNetwork
def products_bulk_edit_columns
node = "spree.admin.products.bulk_edit.products_head"
{
image: { name: I18n.t("admin.image"), visible: true },
producer: { name: I18n.t("admin.producer"), visible: true },
sku: { name: I18n.t("admin.sku"), visible: false },
name: { name: I18n.t("admin.name"), visible: true },

View File

@@ -0,0 +1,27 @@
module OpenFoodNetwork
# Provides access to the language settings.
# Currently, language settings are read from the environment.
# See: config/application.yml
class I18nConfig
# Locales that can be selected by users.
def self.selectable_locales
ENV["AVAILABLE_LOCALES"].andand.split(/[\s,]+/) || []
end
# All locales that can be accessed by the application, including fallbacks.
def self.available_locales
(selectable_locales + [default_locale, source_locale]).uniq
end
# The default locale that is used when the user doesn't have a preference.
def self.default_locale
ENV["LOCALE"] || ENV["I18N_LOCALE"] || source_locale
end
# This locale is changed with the code and should always be complete.
# All translations are done from this locale.
def self.source_locale
"en"
end
end
end

View File

@@ -13,11 +13,6 @@ namespace :openfoodnetwork do
country = Spree::Country.find_by_iso(ENV.fetch('DEFAULT_COUNTRY_CODE'))
state = country.states.first
Spree::MailMethod.create!(
environment: Rails.env,
preferred_mails_from: spree_user.email
)
# -- Shipping / payment information
unless Spree::Zone.find_by_name 'Australia'
puts "[#{task_name}] Seeding shipping / payment information"
@@ -210,6 +205,5 @@ namespace :openfoodnetwork do
spree_user.confirm!
end
end
end

View File

@@ -0,0 +1,42 @@
require 'spec_helper'
module Admin
describe ManagerInvitationsController, type: :controller do
let!(:existing_user) { create(:user) }
let!(:enterprise) { create(:enterprise) }
let(:admin) { create(:admin_user) }
describe "#create" do
context "when given email matches an existing user" do
before do
controller.stub spree_current_user: admin
end
it "returns an error" do
spree_post :create, {email: existing_user.email, enterprise_id: enterprise.id}
expect(response.status).to eq 422
expect(json_response['errors']).to eq I18n.t('admin.enterprises.invite_manager.user_already_exists')
end
end
context "signing up a new user" do
before do
controller.stub spree_current_user: admin
end
it "creates a new user, sends an invitation email, and returns the user id" do
expect do
spree_post :create, {email: 'un.registered@email.com', enterprise_id: enterprise.id}
end.to enqueue_job Delayed::PerformableMethod
new_user = Spree::User.find_by_email('un.registered@email.com')
expect(new_user.reset_password_token).to_not be_nil
expect(response.status).to eq 200
expect(json_response['user']).to eq new_user.id
end
end
end
end
end

View File

@@ -0,0 +1,36 @@
require 'spec_helper'
require 'spree/api/testing_support/helpers'
module Api
describe ProductImagesController, type: :controller do
include AuthenticationWorkflow
render_views
describe "uploading an image" do
before do
allow(controller).to receive(:spree_current_user) { current_api_user }
end
image_path = File.open(Rails.root.join('app', 'assets', 'images', 'logo-black.png'))
let(:image) { Rack::Test::UploadedFile.new(image_path, 'image/png') }
let!(:product_without_image) { create(:product) }
let!(:product_with_image) { create(:product_with_image) }
sign_in_as_admin!
it "saves a new image when none is present" do
xhr :post, :update_product_image, product_id: product_without_image.id, file: image, use_route: :product_images
expect(response.status).to eq 201
expect(product_without_image.images.first.id).to eq json_response['id']
end
it "updates an existing product image" do
xhr :post, :update_product_image, product_id: product_with_image.id, file: image, use_route: :product_images
expect(response.status).to eq 200
expect(product_with_image.images.first.id).to eq json_response['id']
end
end
end
end

View File

@@ -25,17 +25,17 @@ describe UserConfirmationsController, type: :controller do
end
context "that has not been confirmed" do
it "redirects the user to login" do
spree_get :show, confirmation_token: unconfirmed_user.confirmation_token
expect(response).to redirect_to login_path(validation: 'confirmed')
end
it "confirms the user" do
spree_get :show, confirmation_token: unconfirmed_user.confirmation_token
expect(unconfirmed_user.reload.confirmed_at).not_to eq(nil)
end
it "redirects to previous url" do
it "redirects the user to #/login by default" do
spree_get :show, confirmation_token: unconfirmed_user.confirmation_token
expect(response).to redirect_to login_path(validation: 'confirmed')
end
it "redirects to previous url, if present" do
session[:confirmation_return_url] = producers_path + '#/login'
spree_get :show, confirmation_token: unconfirmed_user.confirmation_token
expect(response).to redirect_to producers_path + '#/login?validation=confirmed'
@@ -46,6 +46,13 @@ describe UserConfirmationsController, type: :controller do
spree_get :show, confirmation_token: unconfirmed_user.confirmation_token
expect(response).to redirect_to registration_path + '#/signup?after_login=%2Fregister&validation=confirmed'
end
it "redirects to set password page, if user needs to reset their password" do
unconfirmed_user.reset_password_token = Devise.friendly_token
unconfirmed_user.save!
spree_get :show, confirmation_token: unconfirmed_user.confirmation_token
expect(response).to redirect_to spree.edit_spree_user_password_path(reset_password_token: unconfirmed_user.reset_password_token)
end
end
end

View File

@@ -31,12 +31,16 @@ describe UserPasswordsController, type: :controller do
end
it "renders Darkswarm" do
Spree::MailMethod.create!(environment: 'test')
clear_jobs
user.send_reset_password_instructions
flush_jobs # Send the reset password instructions
user.reload
spree_get :edit, reset_password_token: user.reset_password_token
response.should render_template "user_passwords/edit"
expect(response).to render_template "user_passwords/edit"
end
describe "via ajax" do

View File

@@ -425,6 +425,13 @@ FactoryGirl.define do
stripe_user_id "abc123"
stripe_publishable_key "xyz456"
end
factory :product_with_image, parent: :product do
after(:create) do |product|
image = File.open(Rails.root.join('app', 'assets', 'images', 'logo-white.png'))
Spree::Image.create(attachment: image, viewable_id: product.master.id, viewable_type: 'Spree::Variant')
end
end
end

View File

@@ -744,4 +744,79 @@ feature %q{
expect(v.on_hand).to eq 18
end
end
describe "Updating product image with new upload interface" do
let!(:product) { create(:simple_product, name: "Carrots") }
it "displays product images and image upload modal" do
quick_login_as_admin
visit '/admin/products/bulk_edit'
within "table#listing_products tr#p_#{product.id}" do
# Displays product images
expect(page).to have_selector "td.image"
# Shows default image when no image set
expect(page).to have_css "img[src='/assets/noimage/mini.png']"
@old_thumb_src = page.find("a.image-modal img")['src']
# Click image
page.find("a.image-modal").trigger('click')
end
# Shows upload modal
expect(page).to have_selector "div.reveal-modal.product-image-upload"
within "div.reveal-modal.product-image-upload" do
# Shows preview of current image
expect(page).to have_css "img.preview"
old_image_src = page.find("img.preview")['src']
# Upload a new image file
attach_file 'image-upload', Rails.root.join("public/500.jpg"), visible: false
# Shows spinner whilst loading
expect(page).to have_css "img.spinner", visible: true
expect(page).to_not have_css "img.spinner", visible: true
# Shows new image when finished
expect(page).to have_css "img.preview"
@new_image_src = page.find("img.preview")['src']
expect(old_image_src) != @new_image_src
# Close modal
page.find("a.close-reveal-modal").click
end
expect(page).to_not have_selector "div.reveal-modal.product-image-upload"
within "table#listing_products tr#p_#{product.id}" do
# New thumbnail is shown in image column
@new_thumb_src = page.find("a.image-modal img")['src']
expect(@old_thumb_src) != @new_thumb_src
page.find("a.image-modal").trigger('click')
end
expect(page).to have_selector "div.reveal-modal.product-image-upload"
within "div.reveal-modal.product-image-upload" do
# Upload another image file
attach_file 'image-upload', Rails.root.join("public/422.jpg"), visible: false
# Overwrites existing image
expect(page).to have_css "img.preview"
newer_image_src = page.find("img.preview")['src']
expect(@new_image_src) != newer_image_src
page.find("a.close-reveal-modal").click
end
within "table#listing_products tr#p_#{product.id}" do
# Newer thumbnail is shown in image column
newer_thumb_src = page.find("a.image-modal img")['src']
expect(@new_thumb_src) != newer_thumb_src
end
end
end
end

View File

@@ -83,6 +83,7 @@ feature %q{
let!(:user1) { create(:user, email: 'user1@example.com') }
let!(:user2) { create(:user, email: 'user2@example.com') }
let!(:user3) { create(:user, email: 'user3@example.com', confirmed_at: nil) }
let(:new_email) { 'new@manager.com' }
let!(:enterprise) { create(:enterprise, name: 'Test Enterprise', owner: user1) }
let!(:enterprise_role) { create(:enterprise_role, user_id: user2.id, enterprise_id: enterprise.id) }
@@ -114,7 +115,9 @@ feature %q{
# user3 has been added and has an unconfirmed email address
expect(page).to have_css "tr#manager-#{user3.id}"
expect(page).to have_css 'i.unconfirmed'
within "tr#manager-#{user3.id}" do
expect(page).to have_css 'i.unconfirmed'
end
end
end
@@ -133,6 +136,29 @@ feature %q{
end
end
end
it "can invite unregistered users to be managers" do
find('a.button.help-modal').click
expect(page).to have_css '#invite-manager-modal'
within '#invite-manager-modal' do
fill_in 'invite_email', with: new_email
click_button I18n.t('js.admin.modals.invite')
expect(page).to have_content I18n.t('user_invited', email: new_email)
click_button I18n.t('js.admin.modals.close')
end
new_user = Spree::User.find_by_email_and_confirmed_at(new_email, nil)
expect(Enterprise.managed_by(new_user)).to include enterprise
within 'table.managers' do
expect(page).to have_content new_email
within "tr#manager-#{new_user.id}" do
expect(page).to have_css 'i.unconfirmed'
end
end
end
end
end

View File

@@ -184,19 +184,17 @@ feature %q{
product.distributors.should == [@distributors[0]]
end
scenario "editing product SEO" do
scenario "editing product Search" do
product = product = create(:simple_product, supplier: @supplier2)
visit spree.edit_admin_product_path product
within('#sidebar') { click_link 'SEO' }
fill_in "product_meta_keywords", :with => 'Meta Keywords'
fill_in 'Meta Description', :with => 'Meta Description'
within('#sidebar') { click_link 'Search' }
fill_in 'Product Search Keywords', :with => 'Product Search Keywords'
fill_in 'Notes', :with => 'Just testing Notes'
click_button 'Update'
flash_message.should == "Product \"#{product.name}\" has been successfully updated!"
expect(flash_message).to eq("Product \"#{product.name}\" has been successfully updated!")
product.reload
product.notes.should == 'Just testing Notes'
product.meta_keywords.should == 'Meta Keywords'
product.meta_description.should == 'Meta Description'
expect(product.notes).to eq('Just testing Notes')
expect(product.meta_keywords).to eq('Product Search Keywords')
end
scenario "deleting product properties", js: true do

View File

@@ -71,11 +71,10 @@ feature 'Multilingual', js: true do
describe "using the language switcher UI" do
context "when there is only one language available" do
around do |example|
available_locales = I18n.available_locales
I18n.available_locales = ['en']
example.run
I18n.available_locales = available_locales
before do
allow(ENV).to receive(:[]).and_call_original
allow(ENV).to receive(:[]).with("LOCALE").and_return("en")
allow(ENV).to receive(:[]).with("AVAILABLE_LOCALES").and_return("en")
end
it "hides the dropdown language menu" do
@@ -84,21 +83,29 @@ feature 'Multilingual', js: true do
end
end
it "allows switching language via the main navigation" do
visit root_path
expect(page).to have_content 'SHOPS'
find('ul.right li.language-switcher').click
within'ul.right li.language-switcher ul.dropdown' do
expect(page).to have_link I18n.t('language_name', locale: :en), href: '?locale=en'
expect(page).to have_link I18n.t('language_name', locale: :es, default: 'Language Name'), href: '?locale=es'
find('li a[href="?locale=es"]').click
context "when there are multiple languages available" do
before do
allow(ENV).to receive(:[]).and_call_original
allow(ENV).to receive(:[]).with("LOCALE").and_return("en")
allow(ENV).to receive(:[]).with("AVAILABLE_LOCALES").and_return("en,es")
end
expect(page.driver.browser.cookies['locale'].value).to eq 'es'
expect(page).to have_content 'TIENDAS'
it "allows switching language via the main navigation" do
visit root_path
expect(page).to have_content 'SHOPS'
find('ul.right li.language-switcher').click
within'ul.right li.language-switcher ul.dropdown' do
expect(page).to have_link I18n.t('language_name', locale: :en), href: '?locale=en'
expect(page).to have_link I18n.t('language_name', locale: :es, default: 'Language Name'), href: '?locale=es'
find('li a[href="?locale=es"]').click
end
expect(page.driver.browser.cookies['locale'].value).to eq 'es'
expect(page).to have_content 'TIENDAS'
end
end
end
end

View File

@@ -28,7 +28,7 @@ feature "full-page cart", js: true do
end
end
describe "fees" do
describe "percentage fees" do
let(:percentage_fee) { create(:enterprise_fee, calculator: Calculator::FlatPercentPerItem.new(preferred_flat_percent: 20)) }
before do
@@ -47,6 +47,42 @@ feature "full-page cart", js: true do
end
end
describe "admin and handling flat fees" do
context 'when there are fees' do
let(:handling_fee) { create(:enterprise_fee, calculator: Spree::Calculator::FlatRate.new(preferred_amount: 1),
enterprise: order_cycle.coordinator, fee_type: 'admin') }
before do
add_enterprise_fee handling_fee
add_product_to_cart order, product_fee, quantity: 3
visit spree.cart_path
end
it 'shows admin and handlings row' do
expect(page).to have_selector('#cart-detail')
expect(page).to have_content('Admin & Handling')
expect(page).to have_selector '.cart-item-price', text: with_currency(0.86)
expect(page).to have_selector '.order-total.item-total', text: with_currency(2.58)
expect(page).to have_selector '.order-total.distribution-total', text: with_currency(1.00)
expect(page).to have_selector '.order-total.grand-total', text: with_currency(3.58) # price * 3 + 1
end
end
context 'when there are no admin and handling fees' do
before do
add_product_to_cart order, product_fee, quantity: 2
visit spree.cart_path
end
it 'hides admin and handlings row' do
expect(page).to have_selector('#cart-detail')
expect(page).to_not have_content('Admin & Handling')
expect(page).to have_selector '.cart-item-price', text: with_currency(0.86)
expect(page).to have_selector '.order-total.grand-total', text: with_currency(1.72) # price * 3
end
end
end
describe "tax" do
before do
add_enterprise_fee enterprise_fee

View File

@@ -12,7 +12,7 @@ feature "As a consumer I want to shop with a distributor", js: true do
let(:supplier) { create(:supplier_enterprise) }
let(:oc1) { create(:simple_order_cycle, distributors: [distributor], coordinator: create(:distributor_enterprise), orders_close_at: 2.days.from_now) }
let(:oc2) { create(:simple_order_cycle, distributors: [distributor], coordinator: create(:distributor_enterprise), orders_close_at: 3.days.from_now) }
let(:product) { create(:simple_product, supplier: supplier) }
let(:product) { create(:simple_product, supplier: supplier, meta_keywords: "Domestic") }
let(:variant) { product.variants.first }
let(:order) { create(:order, distributor: distributor) }
@@ -169,7 +169,7 @@ feature "As a consumer I want to shop with a distributor", js: true do
describe "after selecting an order cycle with products visible" do
let(:variant1) { create(:variant, product: product, price: 20) }
let(:variant2) { create(:variant, product: product, price: 30, display_name: "Badgers") }
let(:product2) { create(:simple_product, supplier: supplier, name: "Meercats") }
let(:product2) { create(:simple_product, supplier: supplier, name: "Meercats", meta_keywords: "Wild") }
let(:variant3) { create(:variant, product: product2, price: 40, display_name: "Ferrets") }
let(:exchange) { Exchange.find(oc1.exchanges.to_enterprises(distributor).outgoing.first.id) }
@@ -212,6 +212,10 @@ feature "As a consumer I want to shop with a distributor", js: true do
fill_in "search", with: "Meer" # For product named "Meercats"
page.should have_content product2.name
page.should_not have_content product.name
fill_in "search", with: "Dome" # For product with meta_keywords "Domestic"
expect(page).to have_content product.name
expect(page).not_to have_content product2.name
end
it "returns search results for products where the search term matches one of the product's variant names" do

View File

@@ -10,9 +10,10 @@ describe "CustomersCtrl", ->
null
shops = [
{ name: "Shop 1", id: 1 }
{ name: "Shop 2", id: 2 }
{ name: "Shop 3", id: 3 }
{ name: "Shop 1", id: 1 },
{ name: "Shop 2", id: 12 },
{ name: "Shop 3", id: 2 },
{ name: "Shop 4", id: 3 }
]
availableCountries = [
@@ -39,9 +40,9 @@ describe "CustomersCtrl", ->
beforeEach inject (pendingChanges) ->
spyOn(pendingChanges, "removeAll")
scope.customers_form = jasmine.createSpyObj('customers_form', ['$setPristine'])
http.expectGET('/admin/customers.json?enterprise_id=3').respond 200, customers
http.expectGET('/admin/customers.json?enterprise_id=2').respond 200, customers
scope.$apply ->
scope.shop_id = 3
scope.shop_id = "2"
http.flush()
it "sets the CurrentShop", inject (CurrentShop) ->
@@ -81,7 +82,7 @@ describe "CustomersCtrl", ->
{ text: 'three' }
]
beforeEach ->
http.expectGET('/admin/tag_rules/map_by_tag.json?enterprise_id=3').respond 200, tags
http.expectGET('/admin/tag_rules/map_by_tag.json?enterprise_id=2').respond 200, tags
it "retrieves the tag list", ->
promise = scope.findTags('')

View File

@@ -0,0 +1,92 @@
require 'spec_helper'
require 'open_food_network/i18n_config'
module OpenFoodNetwork
describe I18nConfig do
context "in default test configuration" do
before do
allow(ENV).to receive(:[]).with("LOCALE").and_return("en")
allow(ENV).to receive(:[]).with("AVAILABLE_LOCALES").and_return("en,es")
end
it "provides the source locale" do
expect(I18nConfig.source_locale).to eq "en"
end
it "provides the default locale" do
expect(I18nConfig.default_locale).to eq "en"
end
it "provides the default selectable locales" do
expect(I18nConfig.selectable_locales).to eq ["en", "es"]
end
it "provides the default available locales" do
expect(I18nConfig.available_locales).to eq ["en", "es"]
end
end
context "without configuration" do
before do
allow(ENV).to receive(:[]).with("LOCALE").and_return(nil)
allow(ENV).to receive(:[]).with("I18N_LOCALE").and_return(nil)
allow(ENV).to receive(:[]).with("AVAILABLE_LOCALES").and_return(nil)
end
it "provides the source locale" do
expect(I18nConfig.source_locale).to eq "en"
end
it "provides the default locale" do
expect(I18nConfig.default_locale).to eq "en"
end
it "provides the default selectable locales" do
expect(I18nConfig.selectable_locales).to eq []
end
it "provides the default available locales" do
expect(I18nConfig.available_locales).to eq ["en"]
end
end
context "with UK configuration" do
before do
allow(ENV).to receive(:[]).with("LOCALE").and_return("en_GB")
allow(ENV).to receive(:[]).with("I18N_LOCALE").and_return(nil)
allow(ENV).to receive(:[]).with("AVAILABLE_LOCALES").and_return("en_GB")
end
it "provides the source locale" do
expect(I18nConfig.source_locale).to eq "en"
end
it "provides the default locale" do
expect(I18nConfig.default_locale).to eq "en_GB"
end
it "provides the default selectable locales" do
expect(I18nConfig.selectable_locales).to eq ["en_GB"]
end
it "provides the default available locales" do
expect(I18nConfig.available_locales).to eq ["en_GB", "en"]
end
end
context "with human syntax" do
before do
allow(ENV).to receive(:[]).with("LOCALE").and_return("es")
allow(ENV).to receive(:[]).with("AVAILABLE_LOCALES").and_return("es, fr ,, ,de")
end
it "provides the default selectable locales" do
expect(I18nConfig.selectable_locales).to eq ["es", "fr", "de"]
end
it "provides the default available locales" do
expect(I18nConfig.available_locales).to eq ["es", "fr", "de", "en"]
end
end
end
end

View File

@@ -2,15 +2,29 @@ require 'spec_helper'
describe EnterpriseMailer do
let!(:enterprise) { create(:enterprise) }
let!(:user) { create(:user) }
before do
ActionMailer::Base.deliveries = []
Spree::MailMethod.create!(environment: 'test')
end
it "should send a welcome email when given an enterprise" do
describe "#welcome" do
it "sends a welcome email when given an enterprise" do
EnterpriseMailer.welcome(enterprise).deliver
ActionMailer::Base.deliveries.count.should == 1
mail = ActionMailer::Base.deliveries.first
expect(mail.subject).to eq "#{enterprise.name} is now on #{Spree::Config[:site_name]}"
expect(mail.subject)
.to eq "#{enterprise.name} is now on #{Spree::Config[:site_name]}"
end
end
describe "#manager_invitation" do
it "should send a manager invitation email when given an enterprise and user" do
EnterpriseMailer.manager_invitation(enterprise, user).deliver
expect(ActionMailer::Base.deliveries.count).to eq 1
mail = ActionMailer::Base.deliveries.first
expect(mail.subject).to eq "#{enterprise.name} has invited you to be a manager"
end
end
end

View File

@@ -16,11 +16,11 @@ describe ProducerMailer do
let(:s3) { create(:supplier_enterprise) }
let(:d1) { create(:distributor_enterprise, charges_sales_tax: true) }
let(:d2) { create(:distributor_enterprise) }
let(:p1) { create(:product, price: 12.34, supplier: s1, tax_category: tax_category) }
let(:p2) { create(:product, price: 23.45, supplier: s2) }
let(:p3) { create(:product, price: 34.56, supplier: s1) }
let(:p4) { create(:product, price: 45.67, supplier: s1) }
let(:p5) { create(:product, price: 56.78, supplier: s1) }
let(:p1) { create(:product, name: "Zebra", price: 12.34, supplier: s1, tax_category: tax_category) }
let(:p2) { create(:product, name: "Aardvark", price: 23.45, supplier: s2) }
let(:p3) { create(:product, name: "Banana", price: 34.56, supplier: s1) }
let(:p4) { create(:product, name: "coffee", price: 45.67, supplier: s1) }
let(:p5) { create(:product, name: "Daffodil", price: 56.78, supplier: s1) }
let(:order_cycle) { create(:simple_order_cycle) }
let!(:incoming_exchange) { order_cycle.exchanges.create! sender: s1, receiver: d1, incoming: true, receival_instructions: 'Outside shed.' }
@@ -71,7 +71,8 @@ describe ProducerMailer do
expect(mail.cc).to eq [order_cycle.coordinator.contact.email]
end
it "contains an aggregated list of produce" do
it "contains an aggregated list of produce in alphabetical order" do
expect(mail.body.encoded).to match(/coffee.+\n.+Zebra/)
body_lines_including(mail, p1.name).each do |line|
line.should include 'QTY: 3'
line.should include '@ $10.00 = $30.00'
@@ -80,6 +81,7 @@ describe ProducerMailer do
.should have_selector("td", text: "$30.00")
end
it "displays tax totals for each product" do
# Tax for p1 line items
body_as_html(mail).find("table.order-summary tr", text: p1.name)

View File

@@ -11,6 +11,8 @@ describe Spree::UserMailer do
ActionMailer::Base.delivery_method = :test
ActionMailer::Base.perform_deliveries = true
ActionMailer::Base.deliveries = []
Spree::MailMethod.create!(environment: 'test')
end
it "sends an email when given a user" do

View File

@@ -14,6 +14,20 @@ module Spree
let(:li1) { create(:line_item, order: o, product: p1) }
let(:li2) { create(:line_item, order: o, product: p2) }
let(:p3) {create(:product, name: 'Clear Honey') }
let(:p4) {create(:product, name: 'Apricots') }
let(:v1) {create(:variant, product: p3, unit_value: 500) }
let(:v2) {create(:variant, product: p3, unit_value: 250) }
let(:v3) {create(:variant, product: p4, unit_value: 500, display_name: "ZZ") }
let(:v4) {create(:variant, product: p4, unit_value: 500, display_name: "aa") }
let(:li3) { create(:line_item, order: o, product: p3, variant: v1) }
let(:li4) { create(:line_item, order: o, product: p3, variant: v2) }
let(:li5) { create(:line_item, order: o, product: p4, variant: v3) }
let(:li6) { create(:line_item, order: o, product: p4, variant: v4) }
let(:oc_order) { create :order_with_totals_and_distribution }
it "finds line items for products supplied by a particular enterprise" do
LineItem.supplied_by(s1).should == [li1]
LineItem.supplied_by(s2).should == [li2]
@@ -40,6 +54,14 @@ module Spree
LineItem.without_tax.should == [li2]
end
end
it "finds line items sorted by name and unit_value" do
expect(o.line_items.sorted_by_name_and_unit_value).to eq([li6,li5,li4,li3])
end
it "finds line items from a given order cycle" do
expect(LineItem.from_order_cycle(oc_order.order_cycle).first.id).to eq oc_order.line_items.first.id
end
end
describe "capping quantity at stock level" do

View File

@@ -0,0 +1,49 @@
require 'spec_helper'
describe CreateMailMethod do
describe '#call' do
let(:mail_method) { Spree::MailMethod.create(environment: 'test') }
let(:mail_settings) { instance_double(Spree::Core::MailSettings) }
let(:attributes) do
{ preferred_smtp_username: "smtp_username", environment: "test" }
end
before do
allow(Spree::MailMethod)
.to receive(:create).with(environment: 'test').and_return(mail_method)
allow(Spree::Core::MailSettings).to receive(:init) { mail_settings }
end
context 'unit' do
before do
allow(mail_method).to receive(:update_attributes).with(attributes)
end
it 'creates a new MailMethod' do
described_class.new(attributes).call
expect(Spree::MailMethod)
.to have_received(:create).with(environment: 'test') { mail_method }
end
it 'updates the MailMethod' do
described_class.new(attributes).call
expect(mail_method)
.to have_received(:update_attributes).with(attributes) { mail_method }
end
it 'initializes the mail settings' do
described_class.new(attributes).call
expect(Spree::Core::MailSettings).to have_received(:init)
end
end
context 'integration' do
it 'updates the mail method attributes' do
described_class.new(attributes).call
expect(mail_method.preferred_smtp_username).to eq('smtp_username')
end
end
end
end