mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-02-27 01:43:22 +00:00
Compare commits
120 Commits
v1.8.10-rc
...
v1.8.11-tr
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6c69eebcbf | ||
|
|
63e453e2c7 | ||
|
|
ec53d9df7a | ||
|
|
18c7b03f3d | ||
|
|
8b560e6cee | ||
|
|
7974ac45f2 | ||
|
|
41b5cf10dd | ||
|
|
b6955cb98c | ||
|
|
6c36c269c8 | ||
|
|
b879ea5a96 | ||
|
|
a6ed4a2c6a | ||
|
|
6972822c49 | ||
|
|
db63f30a76 | ||
|
|
848193434b | ||
|
|
570f0344da | ||
|
|
38c25c412f | ||
|
|
3b4ffe1f70 | ||
|
|
4699c654fc | ||
|
|
c1c5d00f45 | ||
|
|
220693f4e3 | ||
|
|
fcce858ea4 | ||
|
|
1f9698f7a2 | ||
|
|
1766da9d60 | ||
|
|
15ee62aaa8 | ||
|
|
6fc4a297a0 | ||
|
|
74d8dc48b4 | ||
|
|
b6f4ce373e | ||
|
|
c9f186f48f | ||
|
|
daab0dfd7a | ||
|
|
22b5dafad2 | ||
|
|
110f74eee8 | ||
|
|
61cb78fc93 | ||
|
|
38d3b446cc | ||
|
|
e47e10d267 | ||
|
|
77c8c85775 | ||
|
|
fab6d70832 | ||
|
|
9586666248 | ||
|
|
f5ab9a3445 | ||
|
|
1ac8c85113 | ||
|
|
56c2350d36 | ||
|
|
6eafed00f5 | ||
|
|
74661c0b77 | ||
|
|
c4fbcb19d0 | ||
|
|
08e391856c | ||
|
|
8c8b40c5a8 | ||
|
|
c3eda435eb | ||
|
|
5eadb33db9 | ||
|
|
f977a05b08 | ||
|
|
217eda8362 | ||
|
|
579f3bf90a | ||
|
|
348ab81c42 | ||
|
|
3df629bc6e | ||
|
|
07b2f0a7c2 | ||
|
|
c0445d46f3 | ||
|
|
6c90b4e6d0 | ||
|
|
e79a23a554 | ||
|
|
314ccc2f27 | ||
|
|
68c8759af1 | ||
|
|
314e9a4f15 | ||
|
|
0029a1b6cf | ||
|
|
bfcde72855 | ||
|
|
3d0ada803f | ||
|
|
840c936a6f | ||
|
|
7ea74ccf4a | ||
|
|
b55036e165 | ||
|
|
47011e11ff | ||
|
|
ae28d7a96b | ||
|
|
0dd8959bf7 | ||
|
|
316b0915e4 | ||
|
|
e21bfd95f4 | ||
|
|
893331c7bb | ||
|
|
b94bcd697f | ||
|
|
b0ff7ca767 | ||
|
|
493a537f2c | ||
|
|
cda43f075b | ||
|
|
5d9f92eaa7 | ||
|
|
c6afa1849c | ||
|
|
eec3a21c89 | ||
|
|
768240a5ba | ||
|
|
5af8668560 | ||
|
|
630b8a2577 | ||
|
|
12a6f652ad | ||
|
|
db4a528ba3 | ||
|
|
479c7ba24b | ||
|
|
1f08729df3 | ||
|
|
811671661e | ||
|
|
936df71d0d | ||
|
|
f3f6714472 | ||
|
|
3bce2eb7b5 | ||
|
|
bf05866f92 | ||
|
|
219ad4a3a7 | ||
|
|
a7d8028d5a | ||
|
|
d49469a3e6 | ||
|
|
4835ef067f | ||
|
|
4112c3cc75 | ||
|
|
0fe4030d71 | ||
|
|
e8d2d4d96f | ||
|
|
88c3f414fb | ||
|
|
c0d6b68233 | ||
|
|
65f62c42b9 | ||
|
|
fe7bd5e2cd | ||
|
|
e1b40142b8 | ||
|
|
963b4617a9 | ||
|
|
95ddfc4e40 | ||
|
|
01746ed470 | ||
|
|
f25e3bc6f7 | ||
|
|
e63f1c2991 | ||
|
|
29e2886b05 | ||
|
|
a97bcf74de | ||
|
|
1e6f4aa73d | ||
|
|
7c7933f8bb | ||
|
|
dc69c6e825 | ||
|
|
41e91765ca | ||
|
|
19569f9316 | ||
|
|
d91c3d1241 | ||
|
|
b302deb7a3 | ||
|
|
2fae467e9a | ||
|
|
6a5e4bb592 | ||
|
|
507e12adba | ||
|
|
5fa45c0716 |
@@ -1,3 +1,6 @@
|
||||
See this here post on raising a github issue:
|
||||
https://community.openfoodnetwork.org/t/how-to-raise-a-github-issue/912
|
||||
|
||||
# Contributing
|
||||
|
||||
We love pull requests from everyone. Here are some instructions for
|
||||
|
||||
1
Gemfile
1
Gemfile
@@ -115,7 +115,6 @@ end
|
||||
|
||||
group :test do
|
||||
gem 'webmock'
|
||||
|
||||
# See spec/spec_helper.rb for instructions
|
||||
#gem 'perftools.rb'
|
||||
end
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
angular.module("admin.products").controller "editUnitsCtrl", ($scope, VariantUnitManager) ->
|
||||
|
||||
$scope.product =
|
||||
variant_unit: angular.element('#variant_unit').val()
|
||||
variant_unit_scale: angular.element('#variant_unit_scale').val()
|
||||
|
||||
$scope.variant_unit_options = VariantUnitManager.variantUnitOptions()
|
||||
|
||||
if $scope.product.variant_unit == 'items'
|
||||
$scope.variant_unit_with_scale = 'items'
|
||||
else
|
||||
$scope.variant_unit_with_scale = $scope.product.variant_unit + '_' + $scope.product.variant_unit_scale
|
||||
|
||||
$scope.setFields = ->
|
||||
if $scope.variant_unit_with_scale == 'items'
|
||||
variant_unit = 'items'
|
||||
variant_unit_scale = null
|
||||
else
|
||||
options = $scope.variant_unit_with_scale.split('_')
|
||||
variant_unit = options[0]
|
||||
variant_unit_scale = options[1]
|
||||
|
||||
$scope.product.variant_unit = variant_unit
|
||||
$scope.product.variant_unit_scale = variant_unit_scale
|
||||
@@ -0,0 +1,14 @@
|
||||
angular.module("admin.products").controller "variantUnitsCtrl", ($scope, VariantUnitManager, $timeout) ->
|
||||
|
||||
$scope.unitName = (scale, type) ->
|
||||
VariantUnitManager.getUnitName(scale, type)
|
||||
|
||||
$scope.scale = angular.element('#product_variant_unit_scale').val()
|
||||
|
||||
$scope.updateValue = ->
|
||||
unit_value_human = angular.element('#unit_value_human').val()
|
||||
$scope.unit_value = unit_value_human * $scope.scale
|
||||
|
||||
variant_unit_value = angular.element('#variant_unit_value').val()
|
||||
$scope.unit_value_human = variant_unit_value / $scope.scale
|
||||
$timeout -> $scope.updateValue()
|
||||
@@ -1,8 +1,8 @@
|
||||
$ ->
|
||||
if ($ 'form#update-cart').is('*')
|
||||
($ 'form#update-cart a.delete').show().one 'click', ->
|
||||
($ this).parents('.line-item').first().find('input.line_item_quantity').val 0
|
||||
($ this).parents('form').first().submit()
|
||||
if $('form#update-cart').is('*') || $('form#update-order').is('*')
|
||||
$('form#update-cart a.delete, form#update-order a.delete').show().one 'click', ->
|
||||
$(this).parents('.line-item').first().find('input.line_item_quantity').val 0
|
||||
$(this).parents('form').first().submit()
|
||||
false
|
||||
|
||||
($ 'form#update-cart').submit ->
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
Darkswarm.controller "EditBoughtOrderController", ($scope, $resource, Cart) ->
|
||||
$scope.showBought = false
|
||||
|
||||
$scope.deleteLineItem = (id) ->
|
||||
params = {id: id}
|
||||
success = (response) ->
|
||||
$(".line-item-" + id).remove()
|
||||
Cart.removeFinalisedLineItem(id)
|
||||
fail = (error) ->
|
||||
console.log error
|
||||
|
||||
$resource("/line_items/:id").delete(params, success, fail)
|
||||
@@ -10,7 +10,7 @@ Darkswarm.controller "OrderCycleCtrl", ($scope, $timeout, OrderCycle) ->
|
||||
$("#order_cycle_id").trigger("openTrigger")
|
||||
|
||||
|
||||
Darkswarm.controller "OrderCycleChangeCtrl", ($scope, $timeout, OrderCycle, Products, Variants, Cart) ->
|
||||
Darkswarm.controller "OrderCycleChangeCtrl", ($scope, $timeout, OrderCycle, Products, Variants, Cart, ChangeableOrdersAlert) ->
|
||||
# Track previous order cycle id for use with revertOrderCycle()
|
||||
$scope.previous_order_cycle_id = OrderCycle.order_cycle.order_cycle_id
|
||||
$scope.$watch 'order_cycle.order_cycle_id', (newValue, oldValue)->
|
||||
@@ -30,3 +30,5 @@ Darkswarm.controller "OrderCycleChangeCtrl", ($scope, $timeout, OrderCycle, Prod
|
||||
Variants.clear()
|
||||
Cart.clear()
|
||||
Products.update()
|
||||
Cart.reloadFinalisedLineItems()
|
||||
ChangeableOrdersAlert.reload()
|
||||
|
||||
@@ -11,8 +11,7 @@ window.Darkswarm = angular.module("Darkswarm", ["ngResource",
|
||||
'angularFileUpload',
|
||||
'angularSlideables'
|
||||
]).config ($httpProvider, $tooltipProvider, $locationProvider, $anchorScrollProvider) ->
|
||||
$httpProvider.defaults.headers.post['X-CSRF-Token'] = $('meta[name="csrf-token"]').attr('content')
|
||||
$httpProvider.defaults.headers.put['X-CSRF-Token'] = $('meta[name="csrf-token"]').attr('content')
|
||||
$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, */*"
|
||||
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
Darkswarm.directive "changeableOrdersAlert", (ChangeableOrdersAlert) ->
|
||||
restrict: "C"
|
||||
scope: true
|
||||
link: (scope, element, attrs) ->
|
||||
scope.alert = ChangeableOrdersAlert
|
||||
@@ -0,0 +1,9 @@
|
||||
Darkswarm.directive "confirmLinkClick", ($window) ->
|
||||
restrict: 'A'
|
||||
scope:
|
||||
confirmMsg: '@confirmLinkClick'
|
||||
link: (scope, elem, attr) ->
|
||||
elem.bind 'click', (event) ->
|
||||
unless confirm(scope.confirmMsg)
|
||||
event.preventDefault()
|
||||
event.stopPropagation()
|
||||
@@ -6,7 +6,11 @@ Darkswarm.directive "ofnOnHand", ->
|
||||
# In cases where this field gets its value from the HTML element rather than the model,
|
||||
# initialise the model with the HTML value.
|
||||
if scope.$eval(attr.ngModel) == undefined
|
||||
ngModel.$setViewValue elem.val()
|
||||
# Don't dirty the model when we do this
|
||||
setDirty = ngModel.$setDirty
|
||||
ngModel.$setDirty = angular.noop
|
||||
ngModel.$setViewValue(elem.val())
|
||||
ngModel.$setDirty = setDirty
|
||||
|
||||
ngModel.$parsers.push (viewValue) ->
|
||||
on_hand = parseInt(attr.ofnOnHand)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
Darkswarm.factory 'Cart', (CurrentOrder, Variants, $timeout, $http, $modal, $rootScope, localStorageService)->
|
||||
Darkswarm.factory 'Cart', (CurrentOrder, Variants, $timeout, $http, $modal, $rootScope, $resource, localStorageService) ->
|
||||
# Handles syncing of current cart/order state to server
|
||||
new class Cart
|
||||
dirty: false
|
||||
@@ -6,11 +6,15 @@ Darkswarm.factory 'Cart', (CurrentOrder, Variants, $timeout, $http, $modal, $roo
|
||||
update_enqueued: false
|
||||
order: CurrentOrder.order
|
||||
line_items: CurrentOrder.order?.line_items || []
|
||||
line_items_finalised: CurrentOrder.order?.finalised_line_items || []
|
||||
|
||||
constructor: ->
|
||||
for line_item in @line_items
|
||||
line_item.variant.line_item = line_item
|
||||
Variants.register line_item.variant
|
||||
for line_item in @line_items_finalised
|
||||
line_item.variant.line_item = line_item
|
||||
Variants.extend line_item.variant
|
||||
|
||||
adjust: (line_item) =>
|
||||
line_item.total_price = line_item.variant.price_with_fees * line_item.quantity
|
||||
@@ -115,3 +119,15 @@ Darkswarm.factory 'Cart', (CurrentOrder, Variants, $timeout, $http, $modal, $roo
|
||||
clear: ->
|
||||
@line_items = []
|
||||
localStorageService.clearAll() # One day this will have to be moar GRANULAR
|
||||
|
||||
removeFinalisedLineItem: (id) =>
|
||||
@line_items_finalised = @line_items_finalised.filter (item) ->
|
||||
item.id != id
|
||||
|
||||
reloadFinalisedLineItems: =>
|
||||
@line_items_finalised = []
|
||||
$resource("/line_items/bought").query (items) =>
|
||||
for line_item in items
|
||||
line_item.variant.line_item = line_item
|
||||
Variants.extend line_item.variant
|
||||
@line_items_finalised = items
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
Darkswarm.factory 'ChangeableOrdersAlert', ($http) ->
|
||||
new class ChangeableOrdersAlert
|
||||
html: ''
|
||||
visible: true
|
||||
|
||||
constructor: ->
|
||||
@reload()
|
||||
|
||||
reload: ->
|
||||
$http.get('/shop/changeable_orders_alert').then (response) =>
|
||||
@html = response.data.trim()
|
||||
|
||||
close: =>
|
||||
@visible = false
|
||||
@@ -3,10 +3,12 @@ Darkswarm.factory 'Orders', (orders_by_distributor, currencyConfig, CurrentHub,
|
||||
constructor: ->
|
||||
# Populate Orders.orders from json in page.
|
||||
@orders_by_distributor = orders_by_distributor
|
||||
@changeable_orders = []
|
||||
@currency_symbol = currencyConfig.symbol
|
||||
|
||||
for distributor in @orders_by_distributor
|
||||
@updateRunningBalance(distributor.distributed_orders)
|
||||
@findChangeableOrders(distributor.distributed_orders)
|
||||
@updateRunningBalance(distributor.distributed_orders)
|
||||
|
||||
|
||||
updateRunningBalance: (orders) ->
|
||||
@@ -14,3 +16,7 @@ Darkswarm.factory 'Orders', (orders_by_distributor, currencyConfig, CurrentHub,
|
||||
balances = orders.slice(i,orders.length).map (o) -> parseFloat(o.outstanding_balance)
|
||||
running_balance = balances.reduce (a,b) -> a+b
|
||||
order.running_balance = running_balance.toFixed(2)
|
||||
|
||||
findChangeableOrders: (orders) ->
|
||||
for order in orders when order.changes_allowed
|
||||
@changeable_orders.push(order)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
%div{ ng: { show: "data.length > limit" } }
|
||||
%input{ type: 'button', value: t(:show_more), ng: { click: 'limit = limit + increment' } }
|
||||
or
|
||||
%input{ type: 'button', value: t(:show_more_with_more, num: '{{ data.length - limit }}'), ng: { click: 'limit = data.length' } }
|
||||
%input{ type: 'button', value: t(:show_all_with_more, num: '{{ data.length - limit }}'), ng: { click: 'limit = data.length' } }
|
||||
|
||||
3
app/assets/stylesheets/admin/enterprises.css.scss
Normal file
3
app/assets/stylesheets/admin/enterprises.css.scss
Normal file
@@ -0,0 +1,3 @@
|
||||
form[name="enterprise_form"] div.row.warning {
|
||||
color: #DA7F52;
|
||||
}
|
||||
@@ -19,7 +19,7 @@
|
||||
height: 100px
|
||||
width: 100px
|
||||
margin-right: 12px
|
||||
|
||||
|
||||
location
|
||||
@include headingFont
|
||||
@media all and (max-width: 768px)
|
||||
@@ -30,7 +30,7 @@
|
||||
margin-top: 0
|
||||
@media all and (max-width: 768px)
|
||||
margin-bottom: 8px
|
||||
|
||||
|
||||
|
||||
ordercycle
|
||||
text-align: right
|
||||
@@ -47,24 +47,26 @@
|
||||
p
|
||||
max-width: 100%
|
||||
float: right
|
||||
form.custom
|
||||
form.custom
|
||||
text-align: right
|
||||
& > strong
|
||||
line-height: 2.5
|
||||
font-size: 1.29em
|
||||
padding-right: 14px
|
||||
@media all and (max-width: 768px)
|
||||
select
|
||||
select
|
||||
width: inherit
|
||||
display: inline-block
|
||||
border-width: 1px
|
||||
border-color: #999
|
||||
color: #666
|
||||
font-size: 1em
|
||||
font-size: 1em
|
||||
margin-bottom: 0
|
||||
padding: 8px 20px 8px 12px
|
||||
@media all and (max-width: 768px)
|
||||
font-size: 0.875em
|
||||
@media screen and (-webkit-min-device-pixel-ratio:0)
|
||||
font-size: 16px
|
||||
closing
|
||||
@include headingFont
|
||||
@media all and (max-width: 768px)
|
||||
|
||||
@@ -1,16 +1,14 @@
|
||||
@import "branding";
|
||||
@import "mixins";
|
||||
|
||||
.account-summary {
|
||||
color: #4a4a4a;
|
||||
}
|
||||
|
||||
|
||||
.orders {
|
||||
@include sidepaddingSm;
|
||||
|
||||
@include panepadding;
|
||||
|
||||
padding-top: 10px;
|
||||
|
||||
h3 {
|
||||
padding-top: 2em;
|
||||
}
|
||||
margin-top: 50px;
|
||||
margin-bottom: 100px;
|
||||
|
||||
a {
|
||||
color: $clr-brick;
|
||||
@@ -26,6 +24,12 @@
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.active_table_row {
|
||||
h3 {
|
||||
margin-top: 0.5em;
|
||||
}
|
||||
}
|
||||
|
||||
i.ofn-i_059-producer, i.ofn-i_060-producer-reversed {
|
||||
font-size: 3rem;
|
||||
display: inline-block;
|
||||
@@ -61,6 +65,7 @@
|
||||
.transaction-group {}
|
||||
|
||||
table {
|
||||
width: 100%;
|
||||
border-radius: 0.5em 0.5em 0 0;
|
||||
|
||||
tr:nth-of-type(even) {
|
||||
|
||||
@@ -33,7 +33,9 @@
|
||||
|
||||
@-webkit-keyframes slideOutUp {
|
||||
0% {
|
||||
opacity: 1;
|
||||
-webkit-transform: translateY(0);
|
||||
-ms-transform: translateY(0);
|
||||
transform: translateY(0);
|
||||
}
|
||||
|
||||
@@ -46,10 +48,18 @@
|
||||
|
||||
@keyframes slideOutUp {
|
||||
0% {
|
||||
opacity: 1;
|
||||
-webkit-transform: translateY(0);
|
||||
-ms-transform: translateY(0);
|
||||
transform: translateY(0);
|
||||
}
|
||||
|
||||
100% {
|
||||
opacity: 0;
|
||||
-webkit-transform: translateY(-20px);
|
||||
-ms-transform: translateY(-20px);
|
||||
transform: translateY(-20px);
|
||||
}
|
||||
}
|
||||
|
||||
@-webkit-keyframes fadeIn {
|
||||
|
||||
@@ -6,23 +6,25 @@
|
||||
background-color: #e1f0f5
|
||||
padding: 1em
|
||||
width: 100%
|
||||
border: none
|
||||
color: inherit
|
||||
|
||||
checkout
|
||||
display: block
|
||||
|
||||
@media all and (max-width: 640px)
|
||||
&.row .row
|
||||
@media all and (max-width: 640px)
|
||||
&.row .row
|
||||
margin-left: 0
|
||||
margin-right: 0
|
||||
|
||||
|
||||
orderdetails
|
||||
.button, table
|
||||
width: 100%
|
||||
@media all and (max-width: 640px)
|
||||
@media all and (max-width: 640px)
|
||||
form.edit_order
|
||||
border: 1px solid $disabled-bright
|
||||
margin-bottom: 2rem
|
||||
|
||||
|
||||
#details, #billing, #shipping, #payment
|
||||
border: 0
|
||||
margin: 1em 0
|
||||
@@ -34,20 +36,20 @@ checkout
|
||||
margin: 0
|
||||
padding: 0.65em
|
||||
background: #f7f7f7
|
||||
|
||||
.label
|
||||
|
||||
.label
|
||||
font-size: 1em
|
||||
padding: 0.3rem 0.35rem 0.275rem
|
||||
|
||||
// Logic to turn on & off the alerts for success against each fieldset
|
||||
|
||||
label, label.alert, label.success, &.valid label.alert, &.dirty label.success
|
||||
label, label.alert, label.success, &.valid label.alert, &.dirty label.success
|
||||
display: none
|
||||
|
||||
&.dirty label.alert
|
||||
&.dirty label.alert
|
||||
display: inline
|
||||
&.dirty.valid label.alert
|
||||
display: none
|
||||
&.dirty.valid label.alert
|
||||
display: none
|
||||
&.valid label.success
|
||||
display: inline
|
||||
|
||||
@@ -60,7 +62,7 @@ checkout
|
||||
text-align: left
|
||||
|
||||
// Logic to swap out up / down accordion icons
|
||||
//Foundation overrides
|
||||
//Foundation overrides
|
||||
dd > a
|
||||
@include csstrans
|
||||
background: $disabled-light !important
|
||||
@@ -68,7 +70,7 @@ checkout
|
||||
dd > a:hover
|
||||
background: $disabled-v-dark !important
|
||||
color: white
|
||||
|
||||
|
||||
dd
|
||||
span.accordion-up
|
||||
display: none
|
||||
@@ -79,4 +81,3 @@ checkout
|
||||
display: inline
|
||||
span.accordion-down
|
||||
display: none
|
||||
|
||||
|
||||
@@ -110,6 +110,10 @@
|
||||
}
|
||||
}
|
||||
|
||||
.alert-box.changeable-orders-alert {
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
|
||||
.alert-box.shopfront-message {
|
||||
border: 2px solid $clr-turquoise;
|
||||
border-radius: 5px;
|
||||
|
||||
@@ -72,11 +72,35 @@
|
||||
|
||||
// Shopping cart
|
||||
#cart-detail {
|
||||
.cart-item-delete {
|
||||
a.delete {
|
||||
.cart-item-delete, .bought-item-delete {
|
||||
a {
|
||||
font-size: 1.125em;
|
||||
}
|
||||
}
|
||||
|
||||
.out-of-stock {
|
||||
color: $clr-brick;
|
||||
}
|
||||
|
||||
button, .button {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.toggle-bought {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
tr.bought td {
|
||||
color: $med-grey;
|
||||
|
||||
h5 {
|
||||
color: $med-grey;
|
||||
}
|
||||
|
||||
.already-confirmed {
|
||||
float: right;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.item-thumb-image {
|
||||
@@ -90,9 +114,3 @@
|
||||
height: 36px;
|
||||
}
|
||||
}
|
||||
|
||||
#edit-cart {
|
||||
button, .button {
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
|
||||
48
app/controllers/line_items_controller.rb
Normal file
48
app/controllers/line_items_controller.rb
Normal file
@@ -0,0 +1,48 @@
|
||||
class LineItemsController < BaseController
|
||||
respond_to :json
|
||||
|
||||
before_filter :load_line_item, only: :destroy
|
||||
|
||||
def bought
|
||||
respond_with bought_items, each_serializer: Api::LineItemSerializer
|
||||
end
|
||||
|
||||
def destroy
|
||||
authorize! :destroy, @line_item
|
||||
destroy_with_lock @line_item
|
||||
respond_with(@line_item)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def load_line_item
|
||||
@line_item = Spree::LineItem.find_by_id(params[:id])
|
||||
not_found unless @line_item
|
||||
end
|
||||
|
||||
# List all items the user already ordered in the current order cycle
|
||||
def bought_items
|
||||
return [] unless current_order_cycle && spree_current_user && current_distributor
|
||||
current_order_cycle.items_bought_by_user(spree_current_user, current_distributor)
|
||||
end
|
||||
|
||||
def unauthorized
|
||||
status = spree_current_user ? 403 : 401
|
||||
render nothing: true, status: status and return
|
||||
end
|
||||
|
||||
def not_found
|
||||
render nothing: true, status: 404 and return
|
||||
end
|
||||
|
||||
def destroy_with_lock(item)
|
||||
order = item.order
|
||||
order.with_lock do
|
||||
item.destroy
|
||||
order.update_shipping_fees!
|
||||
order.update_payment_fees!
|
||||
order.update_distribution_charge!
|
||||
order.create_tax_charge!
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -37,6 +37,10 @@ class ShopController < BaseController
|
||||
end
|
||||
end
|
||||
|
||||
def changeable_orders_alert
|
||||
render layout: false
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def filtered_json(products_json)
|
||||
|
||||
@@ -12,6 +12,9 @@ Spree::Admin::OrdersController.class_eval do
|
||||
|
||||
before_filter :load_distribution_choices, only: [:new, :edit, :update]
|
||||
|
||||
# Ensure that the distributor is set for an order when
|
||||
before_filter :ensure_distribution, only: :new
|
||||
|
||||
# After updating an order, the fees should be updated as well
|
||||
# Currently, adding or deleting line items does not trigger updating the
|
||||
# fees! This is a quick fix for that.
|
||||
@@ -131,4 +134,16 @@ Spree::Admin::OrdersController.class_eval do
|
||||
ocs.closed +
|
||||
ocs.undated
|
||||
end
|
||||
|
||||
def ensure_distribution
|
||||
unless @order
|
||||
@order = Spree::Order.new
|
||||
@order.generate_order_number
|
||||
@order.save!
|
||||
end
|
||||
unless @order.distribution_set?
|
||||
render 'set_distribution', locals: { order: @order }
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
@@ -231,7 +231,7 @@ Spree::Admin::ReportsController.class_eval do
|
||||
@report_types = REPORT_TYPES[:orders_and_fulfillment]
|
||||
@report_type = params[:report_type]
|
||||
|
||||
@include_blank = 'All'
|
||||
@include_blank = I18n.t(:all)
|
||||
|
||||
# -- Build Report with Order Grouper
|
||||
@report = OpenFoodNetwork::OrdersAndFulfillmentsReport.new spree_current_user, params
|
||||
|
||||
@@ -8,10 +8,12 @@ Spree::OrdersController.class_eval do
|
||||
prepend_before_filter :require_order_cycle, only: :edit
|
||||
prepend_before_filter :require_distributor_chosen, only: :edit
|
||||
before_filter :check_hub_ready_for_checkout, only: :edit
|
||||
before_filter :check_at_least_one_line_item, only: :update
|
||||
|
||||
include OrderCyclesHelper
|
||||
layout 'darkswarm'
|
||||
|
||||
respond_to :json
|
||||
|
||||
# Patching to redirect to shop if order is empty
|
||||
def edit
|
||||
@@ -32,7 +34,7 @@ Spree::OrdersController.class_eval do
|
||||
|
||||
def update
|
||||
@insufficient_stock_lines = []
|
||||
@order = current_order
|
||||
@order = order_to_update
|
||||
unless @order
|
||||
flash[:error] = t(:order_not_found)
|
||||
redirect_to root_path and return
|
||||
@@ -43,12 +45,19 @@ Spree::OrdersController.class_eval do
|
||||
|
||||
render :edit and return unless apply_coupon_code
|
||||
|
||||
fire_event('spree.order.contents_changed')
|
||||
if @order == current_order
|
||||
fire_event('spree.order.contents_changed')
|
||||
else
|
||||
@order.update_distribution_charge!
|
||||
end
|
||||
|
||||
respond_with(@order) do |format|
|
||||
format.html do
|
||||
if params.has_key?(:checkout)
|
||||
@order.next_transition.run_callbacks if @order.cart?
|
||||
redirect_to checkout_state_path(@order.checkout_steps.first)
|
||||
elsif @order.complete?
|
||||
redirect_to order_path(@order)
|
||||
else
|
||||
redirect_to cart_path
|
||||
end
|
||||
@@ -162,6 +171,18 @@ Spree::OrdersController.class_eval do
|
||||
@order_cycle = OrderCycle.find session[:expired_order_cycle_id]
|
||||
end
|
||||
|
||||
def cancel
|
||||
@order = Spree::Order.find_by_number!(params[:id])
|
||||
authorize! :cancel, @order
|
||||
|
||||
if @order.cancel
|
||||
flash[:success] = I18n.t(:orders_your_order_has_been_cancelled)
|
||||
else
|
||||
flash[:error] = I18n.t(:orders_could_not_cancel)
|
||||
end
|
||||
redirect_to request.referer || order_path(@order)
|
||||
end
|
||||
|
||||
|
||||
private
|
||||
|
||||
@@ -202,4 +223,30 @@ Spree::OrdersController.class_eval do
|
||||
def wrap_json_infinity(n)
|
||||
n == Float::INFINITY ? 2147483647 : n
|
||||
end
|
||||
|
||||
def order_to_update
|
||||
return @order_to_update if defined? @order_to_update
|
||||
return @order_to_update = current_order unless params[:id]
|
||||
@order_to_update = changeable_order_from_number
|
||||
end
|
||||
|
||||
# If a specific order is requested, return it if it is COMPLETE and
|
||||
# changes are allowed and the user has access. Return nil if not.
|
||||
def changeable_order_from_number
|
||||
order = Spree::Order.complete.find_by_number(params[:id])
|
||||
return nil unless order.andand.changes_allowed? && can?(:update, order)
|
||||
order
|
||||
end
|
||||
|
||||
def check_at_least_one_line_item
|
||||
return unless order_to_update.andand.complete?
|
||||
|
||||
items = params[:order][:line_items_attributes]
|
||||
.andand.select{ |k,attrs| attrs["quantity"].to_i > 0 }
|
||||
|
||||
if items.empty?
|
||||
flash[:error] = I18n.t(:orders_cannot_remove_the_final_item)
|
||||
redirect_to order_path(order_to_update)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -16,7 +16,7 @@ module CheckoutHelper
|
||||
enterprise_fee_adjustments = adjustments.select { |a| a.originator_type == 'EnterpriseFee' && a.source_type != 'Spree::LineItem' }
|
||||
adjustments.reject! { |a| a.originator_type == 'EnterpriseFee' && a.source_type != 'Spree::LineItem' }
|
||||
unless exclude.include? :admin_and_handling
|
||||
adjustments << Spree::Adjustment.new(label: 'Admin & Handling', amount: enterprise_fee_adjustments.sum(&:amount))
|
||||
adjustments << Spree::Adjustment.new(label: I18n.t(:orders_form_admin), amount: enterprise_fee_adjustments.sum(&:amount))
|
||||
end
|
||||
|
||||
adjustments
|
||||
@@ -55,7 +55,6 @@ module CheckoutHelper
|
||||
|
||||
def display_adjustment_tax_rates(adjustment)
|
||||
tax_rates = adjustment.tax_rates
|
||||
return "" if adjustment.amount == adjustment.included_tax
|
||||
tax_rates.map { |tr| number_to_percentage(tr.amount * 100, :precision => 1) }.join(", ")
|
||||
end
|
||||
|
||||
|
||||
@@ -88,4 +88,12 @@ module EnterprisesHelper
|
||||
def remaining_trial_days(enterprise)
|
||||
distance_of_time_in_words(Time.zone.now, enterprise.shop_trial_start_date + Spree::Config[:shop_trial_length_days].days)
|
||||
end
|
||||
|
||||
def order_changes_allowed?
|
||||
current_order.andand.distributor.andand.allow_order_changes?
|
||||
end
|
||||
|
||||
def show_bought_items?
|
||||
order_changes_allowed? && current_order.finalised_line_items.present?
|
||||
end
|
||||
end
|
||||
|
||||
@@ -16,5 +16,31 @@ module Spree
|
||||
def cart_count
|
||||
current_order.andand.line_items.andand.count || 0
|
||||
end
|
||||
|
||||
def changeable_orders
|
||||
# Only returns open order for the current user + shop + oc combo
|
||||
return @changeable_orders unless @changeable_orders.nil?
|
||||
return @changeable_orders = [] unless spree_current_user && current_distributor && current_order_cycle
|
||||
return @changeable_orders = [] unless current_distributor.allow_order_changes?
|
||||
@changeable_orders = Spree::Order.complete.where(
|
||||
state: 'complete',
|
||||
user_id: spree_current_user.id,
|
||||
distributor_id: current_distributor.id,
|
||||
order_cycle_id: current_order_cycle.id)
|
||||
end
|
||||
|
||||
def changeable_orders_link_path
|
||||
changeable_orders.one? ? spree.order_path(changeable_orders.first) : spree.account_path
|
||||
end
|
||||
|
||||
def shop_changeable_orders_alert_html
|
||||
return "" unless changeable_orders.any?
|
||||
t(:shop_changeable_orders_alert_html,
|
||||
count: changeable_orders.count,
|
||||
path: changeable_orders_link_path,
|
||||
order: changeable_orders.first.number,
|
||||
shop: current_distributor.name,
|
||||
oc_close: l(current_order_cycle.orders_close_at, format: "%A, %b %d, %Y @ %H:%M"))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -4,7 +4,7 @@ module OpenFoodNetwork
|
||||
attr_accessible :preferred_per_kg
|
||||
|
||||
def self.description
|
||||
"Weight (per kg)"
|
||||
I18n.t('spree.weight')
|
||||
end
|
||||
|
||||
def compute(object)
|
||||
|
||||
@@ -250,6 +250,13 @@ class OrderCycle < ActiveRecord::Base
|
||||
OpenFoodNetwork::ProductsCache.order_cycle_changed self
|
||||
end
|
||||
|
||||
def items_bought_by_user(user, distributor)
|
||||
# The Spree::Order.complete scope only checks for completed_at date, does not ensure state is "complete"
|
||||
orders = Spree::Order.complete.where(state: "complete", user_id: user, distributor_id: distributor, order_cycle_id: self)
|
||||
scoper = OpenFoodNetwork::ScopeVariantToHub.new(distributor)
|
||||
items = Spree::LineItem.joins(:order).merge(orders)
|
||||
items.each { |li| scoper.scope(li.variant) }
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ class AbilityDecorator
|
||||
# All abilites are allocated from this initialiser, currently in 5 chunks.
|
||||
# Spree also defines other abilities.
|
||||
def initialize(user)
|
||||
add_shopping_abilities user
|
||||
add_base_abilities user if is_new_user? user
|
||||
add_enterprise_management_abilities user if can_manage_enterprises? user
|
||||
add_group_management_abilities user if can_manage_groups? user
|
||||
@@ -50,6 +51,16 @@ class AbilityDecorator
|
||||
can_manage_enterprises? user
|
||||
end
|
||||
|
||||
def add_shopping_abilities(user)
|
||||
can [:destroy], Spree::LineItem do |item|
|
||||
user == item.order.user &&
|
||||
item.order.changes_allowed?
|
||||
end
|
||||
can [:cancel], Spree::Order do |order|
|
||||
order.user == user
|
||||
end
|
||||
end
|
||||
|
||||
# New users can create an enterprise, and gain other permissions from doing this.
|
||||
def add_base_abilities(user)
|
||||
can [:create], Enterprise
|
||||
@@ -184,6 +195,7 @@ class AbilityDecorator
|
||||
can [:admin , :for_line_items], Enterprise
|
||||
can [:admin, :index, :create], Spree::LineItem
|
||||
can [:destroy, :update], Spree::LineItem do |item|
|
||||
order = item.order
|
||||
user.admin? || user.enterprises.include?(order.distributor) || order.order_cycle.andand.coordinated_by?(user)
|
||||
end
|
||||
|
||||
|
||||
@@ -34,6 +34,7 @@ module Spree
|
||||
included_tax > 0
|
||||
end
|
||||
|
||||
# @return [Array<Spree::TaxRate>]
|
||||
def tax_rates
|
||||
case originator
|
||||
when Spree::TaxRate
|
||||
@@ -47,14 +48,17 @@ module Spree
|
||||
return originator.tax_category ? originator.tax_category.tax_rates.match(source) : []
|
||||
end
|
||||
else
|
||||
[find_closest_tax_rate_from_included_tax]
|
||||
find_closest_tax_rates_from_included_tax
|
||||
end
|
||||
end
|
||||
|
||||
def find_closest_tax_rate_from_included_tax
|
||||
# shipping fees and adjustments created from the admin panel have
|
||||
# taxes set at creation in the included_tax field without relation
|
||||
# to the corresponding TaxRate, so we look for the closest one
|
||||
def find_closest_tax_rates_from_included_tax
|
||||
approximation = (included_tax / (amount - included_tax))
|
||||
return nil if approximation.infinite? or approximation.zero?
|
||||
Spree::TaxRate.order("ABS(amount - #{approximation})").first
|
||||
return [] if approximation.infinite? or approximation.zero?
|
||||
[Spree::TaxRate.order("ABS(amount - #{approximation})").first]
|
||||
end
|
||||
|
||||
|
||||
|
||||
@@ -94,8 +94,41 @@ Spree::LineItem.class_eval do
|
||||
(final_weight_volume || 0) / quantity
|
||||
end
|
||||
|
||||
# MONKEYPATCH of Spree method
|
||||
# Enables scoping of variant to hub/shop, stock drawn down from inventory
|
||||
def update_inventory
|
||||
return true unless order.completed?
|
||||
|
||||
scoper.scope(variant) # this line added
|
||||
|
||||
if new_record?
|
||||
Spree::InventoryUnit.increase(order, variant, quantity)
|
||||
elsif old_quantity = self.changed_attributes['quantity']
|
||||
if old_quantity < quantity
|
||||
Spree::InventoryUnit.increase(order, variant, (quantity - old_quantity))
|
||||
elsif old_quantity > quantity
|
||||
Spree::InventoryUnit.decrease(order, variant, (old_quantity - quantity))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# MONKEYPATCH of Spree method
|
||||
# Enables scoping of variant to hub/shop, stock replaced to inventory
|
||||
def remove_inventory
|
||||
return true unless order.completed?
|
||||
|
||||
scoper.scope(variant) # this line added
|
||||
|
||||
Spree::InventoryUnit.decrease(order, variant, quantity)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def scoper
|
||||
return @scoper unless @scoper.nil?
|
||||
@scoper = OpenFoodNetwork::ScopeVariantToHub.new(order.distributor)
|
||||
end
|
||||
|
||||
def calculate_final_weight_volume
|
||||
if final_weight_volume.present? && quantity_was > 0
|
||||
self.final_weight_volume = final_weight_volume * quantity / quantity_was
|
||||
|
||||
@@ -9,7 +9,7 @@ end
|
||||
|
||||
Spree::Order.class_eval do
|
||||
belongs_to :order_cycle
|
||||
belongs_to :distributor, :class_name => 'Enterprise'
|
||||
belongs_to :distributor, class_name: 'Enterprise'
|
||||
belongs_to :cart
|
||||
belongs_to :customer
|
||||
|
||||
@@ -21,6 +21,9 @@ Spree::Order.class_eval do
|
||||
before_validation :associate_customer, unless: :customer_id?
|
||||
before_validation :ensure_customer, unless: :customer_is_valid?
|
||||
|
||||
before_save :update_shipping_fees!, if: :complete?
|
||||
before_save :update_payment_fees!, if: :complete?
|
||||
|
||||
checkout_flow do
|
||||
go_to_state :address
|
||||
go_to_state :delivery
|
||||
@@ -39,7 +42,6 @@ Spree::Order.class_eval do
|
||||
remove_transition :from => :delivery, :to => :confirm
|
||||
end
|
||||
|
||||
|
||||
# -- Scopes
|
||||
scope :managed_by, lambda { |user|
|
||||
if user.has_spree_role?('admin')
|
||||
@@ -88,7 +90,7 @@ Spree::Order.class_eval do
|
||||
unless self.order_cycle == order_cycle
|
||||
self.order_cycle = order_cycle
|
||||
self.distributor = nil unless order_cycle.nil? || order_cycle.has_distributor?(distributor)
|
||||
self.empty!
|
||||
empty!
|
||||
save!
|
||||
end
|
||||
end
|
||||
@@ -99,7 +101,6 @@ Spree::Order.class_eval do
|
||||
current_item.andand.destroy
|
||||
end
|
||||
|
||||
|
||||
# Overridden to support max_quantity
|
||||
def add_variant(variant, quantity = 1, max_quantity = nil, currency = nil)
|
||||
line_items(:reload)
|
||||
@@ -126,7 +127,7 @@ Spree::Order.class_eval do
|
||||
current_item.currency = currency unless currency.nil?
|
||||
current_item.save
|
||||
else
|
||||
current_item = Spree::LineItem.new(:quantity => quantity, max_quantity: max_quantity)
|
||||
current_item = Spree::LineItem.new(quantity: quantity, max_quantity: max_quantity)
|
||||
current_item.variant = variant
|
||||
if currency
|
||||
current_item.currency = currency unless currency.nil?
|
||||
@@ -134,13 +135,31 @@ Spree::Order.class_eval do
|
||||
else
|
||||
current_item.price = variant.price
|
||||
end
|
||||
self.line_items << current_item
|
||||
line_items << current_item
|
||||
end
|
||||
|
||||
self.reload
|
||||
reload
|
||||
current_item
|
||||
end
|
||||
|
||||
# After changing line items of a completed order
|
||||
def update_shipping_fees!
|
||||
shipments.each do |shipment|
|
||||
next if shipment.shipped?
|
||||
update_adjustment! shipment.adjustment
|
||||
shipment.save # updates included tax
|
||||
end
|
||||
end
|
||||
|
||||
# After changing line items of a completed order
|
||||
def update_payment_fees!
|
||||
payments.each do |payment|
|
||||
next if payment.completed?
|
||||
update_adjustment! payment.adjustment
|
||||
payment.save
|
||||
end
|
||||
end
|
||||
|
||||
def cap_quantity_at_stock!
|
||||
line_items.each &:cap_quantity_at_stock!
|
||||
end
|
||||
@@ -158,6 +177,10 @@ Spree::Order.class_eval do
|
||||
save!
|
||||
end
|
||||
|
||||
def distribution_set?
|
||||
distributor && order_cycle
|
||||
end
|
||||
|
||||
def update_distribution_charge!
|
||||
with_lock do
|
||||
EnterpriseFee.clear_all_adjustments_on_order self
|
||||
@@ -195,6 +218,12 @@ Spree::Order.class_eval do
|
||||
line_items.map(&:variant)
|
||||
end
|
||||
|
||||
# Show already bought line items of this order cycle
|
||||
def finalised_line_items
|
||||
return [] unless order_cycle && user && distributor
|
||||
order_cycle.items_bought_by_user(user, distributor)
|
||||
end
|
||||
|
||||
def admin_and_handling_total
|
||||
adjustments.eligible.where("originator_type = ? AND source_type != ?", 'EnterpriseFee', 'Spree::LineItem').sum(&:amount)
|
||||
end
|
||||
@@ -205,26 +234,26 @@ Spree::Order.class_eval do
|
||||
|
||||
# Does this order have shipments that can be shipped?
|
||||
def ready_to_ship?
|
||||
self.shipments.any?{|s| s.can_ship?}
|
||||
shipments.any?(&:can_ship?)
|
||||
end
|
||||
|
||||
# Ship all pending orders
|
||||
def ship
|
||||
self.shipments.each do |s|
|
||||
shipments.each do |s|
|
||||
s.ship if s.can_ship?
|
||||
end
|
||||
end
|
||||
|
||||
def shipping_tax
|
||||
adjustments(:reload).shipping.sum &:included_tax
|
||||
adjustments(:reload).shipping.sum(&:included_tax)
|
||||
end
|
||||
|
||||
def enterprise_fee_tax
|
||||
adjustments(:reload).enterprise_fee.sum &:included_tax
|
||||
adjustments(:reload).enterprise_fee.sum(&:included_tax)
|
||||
end
|
||||
|
||||
def total_tax
|
||||
(adjustments + price_adjustments).sum &:included_tax
|
||||
(adjustments + price_adjustments).sum(&:included_tax)
|
||||
end
|
||||
|
||||
def tax_adjustments
|
||||
@@ -254,11 +283,12 @@ Spree::Order.class_eval do
|
||||
# Overrride of Spree method, that allows us to send separate confirmation emails to user and shop owners
|
||||
# And separately, to skip sending confirmation email completely for user invoice orders
|
||||
def deliver_order_confirmation_email
|
||||
unless account_invoice?
|
||||
Delayed::Job.enqueue ConfirmOrderJob.new(id)
|
||||
end
|
||||
Delayed::Job.enqueue ConfirmOrderJob.new(id) unless account_invoice?
|
||||
end
|
||||
|
||||
def changes_allowed?
|
||||
complete? && distributor.andand.allow_order_changes? && order_cycle.andand.open?
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
@@ -272,9 +302,9 @@ Spree::Order.class_eval do
|
||||
self.ship_address = distributor.address.clone
|
||||
|
||||
if bill_address
|
||||
self.ship_address.firstname = bill_address.firstname
|
||||
self.ship_address.lastname = bill_address.lastname
|
||||
self.ship_address.phone = bill_address.phone
|
||||
ship_address.firstname = bill_address.firstname
|
||||
ship_address.lastname = bill_address.lastname
|
||||
ship_address.phone = bill_address.phone
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -286,11 +316,11 @@ Spree::Order.class_eval do
|
||||
end
|
||||
|
||||
def product_distribution_for(line_item)
|
||||
line_item.variant.product.product_distribution_for self.distributor
|
||||
line_item.variant.product.product_distribution_for distributor
|
||||
end
|
||||
|
||||
def require_customer?
|
||||
return true unless new_record? or state == 'cart'
|
||||
return true unless new_record? || state == 'cart'
|
||||
end
|
||||
|
||||
def customer_is_valid?
|
||||
@@ -313,4 +343,11 @@ Spree::Order.class_eval do
|
||||
self.customer = Customer.create(enterprise: distributor, email: email_for_customer, user: user, name: customer_name, bill_address: bill_address.andand.clone, ship_address: ship_address.andand.clone)
|
||||
end
|
||||
end
|
||||
|
||||
def update_adjustment!(adjustment)
|
||||
locked = adjustment.locked
|
||||
adjustment.locked = false
|
||||
adjustment.update!(self)
|
||||
adjustment.locked = locked
|
||||
end
|
||||
end
|
||||
|
||||
@@ -37,13 +37,14 @@ Spree::Taxon.class_eval do
|
||||
#
|
||||
# Format: {enterprise_id => [taxon_id, ...]}
|
||||
def self.distributed_taxons(which_taxons=:all)
|
||||
# TODO: Why can't we merge(Spree::Product.with_order_cycles_inner) here?
|
||||
taxons = Spree::Taxon.
|
||||
joins(products: {variants_including_master: {exchanges: :order_cycle}}).
|
||||
merge(Exchange.outgoing).
|
||||
select('spree_taxons.*, exchanges.receiver_id AS enterprise_id')
|
||||
ents_and_vars = ExchangeVariant.joins(exchange: :order_cycle).merge(Exchange.outgoing)
|
||||
.select("DISTINCT variant_id, receiver_id AS enterprise_id")
|
||||
|
||||
taxons = taxons.merge(OrderCycle.active) if which_taxons == :current
|
||||
ents_and_vars = ents_and_vars.merge(OrderCycle.active) if which_taxons == :current
|
||||
|
||||
taxons = Spree::Taxon
|
||||
.select("DISTINCT spree_taxons.id, ents_and_vars.enterprise_id").joins(products: :variants_including_master)
|
||||
.joins("INNER JOIN (#{ents_and_vars.to_sql}) AS ents_and_vars ON spree_variants.id = ents_and_vars.variant_id")
|
||||
|
||||
taxons.inject({}) do |ts, t|
|
||||
ts[t.enterprise_id.to_i] ||= Set.new
|
||||
|
||||
@@ -19,7 +19,7 @@ class VariantOverride < ActiveRecord::Base
|
||||
|
||||
def self.indexed(hub)
|
||||
Hash[
|
||||
for_hubs(hub).map { |vo| [vo.variant, vo] }
|
||||
for_hubs(hub).preload(:variant).map { |vo| [vo.variant, vo] }
|
||||
]
|
||||
end
|
||||
|
||||
@@ -58,6 +58,14 @@ class VariantOverride < ActiveRecord::Base
|
||||
end
|
||||
end
|
||||
|
||||
def increment_stock!(quantity)
|
||||
if stock_overridden?
|
||||
increment! :count_on_hand, quantity
|
||||
else
|
||||
Bugsnag.notify RuntimeError.new "Attempting to decrement stock level on a VariantOverride without a count_on_hand specified."
|
||||
end
|
||||
end
|
||||
|
||||
def default_stock?
|
||||
default_stock.present?
|
||||
end
|
||||
|
||||
@@ -1,38 +1,3 @@
|
||||
/ insert_before "[data-hook='admin_order_form_buttons']"
|
||||
|
||||
%fieldset.no-border-bottom
|
||||
%legend{align: 'center'} Distribution
|
||||
|
||||
- if @order.complete?
|
||||
.alpha.six.columns
|
||||
%p
|
||||
%b Distributor:
|
||||
= f.object.distributor.andand.name || "None"
|
||||
= f.hidden_field :distributor_id
|
||||
.omega.six.columns
|
||||
%p
|
||||
%b Order cycle:
|
||||
= f.object.order_cycle.andand.name || "None"
|
||||
= f.hidden_field :order_cycle_id
|
||||
|
||||
- else
|
||||
.alpha.six.columns
|
||||
.field
|
||||
%label{for: "order_distributor_id"} Distributor
|
||||
%input.ofn-select2.fullwidth{id: "order_distributor_id",
|
||||
type: 'number',
|
||||
name: "order[distributor_id]",
|
||||
"ng-model" => 'distributor_id',
|
||||
data: "shops" }
|
||||
|
||||
.omega.six.columns
|
||||
.field
|
||||
%label{ for: "order_order_cycle_id"} Order Cycle
|
||||
%input.ofn-select2.fullwidth{id: "order_order_cycle_id",
|
||||
type: 'number',
|
||||
name: "order[order_cycle_id]",
|
||||
"ng-model" => 'order_cycle_id',
|
||||
"ng-disabled" => "!distributor_id",
|
||||
data: "orderCycles",
|
||||
text: "name_and_status",
|
||||
filter: "validOrderCycle" }
|
||||
= render partial: 'spree/admin/orders/_form/distribution_fields'
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
/ replace 'code[erb-loud]:contains(\'f.object.variant.display_amount\')'
|
||||
|
||||
= f.object.single_money
|
||||
@@ -0,0 +1,6 @@
|
||||
/ replace "code[erb-loud]:contains(\'error_messages\')"
|
||||
|
||||
-# Suppress errors when manually creating a new order - needs to proceed to edit page
|
||||
-# without having line items (which otherwise gives a validation error)
|
||||
- unless params["suppress_error_msg"]
|
||||
= render partial: "spree/shared/error_messages", :locals => { :target => @order }
|
||||
@@ -1,16 +1,17 @@
|
||||
/ insert_top "[data-hook='admin_product_form_right']"
|
||||
|
||||
= f.field_container :variant_unit do
|
||||
= f.label :variant_unit, 'Variant unit'
|
||||
= f.select :variant_unit, product_variant_unit_options, {:include_blank => true}, {:class => "select2 fullwidth"}
|
||||
= f.error_message_on :variant_unit
|
||||
.variant_units_form{ 'ng-app' => 'admin.products', 'ng-controller' => 'editUnitsCtrl' }
|
||||
|
||||
= f.field_container :variant_unit_scale do
|
||||
= f.label :variant_unit_scale, 'Variant unit scale'
|
||||
= f.text_field :variant_unit_scale
|
||||
= f.error_message_on :variant_unit_scale
|
||||
= f.field_container :units do
|
||||
= f.label :variant_unit_with_scale, :units
|
||||
%select.select2.fullwidth{ id: 'product_variant_unit_with_scale', 'ng-model' => 'variant_unit_with_scale', 'ng-change' => 'setFields()', 'ng-options' => 'unit[1] as unit[0] for unit in variant_unit_options' }
|
||||
%option{'value' => ''}
|
||||
|
||||
= f.field_container :variant_unit_name do
|
||||
= f.label :variant_unit_name, 'Variant unit name'
|
||||
= f.text_field :variant_unit_name
|
||||
= f.error_message_on :variant_unit_name
|
||||
= f.text_field :variant_unit, {'id' => 'variant_unit', 'ng-value' => 'product.variant_unit', 'hidden' => true}
|
||||
= f.text_field :variant_unit_scale, {'id' => 'variant_unit_scale', 'ng-value' => 'product.variant_unit_scale', 'hidden' => true}
|
||||
|
||||
.variant_unit_name{'ng-show' => 'product.variant_unit == "items"'}
|
||||
= f.field_container :variant_unit_name do
|
||||
= f.label :variant_unit_name, 'Variant unit name'
|
||||
= f.text_field :variant_unit_name, {placeholder: t('admin.products.unit_name_placeholder')}
|
||||
= f.error_message_on :variant_unit_name
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
.three.columns.omega{ 'ng-show' => "product.variant_unit_with_scale == 'items'" }
|
||||
= f.field_container :unit_name do
|
||||
= f.label :product_variant_unit_name, t(:unit_name)
|
||||
%input.fullwidth{ id: 'product_variant_unit_name','ng-model' => 'product.variant_unit_name', :name => 'product[variant_unit_name]', :placeholder => 'eg. bunches', :type => 'text' }
|
||||
%input.fullwidth{ id: 'product_variant_unit_name','ng-model' => 'product.variant_unit_name', :name => 'product[variant_unit_name]', :placeholder => t('admin.products.unit_name_placeholder'), :type => 'text' }
|
||||
.twelve.columns.alpha
|
||||
.six.columns.alpha
|
||||
= render 'spree/admin/products/primary_taxon_form', f: f
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
/ replace_contents 'tr[data-hook="order_details_line_item_row"] td.price'
|
||||
|
||||
= item.single_display_amount
|
||||
@@ -1,3 +1,3 @@
|
||||
/ insert_bottom "[data-hook='admin_product_sub_tabs']"
|
||||
|
||||
= tab :variant_overrides, label: "Inventory", url: main_app.admin_inventory_path, match_path: '/inventory'
|
||||
= tab :variant_overrides, url: main_app.admin_inventory_path, match_path: '/inventory'
|
||||
|
||||
@@ -1,10 +1,13 @@
|
||||
/ insert_top "[data-hook='admin_variant_form_fields']"
|
||||
|
||||
- if product_has_variant_unit_option_type?(@product)
|
||||
.field{"data-hook" => "unit_value"}
|
||||
= f.label :unit_value, "Unit Value"
|
||||
= f.text_field :unit_value, class: "fullwidth"
|
||||
- if @product.variant_unit != 'items'
|
||||
.field{"data-hook" => "unit_value", 'ng-controller' => 'variantUnitsCtrl'}
|
||||
= f.label :unit_value, "#{t('admin.'+@product.variant_unit)} ({{unitName(#{@product.variant_unit_scale}, '#{@product.variant_unit}')}})"
|
||||
= hidden_field_tag 'product_variant_unit_scale', @product.variant_unit_scale
|
||||
= text_field_tag :unit_value_human, nil, {class: "fullwidth", 'ng-model' => 'unit_value_human', 'ng-change' => 'updateValue()'}
|
||||
= f.text_field :unit_value, {hidden: true, 'ng-value' => 'unit_value'}
|
||||
|
||||
.field{"data-hook" => "unit_description"}
|
||||
= f.label :unit_description, "Unit Description"
|
||||
= f.text_field :unit_description, class: "fullwidth"
|
||||
.field{"data-hook" => "unit_description"}
|
||||
= f.label :unit_description, "Unit Description"
|
||||
= f.text_field :unit_description, class: "fullwidth", placeholder: t('admin.products.unit_name_placeholder')
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
/ replace "[data-hook='admin_variant_form_additional_fields']"
|
||||
|
||||
.right.six.columns.omega.label-block{"data-hook" => "admin_variant_form_additional_fields"}
|
||||
- if @product.variant_unit != 'weight'
|
||||
.field{"data-hook" => 'weight'}
|
||||
= f.label 'weight', t('weight')+' (kg)'
|
||||
- value = number_with_precision(@variant.weight, :precision => 2)
|
||||
= f.text_field 'weight', :value => value, :class => 'fullwidth'
|
||||
|
||||
- [:height, :width, :depth].each do |field|
|
||||
.field{"data-hook" => field}
|
||||
= f.label field, t(field)
|
||||
- value = number_with_precision(@variant.send(field), :precision => 2)
|
||||
= f.text_field field, :value => value, :class => 'fullwidth'
|
||||
@@ -4,7 +4,7 @@ class Api::Admin::EnterpriseSerializer < ActiveModel::Serializer
|
||||
attributes :preferred_shopfront_message, :preferred_shopfront_closed_message, :preferred_shopfront_taxon_order, :preferred_shopfront_order_cycle_order
|
||||
attributes :preferred_product_selection_from_inventory_only
|
||||
attributes :owner, :users, :tag_groups, :default_tag_group
|
||||
attributes :require_login
|
||||
attributes :require_login, :allow_guest_orders, :allow_order_changes
|
||||
|
||||
has_one :owner, serializer: Api::Admin::UserSerializer
|
||||
has_many :users, serializer: Api::Admin::UserSerializer
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
class Api::CurrentOrderSerializer < ActiveModel::Serializer
|
||||
attributes :id, :item_total, :email, :shipping_method_id,
|
||||
:display_total, :payment_method_id
|
||||
:display_total, :payment_method_id
|
||||
|
||||
has_one :bill_address, serializer: Api::AddressSerializer
|
||||
has_one :ship_address, serializer: Api::AddressSerializer
|
||||
|
||||
has_many :line_items, serializer: Api::LineItemSerializer
|
||||
has_many :finalised_line_items, serializer: Api::LineItemSerializer
|
||||
|
||||
def payment_method_id
|
||||
object.payments.first.andand.payment_method_id
|
||||
|
||||
@@ -1,11 +1,26 @@
|
||||
module Api
|
||||
class OrderSerializer < ActiveModel::Serializer
|
||||
attributes :number, :completed_at, :total, :state, :shipment_state, :payment_state, :outstanding_balance, :payments, :path
|
||||
attributes :number, :completed_at, :total, :state, :shipment_state, :payment_state
|
||||
attributes :outstanding_balance, :payments, :path, :cancel_path, :changes_allowed, :changes_allowed_until
|
||||
attributes :shop_name, :item_count
|
||||
|
||||
has_many :payments, serializer: Api::PaymentSerializer
|
||||
|
||||
def shop_name
|
||||
object.distributor.andand.name
|
||||
end
|
||||
|
||||
def item_count
|
||||
object.line_items.sum(&:quantity)
|
||||
end
|
||||
|
||||
def completed_at
|
||||
object.completed_at.blank? ? "" : I18n.l(object.completed_at, format: :long)
|
||||
object.completed_at.blank? ? "" : I18n.l(object.completed_at, format: "%b %d, %Y %H:%M")
|
||||
end
|
||||
|
||||
def changes_allowed_until
|
||||
return I18n.t(:not_allowed) unless object.changes_allowed?
|
||||
I18n.l(object.order_cycle.andand.orders_close_at, format: "%b %d, %Y %H:%M")
|
||||
end
|
||||
|
||||
def total
|
||||
@@ -25,7 +40,16 @@ module Api
|
||||
end
|
||||
|
||||
def path
|
||||
Spree::Core::Engine.routes_url_helpers.order_url(object.number, only_path: true)
|
||||
Spree::Core::Engine.routes_url_helpers.order_path(object)
|
||||
end
|
||||
|
||||
def cancel_path
|
||||
return nil unless object.changes_allowed?
|
||||
Spree::Core::Engine.routes_url_helpers.cancel_order_path(object)
|
||||
end
|
||||
|
||||
def changes_allowed
|
||||
object.changes_allowed?
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
class Api::VariantSerializer < ActiveModel::Serializer
|
||||
attributes :id, :is_master, :count_on_hand, :name_to_display, :unit_to_display
|
||||
attributes :options_text, :on_demand, :price, :fees, :price_with_fees, :product_name
|
||||
attributes :tag_list
|
||||
|
||||
def price
|
||||
object.price
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
%col{ width: '62.5%' }
|
||||
%col{ width: '12.5%' }
|
||||
%thead
|
||||
%th Date
|
||||
%th= t('admin.date')
|
||||
%th= t(:description)
|
||||
%th= t(:charge)
|
||||
- if order = invoice.order
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
.filter_select.five.columns.alpha
|
||||
%label{ :for => 'quick_search', ng: {class: '{disabled: !shop_id}'} }=t('admin.quick_search')
|
||||
%br
|
||||
%input.fullwidth{ :type => "text", :id => 'quick_search', ng: { model: 'quickSearch', disabled: '!shop_id' }, :placeholder => "Search by email/code..." }
|
||||
%input.fullwidth{ :type => "text", :id => 'quick_search', ng: { model: 'quickSearch', disabled: '!shop_id' }, :placeholder => t('.search_by_email') }
|
||||
.filter_select.four.columns
|
||||
%label{ :for => 'hub_id', ng: { bind: "shop_id ? '#{t('admin.shop')}' : '#{t('admin.variant_overrides.index.select_a_shop')}'" } }
|
||||
%br
|
||||
@@ -94,6 +94,6 @@
|
||||
|
||||
-# %show-more.text-center{ data: "filteredCustomers", limit: "customerLimit", increment: "20" }
|
||||
%div.text-center{ ng: { show: "filteredCustomers.length > customerLimit" } }
|
||||
%input{ type: 'button', value: 'Show More', ng: { click: 'customerLimit = customerLimit + 20' } }
|
||||
%input{ type: 'button', value: t(:show_more), ng: { click: 'customerLimit = customerLimit + 20' } }
|
||||
or
|
||||
%input{ type: 'button', value: "Show All ({{ filteredCustomers.length - customerLimit }} More)", ng: { click: 'customerLimit = filteredCustomers.length' } }
|
||||
%input{ type: 'button', value: t(:show_all_with_more, num: '{{ filteredCustomers.length - customerLimit }}'), ng: { click: 'customerLimit = filteredCustomers.length' } }
|
||||
|
||||
@@ -23,11 +23,11 @@
|
||||
= f.label :charges_sales_tax, t(:say_no), value: 'false'
|
||||
.row
|
||||
.alpha.three.columns
|
||||
= f.label :display_invoice_logo, 'Display logo in invoices'
|
||||
= f.label :display_invoice_logo, t('.display_invoice_logo')
|
||||
.omega.eight.columns
|
||||
= f.check_box :display_invoice_logo
|
||||
.row
|
||||
.alpha.three.columns
|
||||
= f.label :invoice_text, 'Add customized text at the end of invoices'
|
||||
= f.label :invoice_text, t('.invoice_text')
|
||||
.omega.eight.columns
|
||||
= f.text_area :invoice_text, style: "width: 100%; height: 100px;"
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
%tr{ ng: { controller: 'shippingMethodsCtrl', init: "findShippingMethodByID(#{shipping_method.id})" } }
|
||||
%td= shipping_method.name
|
||||
%td= f.check_box :shipping_method_ids, { :multiple => true, 'ng-model' => 'ShippingMethod.selected' }, shipping_method.id, nil
|
||||
%td= link_to "Edit", edit_admin_shipping_method_path(shipping_method)
|
||||
%td= link_to t(:edit), edit_admin_shipping_method_path(shipping_method)
|
||||
%br
|
||||
.row
|
||||
.six.columns.alpha
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
.row
|
||||
.alpha.eleven.columns
|
||||
.three.columns.alpha
|
||||
= f.label "enterprise_preferred_shopfront_message", t(:shopfront_message)
|
||||
= f.label "enterprise_preferred_shopfront_message", t('.shopfront_message')
|
||||
.eight.columns.omega
|
||||
%text-angular{'ng-model' => 'Enterprise.preferred_shopfront_message', 'id' => 'enterprise_preferred_shopfront_message', 'name' => 'enterprise[preferred_shopfront_message]', 'class' => 'text-angular',
|
||||
'ta-toolbar' => "[['h1','h2','h3','h4','p'],['bold','italics','underline','clear'],['insertLink']]",
|
||||
@@ -9,7 +9,7 @@
|
||||
.row
|
||||
.alpha.eleven.columns
|
||||
.three.columns.alpha
|
||||
= f.label "enterprise_preferred_shopfront_closed_message", t(:shopfront_closed_message)
|
||||
= f.label "enterprise_preferred_shopfront_closed_message", t('.shopfront_closed_message')
|
||||
.eight.columns.omega
|
||||
%text-angular{'ng-model' => 'Enterprise.preferred_shopfront_closed_message', 'id' => 'enterprise_preferred_shopfront_closed_message', 'name' => 'enterprise[preferred_shopfront_closed_message]', 'class' => 'text-angular',
|
||||
'ta-toolbar' => "[['h1','h2','h3','h4','p'],['bold','italics','underline','clear'],['insertLink']]",
|
||||
@@ -17,7 +17,7 @@
|
||||
.row
|
||||
.alpha.eleven.columns
|
||||
.three.columns.alpha
|
||||
= f.label "enterprise_preferred_shopfront_taxon_order", t(:shopfront_category_ordering)
|
||||
= f.label "enterprise_preferred_shopfront_taxon_order", t('.shopfront_category_ordering')
|
||||
%br
|
||||
(top to bottom)
|
||||
.eight.columns.omega
|
||||
@@ -51,9 +51,27 @@
|
||||
%label= t '.allow_guest_orders'
|
||||
%div{'ofn-with-tip' => t('.allow_guest_orders_tip')}
|
||||
%a= t 'admin.whats_this'
|
||||
.eight.columns.omega
|
||||
.row
|
||||
.three.columns.alpha
|
||||
= f.radio_button :allow_guest_orders, true, "ng-model" => "Enterprise.allow_guest_orders", "ng-value" => "true"
|
||||
= f.label :allow_guest_orders, t('.allow_guest_orders_true'), value: :true
|
||||
.five.columns.omega
|
||||
= f.radio_button :allow_guest_orders, false, "ng-model" => "Enterprise.allow_guest_orders", "ng-value" => "false"
|
||||
= f.label :allow_guest_orders, t('.allow_guest_orders_false'), value: :false
|
||||
.row.warning{ng: {show: 'Enterprise.allow_guest_orders && Enterprise.allow_order_changes'}}
|
||||
.eight.columns.alpha.omega
|
||||
%i.icon-warning-sign
|
||||
= t '.recommend_require_login'
|
||||
.row
|
||||
.alpha.eleven.columns
|
||||
.three.columns.alpha
|
||||
%label= t '.allow_order_changes'
|
||||
%div{'ofn-with-tip' => t('.allow_order_changes_tip')}
|
||||
%a= t 'admin.whats_this'
|
||||
.three.columns
|
||||
= f.radio_button :allow_guest_orders, true
|
||||
= f.label :allow_guest_orders, t('.allow_guest_orders_true'), value: :true
|
||||
= f.radio_button :allow_order_changes, false, "ng-model" => "Enterprise.allow_order_changes", "ng-value" => "false"
|
||||
= f.label :allow_order_changes, t('.allow_order_changes_false'), value: :false
|
||||
.five.columns.omega
|
||||
= f.radio_button :allow_guest_orders, false
|
||||
= f.label :allow_guest_orders, t('.allow_guest_orders_false'), value: :false
|
||||
= f.radio_button :allow_order_changes, true, "ng-model" => "Enterprise.allow_order_changes", "ng-value" => "true"
|
||||
= f.label :allow_order_changes, t('.allow_order_changes_true'), value: :true
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
.filter_select.four.columns
|
||||
%label{ :for => 'producer_filter', ng: {class: '{disabled: !hub_id}'} }=t('admin.producer')
|
||||
%br
|
||||
%input.ofn-select2.fullwidth{ :id => 'producer_filter', type: 'number', data: 'producers', blank: "{id: 0, name: 'All'}", ng: { model: 'producerFilter', disabled: '!hub_id' } }
|
||||
%input.ofn-select2.fullwidth{ :id => 'producer_filter', type: 'number', data: 'producers', blank: "{id: 0, name: '#{t(:all)}'}", ng: { model: 'producerFilter', disabled: '!hub_id' } }
|
||||
-# .filter_select{ :class => "three columns" }
|
||||
-# %label{ :for => 'distributor_filter' }Hub
|
||||
-# %br
|
||||
|
||||
2
app/views/checkout/_already_ordered.html.haml
Normal file
2
app/views/checkout/_already_ordered.html.haml
Normal file
@@ -0,0 +1,2 @@
|
||||
%p.alert-box.info
|
||||
= t '.message_html', cart: link_to(t('.cart'), "#{cart_path}#bought-products")
|
||||
@@ -11,6 +11,7 @@
|
||||
= render "checkout/billing", f: f
|
||||
= render "checkout/shipping", f: f
|
||||
= render "checkout/payment", f: f
|
||||
= render "checkout/already_ordered", f: f if show_bought_items?
|
||||
%p
|
||||
%button.button.primary{type: :submit}
|
||||
= t :checkout_send
|
||||
|
||||
@@ -8,6 +8,10 @@
|
||||
= inject_shop_enterprises
|
||||
|
||||
%shop.darkswarm
|
||||
.alert-box.changeable-orders-alert.info.animate-show{ ng: { show: "alert.visible && alert.html", cloak: true } }
|
||||
%span{ ng: { bind: { html: "alert.html" } } }
|
||||
%a.close{ ng: { click: "alert.close()" } } ×
|
||||
|
||||
- content_for :order_cycle_form do
|
||||
|
||||
%div{"ng-controller" => "OrderCycleChangeCtrl", "ng-cloak" => true}
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
.small-12.medium-6.medium-offset-3.columns.text-center
|
||||
%h2
|
||||
= t :producers_signup_cta_headline
|
||||
%p.text-big Start with a free profile, and expand when you're ready!
|
||||
%p.text-big= t('.start_free_profile')
|
||||
%a.button.transparent{href: "/register"}
|
||||
= t :producers_signup_cta_action
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
%a.button.secondary.tiny.add_to_cart{ href: cart_path, type: :submit, "ng-disabled" => "Cart.dirty || Cart.empty()", "ng-class" => "{ dirty: Cart.dirty }" }
|
||||
= "{{ Cart.dirty ? '#{t(:cart_updating)}' : (Cart.empty() ? '#{t(:cart_empty)}' : '#{t(:cart_edit)}' ) }}"
|
||||
%a.button.primary.tiny{href: checkout_path, "ng-disabled" => "Cart.dirty || Cart.empty()"}
|
||||
= t 'checkout'
|
||||
= t '.checkout'
|
||||
%table
|
||||
%tr.product-cart{"ng-repeat" => "line_item in Cart.line_items", "id" => "cart-variant-{{ line_item.variant.id }}"}
|
||||
%td
|
||||
@@ -47,4 +47,25 @@
|
||||
%a.button.secondary.tiny.add_to_cart{ href: cart_path, type: :submit, "ng-disabled" => "Cart.dirty || Cart.empty()", "ng-class" => "{ dirty: Cart.dirty }" }
|
||||
= "{{ Cart.dirty ? '#{t(:cart_updating)}' : (Cart.empty() ? '#{t(:cart_empty)}' : '#{t(:cart_edit)}' ) }}"
|
||||
%a.button.primary.tiny{href: checkout_path, "ng-disabled" => "Cart.dirty || Cart.empty()"}
|
||||
= t 'checkout'
|
||||
= t '.checkout'
|
||||
- if order_changes_allowed?
|
||||
%h5{"ng-if" => "Cart.line_items_finalised.length", style: 'margin-top: 1em'}
|
||||
= t '.already_ordered_products'
|
||||
%table
|
||||
%tr.product-cart{"ng-repeat" => "line_item in Cart.line_items_finalised",
|
||||
"id" => "cart-variant-{{ line_item.variant.id }}"}
|
||||
%td
|
||||
%small
|
||||
%strong
|
||||
{{ line_item.variant.extended_name }}
|
||||
%td.text-right
|
||||
%small
|
||||
%span.quantity {{ line_item.quantity }}
|
||||
%i.ofn-i_009-close
|
||||
%span.price {{ line_item.variant.price_with_fees | localizeCurrency }}
|
||||
|
||||
%td
|
||||
%small
|
||||
\=
|
||||
%strong
|
||||
.total-price.right {{ line_item.total_price | localizeCurrency }}
|
||||
|
||||
1
app/views/shop/changeable_orders_alert.html.haml
Normal file
1
app/views/shop/changeable_orders_alert.html.haml
Normal file
@@ -0,0 +1 @@
|
||||
= shop_changeable_orders_alert_html
|
||||
@@ -6,7 +6,7 @@
|
||||
.row.summary
|
||||
.small-10.medium-10.large-11.columns.summary-header
|
||||
%h3
|
||||
%a{"ng-click" => "triggerProductModal()"}
|
||||
%a{"ng-click" => "triggerProductModal()", href: 'javascript:void(0)'}
|
||||
%span{"ng-bind" => "::product.name"}
|
||||
%i.ofn-i_057-expand
|
||||
%small
|
||||
|
||||
@@ -1,14 +1,18 @@
|
||||
- distributor = @order.andand.distributor || current_distributor
|
||||
|
||||
%navigation
|
||||
%distributor.details.row
|
||||
.small-12.medium-6.large-6.columns
|
||||
#distributor_title
|
||||
- if current_distributor.logo?
|
||||
%img.left{src: current_distributor.logo.url(:thumb)}
|
||||
- if distributor.logo?
|
||||
%img.left{src: distributor.logo.url(:thumb)}
|
||||
%h3
|
||||
= current_distributor.name
|
||||
%location= current_distributor.address.city
|
||||
= distributor.name
|
||||
%location= distributor.address.city
|
||||
/ Will this needs to be a drop-down to choose either pick-up point or delivery once shipping methods are implemented
|
||||
|
||||
.small-12.medium-6.large-6.columns
|
||||
= render partial: "shopping_shared/order_cycles"
|
||||
|
||||
= render partial: "shopping_shared/tabs"
|
||||
|
||||
= render partial: "shopping_shared/tabs" if distributor == current_distributor
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
%fieldset.no-border-bottom
|
||||
%legend{align: 'center'} Distribution
|
||||
|
||||
- if @order.complete?
|
||||
.alpha.six.columns
|
||||
%p
|
||||
%b Distributor:
|
||||
= @order.distributor.andand.name || "None"
|
||||
%input{type: "hidden", id: "order_distributor_id", value: @order.distributor.andand.id}
|
||||
.omega.six.columns
|
||||
%p
|
||||
%b Order cycle:
|
||||
= @order.order_cycle.andand.name || "None"
|
||||
%input{type: "hidden", id: "order_order_cycle_id", value: @order.order_cycle.andand.id}
|
||||
- else
|
||||
.alpha.six.columns
|
||||
.field
|
||||
%label{for: "order_distributor_id"} Distributor
|
||||
%input.ofn-select2.fullwidth{id: "order_distributor_id",
|
||||
type: 'number',
|
||||
name: "order[distributor_id]",
|
||||
"ng-model" => 'distributor_id',
|
||||
data: "shops" }
|
||||
|
||||
.omega.six.columns
|
||||
.field
|
||||
%label{ for: "order_order_cycle_id"} Order Cycle
|
||||
%input.ofn-select2.fullwidth{id: "order_order_cycle_id",
|
||||
type: 'number',
|
||||
name: "order[order_cycle_id]",
|
||||
"ng-model" => 'order_cycle_id',
|
||||
"ng-disabled" => "!distributor_id",
|
||||
data: "orderCycles",
|
||||
text: "name_and_status",
|
||||
filter: "validOrderCycle" }
|
||||
@@ -31,21 +31,21 @@
|
||||
%label{ :for => 'supplier_filter' }
|
||||
= t("admin.producer")
|
||||
%br
|
||||
%input#supplier_filter.ofn-select2.fullwidth{ type: 'number', 'min-search' => 5, data: 'suppliers', blank: "{ id: 0, name: 'All' }", ng: { model: 'supplierFilter' } }
|
||||
%input#supplier_filter.ofn-select2.fullwidth{ type: 'number', 'min-search' => 5, data: 'suppliers', blank: "{ id: 0, name: '#{t(:all)}' }", ng: { model: 'supplierFilter' } }
|
||||
.filter_select{ :class => "three columns" }
|
||||
%label{ :for => 'distributor_filter' }
|
||||
= t("admin.shop")
|
||||
%br
|
||||
%input#distributor_filter.ofn-select2.fullwidth{ type: 'number', 'min-search' => 5, data: 'distributors', blank: "{ id: 0, name: 'All' }", ng: { model: 'distributorFilter' } }
|
||||
%input#distributor_filter.ofn-select2.fullwidth{ type: 'number', 'min-search' => 5, data: 'distributors', blank: "{ id: 0, name: '#{t(:all)}' }", ng: { model: 'distributorFilter' } }
|
||||
.filter_select{ :class => "three columns" }
|
||||
%label{ :for => 'order_cycle_filter' }
|
||||
= t("admin.order_cycle")
|
||||
%br
|
||||
%input#order_cycle_filter.ofn-select2.fullwidth{ type: 'number', 'min-search' => 5, data: 'orderCycles', blank: "{ id: 0, name: 'All' }", on: { selecting: "confirmRefresh" }, ng: { model: 'orderCycleFilter', change: 'refreshData()' } }
|
||||
%input#order_cycle_filter.ofn-select2.fullwidth{ type: 'number', 'min-search' => 5, data: 'orderCycles', blank: "{ id: 0, name: '#{t(:all)}' }", on: { selecting: "confirmRefresh" }, ng: { model: 'orderCycleFilter', change: 'refreshData()' } }
|
||||
.filter_clear{ :class => "two columns omega" }
|
||||
%label{ :for => 'clear_all_filters' }
|
||||
%br
|
||||
%input.red.fullwidth{ :type => 'button', :id => 'clear_all_filters', :value => "Clear All", 'ng-click' => "resetSelectFilters()" }
|
||||
%input.red.fullwidth{ :type => 'button', :id => 'clear_all_filters', :value => t('admin.clear_all'), 'ng-click' => "resetSelectFilters()" }
|
||||
|
||||
%hr.divider.sixteen.columns.alpha.omega{ ng: { show: 'unitsVariantSelected()' } }
|
||||
|
||||
@@ -59,7 +59,7 @@
|
||||
%h6{ :class => "eight columns alpha", 'ng-hide' => 'sharedResource', style: 'text-align: center;' } {{ selectedUnitsVariant.full_name }}
|
||||
%div{ :class => "four columns omega" }
|
||||
%h6{ :class => "four columns alpha", :style => 'text-align: right;' }
|
||||
%a{ :href => '#', 'ng-click' => 'selectedUnitsVariant = {};selectedUnitsProduct = {};sharedResource=false;' } Clear
|
||||
%a{ :href => '#', 'ng-click' => 'selectedUnitsVariant = {};selectedUnitsProduct = {};sharedResource=false;' }= t('admin.clear')
|
||||
%hr
|
||||
.row
|
||||
.one.column.alpha
|
||||
|
||||
24
app/views/spree/admin/orders/set_distribution.html.haml
Normal file
24
app/views/spree/admin/orders/set_distribution.html.haml
Normal file
@@ -0,0 +1,24 @@
|
||||
- content_for :page_title do
|
||||
= t(:new)
|
||||
|
||||
- content_for :page_actions do
|
||||
%li= button_link_to t(:back_to_orders_list), spree.admin_orders_path, :icon => 'icon-arrow-left'
|
||||
|
||||
= admin_inject_shops 'admin.orders'
|
||||
= admin_inject_order_cycles
|
||||
|
||||
= render 'spree/admin/shared/order_tabs', :current => 'Order Details'
|
||||
|
||||
= csrf_meta_tags
|
||||
|
||||
%div{"data-hook" => "admin_order_new_header"}
|
||||
= render 'spree/shared/error_messages', :target => @order
|
||||
|
||||
%div{"ng-app" => "admin.orders", "ng-controller" => "ordersCtrl"}
|
||||
= form_for @order, url: admin_order_url(@order), method: :put do |f|
|
||||
= render 'spree/admin/orders/_form/distribution_fields'
|
||||
-# This param passed to stop validation error in next page due to no line items in order yet:
|
||||
= hidden_field_tag 'suppress_error_msg', "true"
|
||||
= button_tag :class => 'secondary radius expand small', :id => 'update-button' do
|
||||
%i.icon-arrow-right
|
||||
= t(:next)
|
||||
@@ -13,24 +13,24 @@
|
||||
'\x1B' + '\x74' + '\x10',
|
||||
'\x1B' + '\x61' + '\x31', // center align
|
||||
'\x1B' + '\x21' + '\x30', // em mode on
|
||||
'#{@order.distributor.name}' + '\x0A',
|
||||
'#{j(@order.distributor.name)}' + '\x0A',
|
||||
'\x1B' + '\x21' + '\x0A' + '\x1B' + '\x45' + '\x0A', // em mode off
|
||||
'\x0A',
|
||||
'#{@order.distributor.address.address_part1}' + '\x0A', // text and line break
|
||||
'#{@order.distributor.address.address_part2}' + '\x0A',
|
||||
'#{@order.distributor.email}' + '\x0A',
|
||||
'#{j(@order.distributor.address.address_part1)}' + '\x0A', // text and line break
|
||||
'#{j(@order.distributor.address.address_part2)}' + '\x0A',
|
||||
'#{j(@order.distributor.email)}' + '\x0A',
|
||||
'\x0A', // line break
|
||||
'\x1B' + '\x61' + '\x32', // right align
|
||||
'#{l Time.zone.now.to_date}' + '\x0A',
|
||||
'#{@order.number}' + '\x0A',
|
||||
'#{j(l(Time.zone.now.to_date))}' + '\x0A',
|
||||
'#{j(@order.number)}' + '\x0A',
|
||||
'\x1B' + '\x61' + '\x30', // left align
|
||||
'\x0A',
|
||||
'\x1B' + '\x4D' + '\x31', // small text
|
||||
"#{'%6s %-23s%12s%12s' %
|
||||
[t(:ticket_column_qty),
|
||||
t(:ticket_column_item),
|
||||
t(:ticket_column_unit_price),
|
||||
t(:ticket_column_total_price)]}",
|
||||
"#{'%6s %-26s%10s%10s' %
|
||||
[j(t(:ticket_column_qty)),
|
||||
j(t(:ticket_column_item)),
|
||||
j(t(:ticket_column_unit_price)),
|
||||
j(t(:ticket_column_total_price))]}",
|
||||
'\x0A',
|
||||
'\x1B' + '\x4D' + '\x30', // normal text
|
||||
'__________________________________________' + '\x0A',
|
||||
@@ -38,36 +38,34 @@
|
||||
.sort_by{ |line_item| line_item.product.name }
|
||||
.map { |line_item| '%5d %-19.19s%8.8s%8.8s' %
|
||||
[line_item.quantity,
|
||||
line_item.product.name,
|
||||
line_item.single_display_amount_with_adjustments.money.format(symbol: false),
|
||||
line_item.display_amount_with_adjustments.money.format(symbol: false)] }
|
||||
j(line_item.product.name),
|
||||
j(line_item.single_display_amount_with_adjustments.format(symbol: false, with_currency: false)),
|
||||
j(line_item.display_amount_with_adjustments.format(symbol: false, with_currency: false))] }
|
||||
.join('" + \'\x0A\' + "')}",
|
||||
'\x0A',
|
||||
"#{checkout_adjustments_for(@order, exclude: [:line_item])
|
||||
.reject{ |a| a.amount == 0 }
|
||||
.reverse.map { |adjustment| '%5s %-27.27s%8.8s' %
|
||||
["",
|
||||
raw(adjustment.label),
|
||||
display_adjustment_amount(adjustment).money.format(symbol: false)] }
|
||||
.join('" + \'\x0A\' + "')}",
|
||||
'\x0A',
|
||||
j(raw(adjustment.label)),
|
||||
j(display_adjustment_amount(adjustment).format(symbol: false, with_currency: false))] +
|
||||
'" + \'\x0A\' + "'}.join }",
|
||||
'__________________________________________' + '\x0A',
|
||||
'\x0A',
|
||||
'\x1B' + '\x45' + '\x0D', // bold on
|
||||
"#{'%31s%10s' %
|
||||
[t(:total_incl_tax),
|
||||
@order.display_total]}",
|
||||
[j(t(:total_incl_tax)),
|
||||
j(@order.display_total.format(with_currency: false))]}",
|
||||
'\x1B' + '\x45' + '\x0A', // bold off
|
||||
'\x0A',
|
||||
"#{display_checkout_taxes_hash(@order).map { |tax_rate, tax_value|
|
||||
'%31s%10s' %
|
||||
[t(:tax_total, rate: tax_rate),
|
||||
tax_value] }
|
||||
.join('" + \'\x0A\' + "')}",
|
||||
'\x0A',
|
||||
[j(t(:tax_total, rate: tax_rate)),
|
||||
j(tax_value.format(with_currency: false))] +
|
||||
'" + \'\x0A\' + "'}.join }",
|
||||
"#{'%31s%10s' %
|
||||
[t(:total_excl_tax),
|
||||
display_checkout_total_less_tax(@order)]}",
|
||||
[j(t(:total_excl_tax)),
|
||||
j(display_checkout_total_less_tax(@order).format(with_currency: false))]}",
|
||||
'\x0A',
|
||||
'\x0A' + '\x0A' + '\x0A' + '\x0A' + '\x0A' + '\x0A' + '\x0A',
|
||||
'\x1B' + '\x69', // cut paper
|
||||
|
||||
@@ -15,4 +15,4 @@
|
||||
.filter_clear.three.columns.omega
|
||||
%label{ :for => 'clear_all_filters' }
|
||||
%br
|
||||
%input.fullwidth.red{ :type => 'button', :id => 'clear_all_filters', :value => "Clear Filters", 'ng-click' => "resetSelectFilters()" }
|
||||
%input.fullwidth.red{ :type => 'button', :id => 'clear_all_filters', :value => t('admin.clear_filters'), 'ng-click' => "resetSelectFilters()" }
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
%tr{ ng: { controller: "ColumnsCtrl" } }
|
||||
%th.left-actions
|
||||
%a{ 'ng-click' => 'toggleShowAllVariants()', :style => 'color: red' }
|
||||
Expand All
|
||||
= t(:expand_all)
|
||||
%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('admin.name')
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
%input.fullwidth{ :type => 'text', id: "p{{product.id}}_category_id", 'ng-model' => 'product.category_id', 'ofn-taxon-autocomplete' => '', 'ofn-track-product' => 'category_id', 'multiple-selection' => 'false', placeholder: 'Category' }
|
||||
%td.tax_category{ 'ng-if' => 'columns.tax_category.visible' }
|
||||
%select.select2{ name: 'product_tax_category_id', 'ofn-track-product' => 'tax_category_id', ng: {model: 'product.tax_category_id', options: 'tax_category.id as tax_category.name for tax_category in tax_categories'} }
|
||||
%option{value: ''} None
|
||||
%option{value: ''}= t(:none)
|
||||
%td.inherits_properties{ 'ng-show' => 'columns.inherits_properties.visible' }
|
||||
%input{ 'ng-model' => 'product.inherits_properties', :name => 'inherits_properties', 'ofn-track-product' => 'inherits_properties', type: "checkbox" }
|
||||
%td.available_on{ 'ng-show' => 'columns.available_on.visible' }
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
%div.sixteen.columns.alpha{ 'ng-hide' => 'loading || products.length == 0', style: "margin-bottom: 10px" }
|
||||
%div.four.columns.alpha
|
||||
%input.four.columns.alpha{ :type => 'button', :value => 'Save Changes', 'ng-click' => 'submitProducts()'}
|
||||
%input.four.columns.alpha{ :type => 'button', :value => t(:save_changes), 'ng-click' => 'submitProducts()'}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
.row
|
||||
.four.columns.alpha
|
||||
= label_tag nil, "Distributor: "
|
||||
= f.collection_select(:distributor_id_eq, @distributors, :id, :name, {:include_blank => 'All'}, {:class => "select2 fullwidth"})
|
||||
= f.collection_select(:distributor_id_eq, @distributors, :id, :name, {:include_blank => t(:all)}, {:class => "select2 fullwidth"})
|
||||
= label_tag nil, "Report Type: "
|
||||
%br
|
||||
= select_tag(:report_type, options_for_select([['Bulk Co-op - Totals by Supplier',:bulk_coop_supplier_report],['Bulk Co-op - Allocation',:bulk_coop_allocation],['Bulk Co-op - Packing Sheets',:bulk_coop_packing_sheets],['Bulk Co-op - Customer Payments',:bulk_coop_customer_payments]], @report_type))
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
.row
|
||||
.four.columns.alpha
|
||||
= label_tag nil, t(:report_distributor)
|
||||
= f.collection_select(:distributor_id_eq, @distributors, :id, :name, {:include_blank => 'All'}, {:class => "select2 fullwidth"})
|
||||
= f.collection_select(:distributor_id_eq, @distributors, :id, :name, {:include_blank => t(:all)}, {:class => "select2 fullwidth"})
|
||||
= label_tag nil, t(:report_customers_type)
|
||||
%br
|
||||
= select_tag(:report_type, options_for_select([[t(:report_tax_types),:tax_types],[t(:report_tax_rates),:tax_rates]], @report_type))
|
||||
|
||||
35
app/views/spree/orders/_bought.html.haml
Normal file
35
app/views/spree/orders/_bought.html.haml
Normal file
@@ -0,0 +1,35 @@
|
||||
%tbody{ ng: { controller: 'EditBoughtOrderController' } }
|
||||
%tr
|
||||
%td.toggle-bought{ colspan: 2, ng: { click: 'showBought=!showBought' } }
|
||||
%h5.brick
|
||||
%i{ ng: { class: "{ 'ofn-i_007-caret-right': !showBought, 'ofn-i_005-caret-down': showBought}"} }
|
||||
= t(:orders_bought_items_notice, count: @order.finalised_line_items.sum(&:quantity))
|
||||
%td.text-right{ colspan: 3 }
|
||||
%a.edit-finalised.button.radius.expand.small{ href: changeable_orders_link_path, ng: { class: "{secondary: !showBought, primary: showBought}" } }
|
||||
= t(:orders_bought_edit_button)
|
||||
%i.ofn-i_007-caret-right
|
||||
|
||||
|
||||
- @order.finalised_line_items.each do |line_item|
|
||||
- variant = line_item.variant
|
||||
%tr.bought.line-item{class: "line-item-#{line_item.id} variant-#{variant.id}", ng: { show: 'showBought'} }
|
||||
%td.cart-item-description
|
||||
|
||||
%div.item-thumb-image
|
||||
- if variant.images.length == 0
|
||||
= link_to mini_image(variant.product), variant.product
|
||||
- else
|
||||
= link_to image_tag(variant.images.first.attachment.url(:mini)), variant.product
|
||||
|
||||
= render 'spree/shared/line_item_name', line_item: line_item
|
||||
%span.already-confirmed= t(:orders_bought_already_confirmed)
|
||||
%td.text-right.cart-item-price
|
||||
= line_item.single_display_amount_with_adjustments.to_html
|
||||
%td.text-center.cart-item-quantity
|
||||
= line_item.quantity
|
||||
%td.cart-item-total.text-right
|
||||
= line_item.display_amount_with_adjustments.to_html unless line_item.quantity.nil?
|
||||
|
||||
%td.bought-item-delete.text-center
|
||||
%a{ng: {click: "deleteLineItem(#{line_item.id})"}}
|
||||
%i.ofn-i_026-trash
|
||||
@@ -20,19 +20,10 @@
|
||||
= order_form.fields_for :line_items do |item_form|
|
||||
= render :partial => 'line_item', :locals => { :variant => item_form.object.variant, :line_item => item_form.object, :item_form => item_form }
|
||||
|
||||
= render 'bought' if show_bought_items? && @order.cart?
|
||||
|
||||
%tfoot#edit-cart
|
||||
%tr
|
||||
%td{colspan:"2"}
|
||||
%td
|
||||
= button_tag :class => 'secondary radius expand small', :id => 'update-button' do
|
||||
%i.ofn-i_023-refresh
|
||||
= t(:update)
|
||||
%td
|
||||
%td#empty-cart.text-center
|
||||
%span#clear_cart_link{"data-hook" => ""}
|
||||
= link_to t(:orders_form_empty_cart), empty_cart_path, method: :put, :class => 'not-bold small'
|
||||
-#= form_tag empty_cart_path, :method => :put do
|
||||
-#= submit_tag t(:empty_cart), :class => 'button alert expand small'
|
||||
= render 'spree/orders/form/cart_actions_row' if @order.cart?
|
||||
|
||||
/ This is the fees row which we want to replace with the pop-over
|
||||
-# - unless @order.adjustments.eligible.blank?
|
||||
@@ -52,6 +43,14 @@
|
||||
%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
|
||||
%td.text-right{:colspan => "3"}
|
||||
= adjustment.label
|
||||
%td.text-right.total
|
||||
%span= adjustment.display_amount.to_html
|
||||
%td
|
||||
|
||||
%tr
|
||||
%td.text-right{colspan:"3"}
|
||||
%h5
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
= render 'spree/shared/line_item_name', line_item: line_item
|
||||
|
||||
- if @insufficient_stock_lines.include? line_item
|
||||
- if @insufficient_stock_lines.andand.include? line_item
|
||||
%span.out-of-stock
|
||||
= variant.in_stock? ? t(:insufficient_stock, :on_hand => variant.on_hand) : t(:out_of_stock)
|
||||
%br/
|
||||
@@ -35,6 +35,5 @@
|
||||
= line_item.display_amount_with_adjustments.to_html unless line_item.quantity.nil?
|
||||
|
||||
%td.cart-item-delete.text-center{"data-hook" => "cart_item_delete"}
|
||||
{{ quantity }}
|
||||
%a.delete{href: "#", id: "delete_#{dom_id(line_item)}"}
|
||||
%i.delete.ofn-i_026-trash
|
||||
|
||||
65
app/views/spree/orders/_summary.html.haml
Normal file
65
app/views/spree/orders/_summary.html.haml
Normal file
@@ -0,0 +1,65 @@
|
||||
%table#line-items{"data-hook" => "order_details"}
|
||||
%col{valign: "middle"}/
|
||||
%col{halign: "center", valign: "middle", width: "5%"}/
|
||||
%col{halign: "center", valign: "middle", width: "5%"}/
|
||||
%col{halign: "center", valign: "middle", width: "5%"}/
|
||||
%thead{"data-hook" => ""}
|
||||
%tr{"data-hook" => "order_details_line_items_headers"}
|
||||
%th= t(:item)
|
||||
%th.price= t(:price)
|
||||
%th.text-center.qty= t(:qty)
|
||||
%th.text-right.total
|
||||
%span= t(:total)
|
||||
%tbody{"data-hook" => ""}
|
||||
- order.line_items.each do |item|
|
||||
%tr.line_item{"data-hook" => "order_details_line_item_row", class: "variant-#{item.variant.id}" }
|
||||
%td(data-hook = "order_item_description")
|
||||
|
||||
%div.item-thumb-image{"data-hook" => "order_item_image"}
|
||||
- if item.variant.images.length == 0
|
||||
= link_to mini_image(item.variant.product), item.variant.product
|
||||
- else
|
||||
= link_to image_tag(item.variant.images.first.attachment.url(:mini)), item.variant.product
|
||||
|
||||
|
||||
= render 'spree/shared/line_item_name', line_item: item
|
||||
|
||||
%td.text-right.price{"data-hook" => "order_item_price"}
|
||||
%span= item.single_display_amount_with_adjustments.to_html
|
||||
%td.text-center{"data-hook" => "order_item_qty"}= item.quantity
|
||||
%td.text-right.total{"data-hook" => "order_item_total"}
|
||||
%span= item.display_amount_with_adjustments.to_html
|
||||
|
||||
%tfoot
|
||||
#subtotal{"data-hook" => "order_details_subtotal"}
|
||||
%tr#subtotal-row.total
|
||||
%td.text-right{colspan: "3"}
|
||||
%strong
|
||||
= t :order_produce
|
||||
%td.text-right.total
|
||||
%span= display_checkout_subtotal(order)
|
||||
|
||||
#order-charges{"data-hook" => "order_details_adjustments"}
|
||||
- checkout_adjustments_for(order, exclude: [:line_item]).reject{ |a| a.amount == 0 }.reverse_each do |adjustment|
|
||||
%tr.total
|
||||
%td.text-right{:colspan => "3"}
|
||||
%strong
|
||||
= adjustment.label
|
||||
%td.text-right.total
|
||||
%span= adjustment.display_amount.to_html
|
||||
|
||||
#order-total{"data-hook" => "order_details_total"}
|
||||
%tr.total
|
||||
%td.text-right{colspan: "3"}
|
||||
%h5
|
||||
= t :order_total_price
|
||||
%td.text-right.total
|
||||
%h5#order_total= order.display_total.to_html
|
||||
|
||||
- if order.total_tax > 0
|
||||
#tax{"data-hook" => "order_details_tax"}
|
||||
%tr#tax-row.total
|
||||
%td.text-right{colspan: "3"}
|
||||
= t :order_includes_tax
|
||||
%td.text-right.total
|
||||
%span= display_checkout_tax_total(order)
|
||||
@@ -31,17 +31,6 @@
|
||||
.row
|
||||
= render :partial => 'form', :locals => { :order_form => order_form }
|
||||
|
||||
|
||||
.links{'data-hook' => "cart_buttons"}
|
||||
.row
|
||||
.columns.large-8{"data-hook" => ""}
|
||||
|
||||
%a.button.large.secondary{href: main_app.shop_path}
|
||||
%i.ofn-i_008-caret-left
|
||||
= t :orders_edit_continue
|
||||
.columns.large-4.text-right
|
||||
%a#checkout-link.button.large.primary{href: main_app.checkout_path}
|
||||
= t :orders_edit_checkout
|
||||
%i.ofn-i_007-caret-right
|
||||
= render "spree/orders/form/cart_links"
|
||||
|
||||
= render partial: "shared/footer"
|
||||
|
||||
10
app/views/spree/orders/form/_cart_actions_row.html.haml
Normal file
10
app/views/spree/orders/form/_cart_actions_row.html.haml
Normal file
@@ -0,0 +1,10 @@
|
||||
%tr
|
||||
%td{colspan:"2"}
|
||||
%td
|
||||
= button_tag :class => 'secondary radius expand small', :id => 'update-button' do
|
||||
%i.ofn-i_023-refresh
|
||||
= t(:update)
|
||||
%td
|
||||
%td#empty-cart.text-center
|
||||
%span#clear_cart_link{"data-hook" => ""}
|
||||
= link_to t(:orders_form_empty_cart), empty_cart_path, method: :put, :class => 'not-bold small'
|
||||
9
app/views/spree/orders/form/_cart_links.html.haml
Normal file
9
app/views/spree/orders/form/_cart_links.html.haml
Normal file
@@ -0,0 +1,9 @@
|
||||
.row.links{'data-hook' => "cart_buttons"}
|
||||
.columns.large-8{"data-hook" => ""}
|
||||
%a.button.large.secondary{href: main_app.shop_path}
|
||||
%i.ofn-i_008-caret-left
|
||||
= t :orders_edit_continue
|
||||
.columns.large-4.text-right
|
||||
%a#checkout-link.button.large.primary{href: main_app.checkout_path}
|
||||
= t :orders_edit_checkout
|
||||
%i.ofn-i_007-caret-right
|
||||
24
app/views/spree/orders/form/_update_buttons.html.haml
Normal file
24
app/views/spree/orders/form/_update_buttons.html.haml
Normal file
@@ -0,0 +1,24 @@
|
||||
.row
|
||||
.columns.small-12.medium-3
|
||||
- if current_order.andand.distributor == @order.distributor
|
||||
- if current_order.line_items.present?
|
||||
= link_to spree.cart_path, :class => "button expand" do
|
||||
%i.ofn-i_008-caret-left
|
||||
= t(:order_back_to_cart)
|
||||
- else
|
||||
= link_to main_app.shop_path, :class => "button expand" do
|
||||
%i.ofn-i_008-caret-left
|
||||
= t(:order_back_to_store)
|
||||
- else
|
||||
|
||||
- if order.changes_allowed?
|
||||
.columns.show-for-medium-up.medium-3
|
||||
.columns.small-12.medium-3
|
||||
= link_to spree.cancel_order_path(@order), method: :put, :class => "button secondary expand", "confirm-link-click" => t('orders_confirm_cancel') do
|
||||
%i.ofn-i_009-close
|
||||
= t(:cancel_order)
|
||||
.columns.small-12.medium-3
|
||||
= button_tag :class => 'button primary radius expand', :id => 'update-button', "ng-disabled" => 'update_order_form.$pristine' do
|
||||
%i.ofn-i_051-check-big
|
||||
%span{ ng: { show: 'update_order_form.$dirty' } }= t(:save_changes)
|
||||
%span{ ng: { hide: 'update_order_form.$dirty' } }= t(:order_saved)
|
||||
@@ -10,8 +10,15 @@
|
||||
.row
|
||||
.columns.large-12.text-center
|
||||
%h2
|
||||
= t :orders_show_number
|
||||
= " #" + @order.number
|
||||
= t(:orders_show_order_number, number: @order.number)
|
||||
- if @order.canceled?
|
||||
%span.brick
|
||||
= t(:orders_show_cancelled)
|
||||
%i.ofn-i_009-close
|
||||
- elsif @order.complete?
|
||||
%span.turquoise
|
||||
= t(:orders_show_confirmed)
|
||||
%i.ofn-i_051-check-big
|
||||
|
||||
#order{"data-hook" => ""}
|
||||
- if params.has_key? :checkout_complete
|
||||
@@ -19,12 +26,5 @@
|
||||
|
||||
= render 'spree/shared/order_details', order: @order
|
||||
|
||||
.row
|
||||
.columns.large-12
|
||||
= link_to t(:back_to_store), main_app.shop_path, :class => "button"
|
||||
- unless params.has_key? :checkout_complete
|
||||
- if try_spree_current_user && respond_to?(:spree_account_path)
|
||||
= link_to t(:my_account), spree_account_path, :class => "button"
|
||||
|
||||
|
||||
= render partial: "shared/footer"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
%div{:data-hook => "product_source"}
|
||||
%h6.product-section-title SUPPLIER
|
||||
%h6.product-section-title= t(:supplier)
|
||||
%table#product-source.table-display{:width => "100%"}
|
||||
%tbody
|
||||
- if @product.supplier
|
||||
@@ -7,7 +7,7 @@
|
||||
%td= link_to @product.supplier.name, [main_app, @product.supplier]
|
||||
- if false
|
||||
%br/
|
||||
%h6.product-section-title DISTRIBUTORS
|
||||
%h6.product-section-title= t(:distributors)
|
||||
%table#product-source.table-display{:width => "100%"}
|
||||
%tbody
|
||||
- order = current_order(false)
|
||||
@@ -18,11 +18,11 @@
|
||||
%td
|
||||
%b= link_to(distributor.name, [main_app, distributor])
|
||||
%td
|
||||
%b Current
|
||||
%b= t(:current)
|
||||
- elsif order.nil? || validator.can_change_to_distributor?(distributor)
|
||||
%tr.even
|
||||
%td= link_to distributor.name, [main_app, distributor]
|
||||
%td Available
|
||||
%td= t(:available)
|
||||
- else
|
||||
%tr.even
|
||||
%td= link_to distributor.name, [main_app, distributor]
|
||||
|
||||
@@ -86,68 +86,14 @@
|
||||
%br
|
||||
.row
|
||||
.columns.large-12
|
||||
%table#line-items{"data-hook" => "order_details"}
|
||||
%col{valign: "middle"}/
|
||||
%col{halign: "center", valign: "middle", width: "5%"}/
|
||||
%col{halign: "center", valign: "middle", width: "5%"}/
|
||||
%col{halign: "center", valign: "middle", width: "5%"}/
|
||||
%thead{"data-hook" => ""}
|
||||
%tr{"data-hook" => "order_details_line_items_headers"}
|
||||
%th= t(:item)
|
||||
%th.price= t(:price)
|
||||
%th.text-center.qty= t(:qty)
|
||||
%th.text-right.total
|
||||
%span= t(:total)
|
||||
%tbody{"data-hook" => ""}
|
||||
- order.line_items.each do |item|
|
||||
%tr{"data-hook" => "order_details_line_item_row"}
|
||||
%td(data-hook = "order_item_description")
|
||||
- if order.changes_allowed?
|
||||
.alert-box.order-summary{ "ofn-inline-alert" => true, "ng-show" => "visible" }
|
||||
= t(:orders_changeable_orders_alert_html, oc_close: l(order.order_cycle.orders_close_at, format: "%b %d, %Y %H:%M"))
|
||||
%a.close{ "ng-click" => "close()" } ×
|
||||
|
||||
%div.item-thumb-image{"data-hook" => "order_item_image"}
|
||||
- if item.variant.images.length == 0
|
||||
= link_to mini_image(item.variant.product), item.variant.product
|
||||
- else
|
||||
= link_to image_tag(item.variant.images.first.attachment.url(:mini)), item.variant.product
|
||||
|
||||
|
||||
= render 'spree/shared/line_item_name', line_item: item
|
||||
|
||||
%td.text-right.price{"data-hook" => "order_item_price"}
|
||||
%span= item.single_display_amount_with_adjustments.to_html
|
||||
%td.text-center{"data-hook" => "order_item_qty"}= item.quantity
|
||||
%td.text-right.total{"data-hook" => "order_item_total"}
|
||||
%span= item.display_amount_with_adjustments.to_html
|
||||
|
||||
%tfoot
|
||||
#subtotal{"data-hook" => "order_details_subtotal"}
|
||||
%tr#subtotal-row.total
|
||||
%td.text-right{colspan: "3"}
|
||||
%strong
|
||||
= t :order_produce
|
||||
%td.text-right.total
|
||||
%span= display_checkout_subtotal(order)
|
||||
|
||||
#order-charges{"data-hook" => "order_details_adjustments"}
|
||||
- checkout_adjustments_for(order, exclude: [:line_item]).reject{ |a| a.amount == 0 }.reverse_each do |adjustment|
|
||||
%tr.total
|
||||
%td.text-right{:colspan => "3"}
|
||||
%strong
|
||||
= adjustment.label
|
||||
%td.text-right.total
|
||||
%span= adjustment.display_amount.to_html
|
||||
|
||||
#order-total{"data-hook" => "order_details_total"}
|
||||
%tr.total
|
||||
%td.text-right{colspan: "3"}
|
||||
%h5
|
||||
= t :order_total_price
|
||||
%td.text-right.total
|
||||
%h5#order_total= order.display_total.to_html
|
||||
|
||||
- if order.total_tax > 0
|
||||
#tax{"data-hook" => "order_details_tax"}
|
||||
%tr#tax-row.total
|
||||
%td.text-right{colspan: "3"}
|
||||
= t :order_includes_tax
|
||||
%td.text-right.total
|
||||
%span= display_checkout_tax_total(order)
|
||||
= form_for order, html: {id: 'update-order', name: 'update_order_form' } do |order_form|
|
||||
- if order.changes_allowed?
|
||||
= render 'spree/orders/form', order_form: order_form
|
||||
-else
|
||||
= render 'spree/orders/summary', order: order
|
||||
= render 'spree/orders/form/update_buttons', order: order
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
<%= t('.welcome', email: @email) %>
|
||||
|
||||
<%= t('.text') %>
|
||||
<%= @confirmation_url %>
|
||||
@@ -0,0 +1,7 @@
|
||||
<%= t('.request_sent_text') %>
|
||||
|
||||
<%= t('.link_text') %>
|
||||
|
||||
<%= @edit_password_reset_url %>
|
||||
|
||||
<%= t('.issue_text') %>
|
||||
23
app/views/spree/users/_open_orders.html.haml
Normal file
23
app/views/spree/users/_open_orders.html.haml
Normal file
@@ -0,0 +1,23 @@
|
||||
.row
|
||||
.small-12.columns
|
||||
%table
|
||||
%tr
|
||||
%th.order1= t('.order')
|
||||
%th.order2= t('.shop')
|
||||
%th.order3.show-for-large-up= t('.changes_allowed_until')
|
||||
%th.order4.show-for-large-up= t('.items')
|
||||
%th.order5.text-right= t('.total')
|
||||
%th.order6.text-right.show-for-large-up= t('.edit')
|
||||
%th.order7.text-right= t('.cancel')
|
||||
%tbody.transaction-group{"ng-repeat" => "order in Orders.changeable_orders", "ng-class-odd"=>"'odd'", "ng-class-even"=>"'even'"}
|
||||
%tr.order-row
|
||||
%td.order1
|
||||
%a{"ng-href" => "{{::order.path}}", "ng-bind" => "::order.number"}
|
||||
%td.order2{"ng-bind" => "::order.shop_name"}
|
||||
%td.order3.show-for-large-up{"ng-bind" => "order.changes_allowed_until"}
|
||||
%td.order4.show-for-large-up{"ng-bind" => "::order.item_count"}
|
||||
%td.order5.text-right{"ng-class" => "{'credit' : order.total < 0, 'debit' : order.total > 0, 'paid' : order.total == 0}","ng-bind" => "::order.total | localizeCurrency"}
|
||||
%td.order6.text-right.show-for-large-up.brick
|
||||
%a{"ng-href" => "{{::order.path}}" }= t('.edit')
|
||||
%td.order7.text-right
|
||||
= link_to t('.cancel'), "", method: :put, "ng-href" => "{{::order.cancel_path}}", "confirm-link-click" => t('orders_confirm_cancel')
|
||||
@@ -1,12 +1,10 @@
|
||||
.row.active_table_row.skinny-head.margin-top{"ng-click" => "toggle($event)", "ng-class" => "{'closed' : !open()}"}
|
||||
.columns.small-2
|
||||
%span.margin-top
|
||||
%img.account-logo{"logo-fallback" => true, "ng-src" => "{{distributor.logo}}"}
|
||||
.columns.small-10.medium-5
|
||||
%span.margin-top
|
||||
%strong{"ng-bind" => "::distributor.name"}
|
||||
.columns.small-8.small-offset-2.medium-3.text-right
|
||||
%span.margin-top.distributor-balance{"ng-bind" => "::distributor.balance | formatBalance", "ng-class" => "{'credit' : distributor.balance < 0, 'debit' : distributor.balance > 0, 'paid' : distributor.balance == 0}" }
|
||||
.columns.small-2.medium-2.text-right
|
||||
%span.margin-top
|
||||
%img.margin-top.account-logo{"logo-fallback" => true, "ng-src" => "{{distributor.logo}}"}
|
||||
.columns.small-5
|
||||
%h3.margin-top{"ng-bind" => "::distributor.name"}
|
||||
.columns.small-4.text-right
|
||||
%h3.margin-top.distributor-balance{"ng-bind" => "::distributor.balance | formatBalance", "ng-class" => "{'credit' : distributor.balance < 0, 'debit' : distributor.balance > 0, 'paid' : distributor.balance == 0}" }
|
||||
.columns.small-1.text-right
|
||||
%h3.margin-top
|
||||
%i{"ng-class" => "{'ofn-i_005-caret-down' : !open(), 'ofn-i_006-caret-up' : open()}"}
|
||||
|
||||
@@ -3,22 +3,26 @@
|
||||
|
||||
.row.pad-top
|
||||
.small-12.columns.pad-top
|
||||
%h2= accurate_title
|
||||
.account-summary{"data-hook" => "account_summary"}
|
||||
= @user.email
|
||||
(#{link_to t(:edit), spree.edit_account_path})
|
||||
%h3= t(:my_orders)
|
||||
%h2
|
||||
= accurate_title
|
||||
%span.account-summary{"data-hook" => "account_summary"}
|
||||
= @user.email
|
||||
(#{link_to t(:edit), spree.edit_account_path})
|
||||
|
||||
.orders{"ng-controller" => "OrdersCtrl", "ng-cloak" => true}
|
||||
.row
|
||||
.small-12.columns
|
||||
.active_table
|
||||
%distributor.active_table_node.row.animate-repeat{"ng-if" => "Orders.orders_by_distributor.length > 0", "ng-repeat" => "(key, distributor) in Orders.orders_by_distributor",
|
||||
"ng-controller" => "DistributorNodeCtrl",
|
||||
"ng-class" => "{'closed' : !open(), 'open' : open(), 'inactive' : !distributor.active}",
|
||||
id: "{{distributor.hash}}"}
|
||||
.small-12.columns
|
||||
= render partial: "spree/users/skinny"
|
||||
= render partial: "spree/users/fat"
|
||||
.message{"ng-if" => "Orders.orders_by_distributor.length == 0", "ng-bind" => "::'you_have_no_orders_yet' | t"}
|
||||
.my-open-orders{ ng: { show: 'Orders.changeable_orders.length > 0' } }
|
||||
%h3= t(:open_orders)
|
||||
= render 'open_orders'
|
||||
|
||||
.active_table
|
||||
%h3.my-orders= t(:transaction_history)
|
||||
%distributor.active_table_node.row.animate-repeat{"ng-if" => "Orders.orders_by_distributor.length > 0", "ng-repeat" => "(key, distributor) in Orders.orders_by_distributor",
|
||||
"ng-controller" => "DistributorNodeCtrl",
|
||||
"ng-class" => "{'closed' : !open(), 'open' : open(), 'inactive' : !distributor.active}",
|
||||
id: "{{distributor.hash}}"}
|
||||
.small-12.columns
|
||||
= render partial: "spree/users/skinny"
|
||||
= render partial: "spree/users/fat"
|
||||
.message{"ng-if" => "Orders.orders_by_distributor.length == 0", "ng-bind" => "::'you_have_no_orders_yet' | t"}
|
||||
|
||||
= render partial: "shared/footer"
|
||||
|
||||
@@ -80,6 +80,21 @@ en:
|
||||
show_all: Show all
|
||||
show_all_with_more: "Show All (%{num} More)"
|
||||
cancel: Cancel
|
||||
edit: Edit
|
||||
distributors: Distributors
|
||||
order_cycles: Order Cycles
|
||||
enterprise_limit: Enterprise Limit
|
||||
bulk_order_management: Bulk Order Management
|
||||
enterprises: Enterprises
|
||||
enterprise_groups: Groups
|
||||
reports: Reports
|
||||
variant_overrides: Inventory
|
||||
more: More
|
||||
spree_products: Spree Products
|
||||
all: All
|
||||
current: Current
|
||||
available: Available
|
||||
dashboard: Dashboard
|
||||
|
||||
admin:
|
||||
# Common properties / models
|
||||
@@ -99,6 +114,9 @@ en:
|
||||
sku: SKU
|
||||
tags: Tags
|
||||
variant: Variant
|
||||
weight: Weight
|
||||
volume: Volume
|
||||
items: Items
|
||||
|
||||
# General form elements
|
||||
quick_search: Quick Search
|
||||
@@ -107,6 +125,8 @@ en:
|
||||
end_date: "End Date"
|
||||
unsaved_changes: "You have unsaved changes"
|
||||
form_invalid: "Form contains missing or invalid fields"
|
||||
clear_filters: Clear Filters
|
||||
clear: Clear
|
||||
|
||||
columns: Columns
|
||||
actions: Actions
|
||||
@@ -190,6 +210,7 @@ en:
|
||||
edit: 'Edit'
|
||||
update_address: 'Update Address'
|
||||
confirm_delete: 'Sure to delete?'
|
||||
search_by_email: "Search by email/code..."
|
||||
|
||||
cache_settings:
|
||||
show:
|
||||
@@ -218,6 +239,7 @@ en:
|
||||
new_button: New Enterprise Group
|
||||
|
||||
products:
|
||||
unit_name_placeholder: 'eg. bunches'
|
||||
bulk_edit:
|
||||
unit: Unit
|
||||
display_as: Display As
|
||||
@@ -299,6 +321,8 @@ en:
|
||||
abn_placeholder: eg. 99 123 456 789
|
||||
acn: ACN
|
||||
acn_placeholder: eg. 123 456 789
|
||||
display_invoice_logo: Display logo in invoices
|
||||
invoice_text: Add customized text at the end of invoices
|
||||
contact:
|
||||
name: Name
|
||||
name_placeholder: eg. Gustav Plum
|
||||
@@ -371,17 +395,25 @@ en:
|
||||
shopfront_requires_login_tip: "Choose whether customers must login to view the shopfront or if it's visible to everybody."
|
||||
shopfront_requires_login_false: "Public"
|
||||
shopfront_requires_login_true: "Visible to registered customers only"
|
||||
recommend_require_login: "We recommend to require users to login when orders can be changed."
|
||||
allow_guest_orders: "Guest orders"
|
||||
allow_guest_orders_tip: "Allow checkout as guest or require a registered user."
|
||||
allow_guest_orders_false: "Require login to order"
|
||||
allow_guest_orders_true: "Allow guest checkout"
|
||||
allow_order_changes: "Change orders"
|
||||
allow_order_changes_tip: "Allow customers to change their order as long the order cycle is open."
|
||||
allow_order_changes_false: "Placed orders cannot be changed / cancelled"
|
||||
allow_order_changes_true: "Customers can change / cancel orders while order cycle is open"
|
||||
shopfront_message: Shopfront Message
|
||||
shopfront_message_placeholder: >
|
||||
An optional explanation for customers detailing how your shopfront works,
|
||||
to be displayed above the product list on your shop page.
|
||||
shopfront_closed_message: Shopfront Closed Message
|
||||
shopfront_closed_message_placeholder: >
|
||||
A message which provides a more detailed explanation about why your shop is
|
||||
closed and/or when customers can expect it to open again. This is displayed
|
||||
on your shop only when you have no active order cycles (ie. shop is closed).
|
||||
shopfront_category_ordering: Shopfront Category Ordering
|
||||
open_date: Open Date
|
||||
close_date: Close Date
|
||||
social:
|
||||
@@ -523,12 +555,25 @@ en:
|
||||
invoice_style2?: Use the alternative invoice model that includes total tax breakdown per rate and tax rate info per item (not yet suitable for countries displaying prices excluding tax)
|
||||
enable_receipt_printing?: Show options for printing receipts using thermal printers in order dropdown?
|
||||
|
||||
# Frontend views
|
||||
#
|
||||
# These keys are referenced relatively like `t('.message')` in
|
||||
# app/views/checkout/_already_ordered.html.haml.
|
||||
#
|
||||
checkout:
|
||||
already_ordered:
|
||||
cart: "cart"
|
||||
message_html: "You have an order for this order cycle already. Check the %{cart} to see the items you ordered before. You can also cancel items as long as the order cycle is open."
|
||||
home:
|
||||
hubs:
|
||||
show_closed_shops: "Show closed shops"
|
||||
hide_closed_shops: "Hide closed shops"
|
||||
show_on_map: "Show all on the map"
|
||||
shared:
|
||||
menu:
|
||||
cart:
|
||||
checkout: "Checkout now"
|
||||
already_ordered_products: "Already ordered in this order cycle"
|
||||
register_call:
|
||||
selling_on_ofn: "Interested in getting on the Open Food Network?"
|
||||
register: "Register here"
|
||||
@@ -604,6 +649,7 @@ en:
|
||||
terms_of_service: "Terms of service"
|
||||
on_demand: On demand
|
||||
none: None
|
||||
not_allowed: Not allowed
|
||||
|
||||
label_shops: "Shops"
|
||||
label_map: "Map"
|
||||
@@ -626,7 +672,6 @@ en:
|
||||
items: "items"
|
||||
cart_headline: "Your shopping cart"
|
||||
total: "Total"
|
||||
checkout: "Checkout now"
|
||||
cart_updating: "Updating cart..."
|
||||
cart_empty: "Cart empty"
|
||||
cart_edit: "Edit your cart"
|
||||
@@ -635,15 +680,6 @@ en:
|
||||
card_securitycode: "Security Code"
|
||||
card_expiry_date: Expiry Date
|
||||
|
||||
ofn_cart_headline: "Current cart for:"
|
||||
ofn_cart_distributor: "Distributor:"
|
||||
ofn_cart_oc: "Order cycle:"
|
||||
ofn_cart_from: "From:"
|
||||
ofn_cart_to: "To:"
|
||||
ofn_cart_product: "Product:"
|
||||
ofn_cart_quantitiy: "Quantity:"
|
||||
ofn_cart_send: "Buy me"
|
||||
|
||||
ie_warning_headline: "Your browser is out of date :-("
|
||||
ie_warning_text: "For the best Open Food Network experience, we strongly recommend upgrading your browser:"
|
||||
ie_warning_chrome: Download Chrome
|
||||
@@ -743,6 +779,7 @@ en:
|
||||
order_billing_address: Billing address
|
||||
order_delivery_on: Delivery on
|
||||
order_delivery_address: Delivery address
|
||||
order_delivery_time: Delivery time
|
||||
order_special_instructions: "Your notes:"
|
||||
order_pickup_time: Ready for collection
|
||||
order_pickup_instructions: Collection Instructions
|
||||
@@ -751,6 +788,8 @@ en:
|
||||
order_includes_tax: (includes tax)
|
||||
order_payment_paypal_successful: Your payment via PayPal has been processed successfully.
|
||||
order_hub_info: Hub Info
|
||||
order_back_to_store: Back To Store
|
||||
order_back_to_cart: Back To Cart
|
||||
|
||||
bom_tip: "Use this page to alter product quantities across multiple orders. Products may also be removed from orders entirely, if required."
|
||||
|
||||
@@ -860,6 +899,11 @@ See the %{link} to find out more about %{sitename}'s features and to start using
|
||||
hubs_distance: Closest to
|
||||
hubs_distance_filter: "Show me shops near %{location}"
|
||||
|
||||
shop_changeable_orders_alert_html:
|
||||
one: Your order with <a href='%{path}' target='_blank'>%{shop} / %{order}</a> is open for review. You can make changes until %{oc_close}.
|
||||
other: You have <a href='%{path}' target='_blank'>%{count} orders with %{shop}</a> currently open for review. You can make changes until %{oc_close}.
|
||||
orders_changeable_orders_alert_html: This order has been confirmed, but you can make changes until <strong>%{oc_close}</strong>.
|
||||
|
||||
products_clear_all: Clear all
|
||||
products_showing: "Showing:"
|
||||
products_with: with
|
||||
@@ -1005,7 +1049,7 @@ See the %{link} to find out more about %{sitename}'s features and to start using
|
||||
orders_edit_checkout: Checkout
|
||||
orders_form_empty_cart: "Empty cart"
|
||||
orders_form_subtotal: Produce subtotal
|
||||
orders_form_admin: Admin and handling
|
||||
orders_form_admin: Admin & Handling
|
||||
orders_form_total: Total
|
||||
orders_oc_expired_headline: Orders have closed for this order cycle
|
||||
orders_oc_expired_text: "Sorry, orders for this order cycle closed %{time} ago! Please contact your hub directly to see if they can accept late orders."
|
||||
@@ -1015,7 +1059,18 @@ See the %{link} to find out more about %{sitename}'s features and to start using
|
||||
orders_oc_expired_phone: "Phone:"
|
||||
orders_show_title: Order Confirmation
|
||||
orders_show_time: Order ready on
|
||||
orders_show_number: Order confirmation
|
||||
orders_show_order_number: "Order #%{number}"
|
||||
orders_show_cancelled: Cancelled
|
||||
orders_show_confirmed: Confirmed
|
||||
orders_your_order_has_been_cancelled: "Your order has been cancelled"
|
||||
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"
|
||||
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?
|
||||
|
||||
products_cart_distributor_choice: "Distributor for your order:"
|
||||
products_cart_distributor_change: "Your distributor for this order will be changed to %{name} if you add this product to your cart."
|
||||
@@ -1122,6 +1177,7 @@ See the %{link} to find out more about %{sitename}'s features and to start using
|
||||
enterprise_long_desc: "Long Description"
|
||||
enterprise_long_desc_placeholder: "This is your opportunity to tell the story of your enterprise - what makes you different and wonderful? We'd suggest keeping your description to under 600 characters or 150 words."
|
||||
enterprise_long_desc_length: "%{num} characters / up to 600 recommended"
|
||||
enterprise_limit: Enterprise Limit
|
||||
enterprise_abn: "ABN"
|
||||
enterprise_abn_placeholder: "eg. 99 123 456 789"
|
||||
enterprise_acn: "ACN"
|
||||
@@ -1262,6 +1318,7 @@ Please follow the instructions there to make your enterprise visible on the Open
|
||||
calculator_values: "Calculator values"
|
||||
flat_percent_per_item: "Flat Percent (per item)"
|
||||
new_order_cycles: "New Order Cycles"
|
||||
new_order_cycle: "New Order Cycle"
|
||||
select_a_coordinator_for_your_order_cycle: "Select a coordinator for your order cycle"
|
||||
edit_order_cycle: "Edit Order Cycle"
|
||||
roles: "Roles"
|
||||
@@ -1282,6 +1339,7 @@ Please follow the instructions there to make your enterprise visible on the Open
|
||||
price: "Price"
|
||||
on_hand: "On hand"
|
||||
save_changes: "Save Changes"
|
||||
order_saved: "Order Saved"
|
||||
spree_admin_overview_enterprises_header: "My Enterprises"
|
||||
spree_admin_overview_enterprises_footer: "MANAGE MY ENTERPRISES"
|
||||
spree_admin_enterprises_hubs_name: "Name"
|
||||
@@ -1324,6 +1382,8 @@ Please follow the instructions there to make your enterprise visible on the Open
|
||||
edit_profile_details: "Edit profile details"
|
||||
edit_profile_details_etc: "Change your profile description, images, etc."
|
||||
order_cycle: "Order Cycle"
|
||||
order_cycles: "Order Cycles"
|
||||
enterprises: "Enterprises"
|
||||
remove_tax: "Remove tax"
|
||||
enterprise_terms_of_service: "Enterprise Terms of Service"
|
||||
enterprises_require_tos: "Enterprises must accept Terms of Service"
|
||||
@@ -1542,6 +1602,10 @@ Please follow the instructions there to make your enterprise visible on the Open
|
||||
now_out_of_stock: is now out of stock.
|
||||
only_n_remainging: "now only has %{num} remaining."
|
||||
|
||||
producers:
|
||||
signup:
|
||||
start_free_profile: "Start with a free profile, and expand when you're ready!"
|
||||
|
||||
spree:
|
||||
admin:
|
||||
products:
|
||||
@@ -1558,7 +1622,11 @@ Please follow the instructions there to make your enterprise visible on the Open
|
||||
date_picker:
|
||||
format: ! '%Y-%m-%d'
|
||||
js_format: 'yy-mm-dd'
|
||||
inventory: Inventory
|
||||
zipcode: Postcode
|
||||
orders:
|
||||
bought:
|
||||
item: "Already ordered in this order cycle"
|
||||
shipment_states:
|
||||
backorder: backorder
|
||||
partial: partial
|
||||
@@ -1596,3 +1664,46 @@ Please follow the instructions there to make your enterprise visible on the Open
|
||||
orders:
|
||||
invoice:
|
||||
tax_invoice: "TAX INVOICE: "
|
||||
payment_states:
|
||||
balance_due: balance due
|
||||
completed: completed
|
||||
checkout: checkout
|
||||
credit_owed: credit owed
|
||||
failed: failed
|
||||
paid: paid
|
||||
pending: pending
|
||||
processing: processing
|
||||
void: void
|
||||
invalid: invalid
|
||||
shipment_states:
|
||||
backorder: backorder
|
||||
partial: partial
|
||||
pending: pending
|
||||
ready: ready
|
||||
shipped: shipped
|
||||
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.
|
||||
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.
|
||||
weight: Weight (per kg)
|
||||
zipcode: Postcode
|
||||
users:
|
||||
show:
|
||||
open_orders: Open Orders
|
||||
transaction_history: Transaction History
|
||||
open_orders:
|
||||
order: Order
|
||||
shop: Shop
|
||||
changes_allowed_until: Changes Allowed Until
|
||||
items: Items
|
||||
total: Total
|
||||
edit: Edit
|
||||
cancel: Cancel
|
||||
closed: Closed
|
||||
until: Until
|
||||
|
||||
@@ -8,7 +8,7 @@ es:
|
||||
failure:
|
||||
invalid: |
|
||||
Correo o contraseña inválidos.
|
||||
¿Fue un invitado la vez pasada? Tal vez necesite crear una cuenta o recuperar su contraseña.
|
||||
¿Has sido invitada? Tal vez necesites crear una cuenta o recuperar tu contraseña.
|
||||
enterprise_confirmations:
|
||||
enterprise:
|
||||
confirmed: Gracias, tu dirección de email ha sido confirmada.
|
||||
@@ -83,9 +83,11 @@ es:
|
||||
clear_all: Limpiar todo
|
||||
start_date: "Fecha de inicio"
|
||||
end_date: "Fecha de finalización"
|
||||
form_invalid: "El formulario contiene campos vacíos o inválidos"
|
||||
columns: Columnas
|
||||
actions: Acciones
|
||||
viewing: "Viendo: %{current_view_name}"
|
||||
description: Descripción
|
||||
whats_this: ¿Qué es esto?
|
||||
tag_has_rules: "Reglas existentes para esta etiqueta: %{num}"
|
||||
has_one_rule: "Tiene una regla"
|
||||
@@ -189,6 +191,9 @@ es:
|
||||
inherits_properties?: ¿Propiedades heredadas?
|
||||
available_on: Disponible en
|
||||
av_on: "Disp. en"
|
||||
properties:
|
||||
property_name: Nombre de la Propiedad
|
||||
inherited_property: Propiedad Heredada
|
||||
variants:
|
||||
to_order_tip: "Los artículos hechos según demanda no tienen un nivel de stock, como por ejemplo panes hechos según demanda."
|
||||
variant_overrides:
|
||||
@@ -324,7 +329,7 @@ es:
|
||||
create_one_button: Crear una ahora
|
||||
no_method_yet: Todavía no tienes ningún método de envío.
|
||||
shop_preferences:
|
||||
shopfront_requires_login: "Publicidad visible en la tienda?"
|
||||
shopfront_requires_login: "¿Visibilidad pública de la tienda?"
|
||||
shopfront_requires_login_tip: "Elije si los clientes deben iniciar sesión para ver la tienda o si es visible para todos."
|
||||
shopfront_requires_login_false: "Público"
|
||||
shopfront_requires_login_true: "Visible solo para consumidores registrados"
|
||||
@@ -396,7 +401,7 @@ es:
|
||||
producer_hub_description_text: Tu organización es la columna vertebral de un sistema de consumo local. Agrega productos tuyos o de otras organizaciones y véndelo a través de tu tienda en Open Food Network.
|
||||
profile: Solo perfil
|
||||
get_listing: Obtener un listado
|
||||
profile_description_text: La gente podrá encontrarte y ponerse en contacto contigo en Open Food Network. Su empresa será visible en el mapa y se podrá buscar en los listados.
|
||||
profile_description_text: La gente podrá encontrarte y ponerse en contacto contigo en Open Food Network. Su organización será visible en el mapa y se podrá buscar en los listados.
|
||||
hub_shop: Tienda
|
||||
hub_shop_text: Vender la producción de otros
|
||||
hub_shop_description_text: Tu organización es la columna vertebral de un sistema de consumo local. Agrega productos de otras organizaciones y véndelo a través de tu tienda en Open Food Network.
|
||||
@@ -424,6 +429,16 @@ es:
|
||||
next_step: Siguiente paso
|
||||
choose_starting_point: 'Elige tu punto de partida:'
|
||||
order_cycles:
|
||||
edit:
|
||||
advanced_settings: Configuración Avanzada
|
||||
update_and_close: Actualizar y Cerrar
|
||||
choose_products_from: 'Escoger Productos desde:'
|
||||
pickup_time_tip: Cuándo estarán disponibles para el consumidor las ordenes de este ciclo
|
||||
pickup_instructions_tip: Esta instrucciones se muestran a los consumidores después de que completen un pedido.
|
||||
exchange_form:
|
||||
pickup_instructions_placeholder: "Instrucciones de recogida"
|
||||
pickup_time_placeholder: "Listo para ( Fecha / Hora)"
|
||||
receival_instructions_placeholder: "Instrucciones de recepción"
|
||||
advanced_settings:
|
||||
title: Configuración Avanzada
|
||||
choose_product_tip: Puedes optar por restringir todos los productos disponibles (entrantes y salientes), solo a los de %{inventory} inventario.
|
||||
@@ -441,7 +456,7 @@ es:
|
||||
distributor: Distribuidor
|
||||
products: Productos
|
||||
tags: Etiquetas
|
||||
delivery_detaisl: Detalles de Recogida / Entrega
|
||||
delivery_details: Detalles de Recogida / Entrega
|
||||
debug_info: Información de Debug
|
||||
name_and_timing_form:
|
||||
name: Nombre
|
||||
@@ -459,13 +474,7 @@ es:
|
||||
customer_instructions_placeholder: Notas de la recogida o entrega
|
||||
products: Productos
|
||||
fees: Comisiones
|
||||
edit:
|
||||
advanced_settings: Configuración Avanzada
|
||||
update_and_close: Actualizar y Cerrar
|
||||
producer_properties:
|
||||
form:
|
||||
property: Propiedad
|
||||
value: Valor
|
||||
index:
|
||||
title: Propiedades de la Productora
|
||||
shared:
|
||||
@@ -490,7 +499,7 @@ es:
|
||||
login: "login"
|
||||
register: "registro"
|
||||
contact: "contactar"
|
||||
require_customer_login: "Esta tienda es solo para usuarios registrados."
|
||||
require_customer_login: "Esta tienda es solo para consumidores registrados."
|
||||
require_login_html: "Haz %{login} si ya tienes una cuenta. De lo contrario puedes %{register}."
|
||||
require_customer_html: "%{contact} %{enterprise} para convertirte en miembro."
|
||||
invoice_billing_address: "Dirección de facturación:"
|
||||
@@ -602,7 +611,7 @@ es:
|
||||
footer_sites_community: "Comunidad"
|
||||
footer_sites_userguide: "Guía de usuario"
|
||||
footer_secure: "Seguro y de confianza."
|
||||
footer_secure_text: "Open Food Network usa cifrado SSL (RSA de 2048 bit) en todo lado para mantener privada la información de compras y pagos. Nuestros servidores no almacenan los detalles de tarjetas de créditos y los pagos son procesados por servicios que cumplen con PCI."
|
||||
footer_secure_text: "Open Food Network usa cifrado SSL (RSA de 2048 bit) en toda su plataforma para mantener privada la información de compras y pagos. Nuestros servidores no almacenan los detalles de tarjetas de créditos y los pagos son procesados por servicios que cumplen con PCI."
|
||||
footer_contact_headline: "Mantenerse en contacto"
|
||||
footer_contact_email: "Envíenos un correo"
|
||||
footer_nav_headline: "Navegar"
|
||||
@@ -619,7 +628,7 @@ es:
|
||||
brandstory_part1: "Nosotros empezamos desde abajo. Con granjeros y productoras listas para contar sus historias con orgullo y autenticidad. Con distribuidoras listas para conectar gente con productos de forma justa y honesta. Con compradores que creen que mejores decisiones de compras semanales pueden seriamente cambiar el mundo."
|
||||
brandstory_part2: "Luego necesitamos una forma de hacerlo real. Una forma de empoderar a todos los que producen, venden y compran comida. Una forma de contar todas las historias, de manejar todas las logísticas. Una forma de convertir transacción en transformación todos los días."
|
||||
brandstory_part3: "Entonces contruímos un mercado que nivela el campo de juego. Es transparente, de forma que crea relaciones reales. Es de código abierto, de forma que todos son los dueños."
|
||||
brandstory_part4: "Funciona en todo lado. Cambia todo."
|
||||
brandstory_part4: "Funciona en cualquier lugar. Lo cambia todo."
|
||||
brandstory_part5_strong: "Le llamamos Open Food Network."
|
||||
brandstory_part6: "Todos amamos la comida. Ahora podemos amar nuestro sistema de comida también."
|
||||
learn_body: "Explora modelos, historias y recursos para ayudarte a desarrollar tu organización. Encuentra formación, eventos y otras oportunidades para aprender de tus compañeros."
|
||||
@@ -628,18 +637,18 @@ es:
|
||||
connect_cta: "Explorar"
|
||||
system_headline: "Compras - cómo funcionan."
|
||||
system_step1: "1. Buscar"
|
||||
system_step1_text: "Busque comida local y de temporada en nuestras tiendas diversas e independientes. Busque por barrio o categoría de comida, o si prefiere servicio de entrega o recogerla."
|
||||
system_step1_text: "Busca comida local y de temporada en nuestras tiendas diversas e independientes. Busca por barrio y participa en un grupo de consumo."
|
||||
system_step2: "2. Comprar"
|
||||
system_step2_text: "Transforma tu consumo con comida local y asequible de diversas productoras ¡Conoce las historias detrás de tu comida y la gente que la hace!"
|
||||
system_step3: "3. Recoger / Servicio de entrega"
|
||||
system_step3_text: "Espere su entrega, o visite a su productora o grupo de consumo para una conexión más personal con su comida. Compra de comida tan diversa como la naturaleza lo previó."
|
||||
system_step3: "3. Recogida"
|
||||
system_step3_text: "Visita tu Grupo de Consumo para un vínculo más directo con las productoras y tus vecinos, también puedes comprar directamente a algunas productoras o centrales de compras. Compra tu comida de una manera tan diversa como la naturaleza."
|
||||
cta_headline: "Compras que hacen el mundo un mejor lugar."
|
||||
cta_label: "Estoy listo"
|
||||
stats_headline: "Estamos creando un nuevo sistema de comida."
|
||||
stats_producers: "productoras de comida"
|
||||
stats_shops: "tiendas de comida"
|
||||
stats_shoppers: "compradores de comida"
|
||||
stats_orders: "pedidos de comida"
|
||||
cta_label: "Estoy lista"
|
||||
stats_headline: "Entre todas creamos un nuevo sistema de producción, distribución y consumo."
|
||||
stats_producers: "productoras"
|
||||
stats_shops: "tiendas"
|
||||
stats_shoppers: "consumidoras"
|
||||
stats_orders: "pedidos"
|
||||
checkout_title: Revisar el carrito
|
||||
checkout_now: Revisare el carrito ahora
|
||||
checkout_order_ready: Pedido preparado para
|
||||
@@ -690,14 +699,14 @@ es:
|
||||
email_registered: "ahora es parte de"
|
||||
email_userguide_html: "La Guía de Usuario con soporte detallado para configurar su Productora o Grupo de Consumo está aquí: %{link}"
|
||||
email_admin_html: "Puede administrar su cuenta iniciando sesión en %{link} o haciendo clic en el engrane arriba a la derecha de la página de inicio, y seleccionando Administración."
|
||||
email_community_html: "También tenemos un foro en líea para la discusión comunal relacionada con el programa OFN y los retos únicos del funcionamiento de una empresa de alimentación. Lo invitamos a unirse. Estamos evolucionando de forma constante y su aporte en este formo le dará forma a lo que pase luego. %{link}"
|
||||
email_community_html: "También tenemos un foro en líea para la discusión comunal relacionada con el programa OFN y los retos únicos del funcionamiento de una organización de alimentación. Lo invitamos a unirse. Estamos evolucionando de forma constante y su aporte en este formo le dará forma a lo que pase luego. %{link}"
|
||||
join_community: "Unirse a la comunidad"
|
||||
email_help: "Si tiene dificultades, revise nuestras preguntas frecuentes, navegue el foro o haga una entrada de con tema de 'Soporte' y ¡alguien le ayudará!"
|
||||
email_confirmation_greeting: "Hola, %{contact}!"
|
||||
email_confirmation_profile_created: "¡Se creó un un perfil para %{name} con éxito! Para activar su Perfil necesitamos que confirme esta dirección de correos."
|
||||
email_confirmation_click_link: "Por favor haga clic en el enlace de abajo para confirmar el correo electrónico y continuar configurando su perfil."
|
||||
email_confirmation_link_label: "Confirmar este correo electrónico »"
|
||||
email_confirmation_help_html: "Después de confirmar el correo electrónico puede accesar su cuenta de administración para esta empresa. Vea el %{link} para encontrar más acerca de las características de %{sitename} e iniciar a usar su perfil o tienda en línea."
|
||||
email_confirmation_help_html: "Después de confirmar el correo electrónico puedes acceder a tu cuenta de administración para esta organización. Visita %{link} para encontrar más información sobre las características de %{sitename} y empieza a usar tu perfil o tienda online."
|
||||
email_confirmation_userguide: "Guía de Usuario"
|
||||
email_social: "Conecte con nosotros:"
|
||||
email_contact: "Envíenos un correo electrónico:"
|
||||
@@ -732,7 +741,7 @@ es:
|
||||
email_signup_login: Su nombre de usuario
|
||||
email_signup_email: Tu correo electrónico para el inicio de sesión es
|
||||
email_signup_shop_html: "Puede empezar a comprar en línea ahora 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 empresa de alimentos, estamos emocionados de que formes parte de la red."
|
||||
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}"
|
||||
producer_mail_greeting: "Estimada"
|
||||
producer_mail_text_before: "Ahora tenemos todas los pedidos de las consumidoras para la siguiente ronda."
|
||||
@@ -750,7 +759,7 @@ es:
|
||||
shopping_contact_social: "Seguir"
|
||||
shopping_groups_part_of: "es parte de:"
|
||||
shopping_producers_of_hub: "productoras de %{hub}:"
|
||||
enterprises_next_closing: "Cerrando próximo pedido"
|
||||
enterprises_next_closing: "Los pedidos se cerrarán"
|
||||
enterprises_ready_for: "Listo para"
|
||||
enterprises_choose: "Escoger cuando quieres tu pedido:"
|
||||
hubs_buy: "Comprar:"
|
||||
@@ -834,7 +843,7 @@ es:
|
||||
modal_how_pickup: Recogida, entrega y gastos de envío
|
||||
modal_how_pickup_explained: Algunos grupos de consumo hacen entregas hasta su puerta, mientras otros requieren que recojas las compras. Puedes ver que opciones están disponibles en su página de inicio, y seleccionar cuál te gustaría en las páginas de compras y revisión. Las entregas costarán más, y el precio cambia entre grupos de consumo. Cada grupo es un punto de venta con operaciones y logística independientes, las diferencias son normales y deseables.
|
||||
modal_how_more: Aprender más
|
||||
modal_how_more_explained: "Si quiere aprender más acerca del Open Food Network, cómo trabaja y colaborar, revise:"
|
||||
modal_how_more_explained: "Si quieres saber más acerca de Open Food Network, cómo trabajamos y nos organizamos, visita:"
|
||||
modal_producers: "Productoras"
|
||||
modal_producers_explained: "Nuestras productoras hacen todos los deliciosos alimentos que puedes comprar en Open Food Network."
|
||||
producers_about: Acerca de nosotras
|
||||
@@ -852,7 +861,7 @@ es:
|
||||
producers_signup_headline: Productoras de alimentos, empoderadas.
|
||||
producers_signup_motivation: Venda sus alimentos y cuente sus historias en distintos nuevos mercados. Ahorre tiempo y dinero en costos administrativos. Apoyamos la innovación sin el riesgo. Hemos nivelado el campo de juego.
|
||||
producers_signup_send: Únase ahora
|
||||
producers_signup_enterprise: Cuentas de empresa
|
||||
producers_signup_enterprise: Cuentas de organización
|
||||
producers_signup_studies: Historias de nuestras productoras.
|
||||
producers_signup_cta_headline: ¡Únase ahora!
|
||||
producers_signup_cta_action: Únase ahora
|
||||
@@ -885,7 +894,7 @@ es:
|
||||
shops_signup_headline: Grupos de Consumo, sin límites.
|
||||
shops_signup_motivation: Cualquiera que sea su modelo, lo apoyamos. De cualquier forma que cambie, estamos con usted. Somos una organización sin findes de lucro, independiente, y de código abierto. Somos los socios de software con los que ha soñado.
|
||||
shops_signup_action: Únase ahora
|
||||
shops_signup_pricing: Cuentas de empresa
|
||||
shops_signup_pricing: Cuentas de organización
|
||||
shops_signup_stories: Historias de nuestros grupos de consumo.
|
||||
shops_signup_help: Estamos listos para ayudar.
|
||||
shops_signup_help_text: Usted necesita un mejor retorno. Usted necesita nuevos compradores y socios de logística. Usted necesita que su historia sea contada a través de ventas al por mayor, al detalle y en la mesa de la cocina.
|
||||
@@ -931,9 +940,9 @@ es:
|
||||
going_back_to_home_page: "Le estamos llevando de vuelta a la página de inicio"
|
||||
creating: Creando
|
||||
updating: Actualizando
|
||||
failed_to_create_enterprise: "Error al crear su empresa."
|
||||
failed_to_create_enterprise_unknown: "Error al crear su empresa.\nAsegúrese que haya llenado todos los campos de forma completa."
|
||||
failed_to_update_enterprise_unknown: "Error al actualizar su empresa.\nAsegurese que haya llenado todos los campos de forma completa."
|
||||
failed_to_create_enterprise: "Error al crear tu organización."
|
||||
failed_to_create_enterprise_unknown: "Error al crear tu organización.\nAsegúrate de haber rellenado todos los campos."
|
||||
failed_to_update_enterprise_unknown: "Error al actualizar tu organización.\nAsegúrate de haber rellenado todos los campos."
|
||||
order_not_saved_yet: "Su orden aun no ha sido guardada. ¡Denos unos cuantos segundos para terminar!"
|
||||
filter_by: "Fitrar por"
|
||||
hide_filters: "Esconder filtros"
|
||||
@@ -982,7 +991,7 @@ es:
|
||||
continue: "Continuar"
|
||||
limit_reached_headline: "¡Ay no!"
|
||||
limit_reached_message: "¡Ha alcanzado el límite!"
|
||||
limit_reached_text: "Ha alcanzado el límite del número de empresas de las que puede ser dueño en el"
|
||||
limit_reached_text: "Has alcanzado el límite de organizaciones de las que puedes gestionar en "
|
||||
limit_reached_action: "Regresar a la página de inicio"
|
||||
select_promo_image: "Paso 3. Seleccione una imagen promocional"
|
||||
promo_image_tip: "Consejo: Se muestra como una pancarta, el tamaño preferido es 1200×260px"
|
||||
@@ -1000,14 +1009,14 @@ es:
|
||||
review_logo: "Paso 2. Revise su logo"
|
||||
review_logo_tip: "Consejo: para mejores resultados, su logo debería llenar el espacio disponible"
|
||||
logo_placeholder: "El logo aparecerá aquí para ser revisado cuando se haya subido"
|
||||
enterprise_about_headline: "¡Buena esa!"
|
||||
enterprise_about_headline: "¡Seguimos!"
|
||||
enterprise_about_message: "Ahora vamos a profundizar en los detalles acerca de"
|
||||
enterprise_success: "¡Éxito! %{enterprise} se agregó a la Open Food Network "
|
||||
enterprise_success: "¡Felicidades! %{enterprise} se agregó a Open Food Network "
|
||||
enterprise_registration_exit_message: "Si sale de este asistente en cualquier etapa, debe hacer clic en el enlace de confirmación el el correo electrónico que recibió. Esto lo llevará a la interfaz de administración en la que puede continuar configurando su perfil."
|
||||
enterprise_description: "Descripción corta"
|
||||
enterprise_description_placeholder: "Una oración corta que describa su empresa"
|
||||
enterprise_description_placeholder: "Una frase corta que describa tu organización"
|
||||
enterprise_long_desc: "Descripción larga"
|
||||
enterprise_long_desc_placeholder: "Esta es su oportunidad de contar la historia de su empresa - ¿qué la hace diferente y asombrosa? Le sugerimos mantener la descripción en menos de 600 caracteres o 150 palabras."
|
||||
enterprise_long_desc_placeholder: "Esta es tu oportunidad de contar la historia de tu organización - ¿qué la hace diferente? Sugerimos mantener la descripción en menos de 600 caracteres o 150 palabras."
|
||||
enterprise_long_desc_length: "%{num} caracteres / recomentdamos hasta 600"
|
||||
enterprise_abn: "ABN"
|
||||
enterprise_abn_placeholder: "eg. 99 123 456 789"
|
||||
@@ -1036,15 +1045,15 @@ es:
|
||||
registration_logo: "Su imagen de logo"
|
||||
registration_promo_image: "Imagen en formato apaisado para su perfil"
|
||||
registration_about_us: "Texto 'Acerca de nosotras'"
|
||||
registration_outcome_headline: "¿Qué recibo?"
|
||||
registration_outcome_headline: "¿Para qué sirve?"
|
||||
registration_outcome1_html: "Su perfil le ayuda a las personas a <strong>encontrarle</strong> y <strong>contactarle</strong> en la Open Food Network."
|
||||
registration_outcome2: "Use este espacio para contar la historia de su empresa, para ayudar a dirigir conexiones a su presencia social y en línea."
|
||||
registration_outcome3: "También es un primer paso para negociar en la Open Food Network, o abrir una tienda en línea."
|
||||
registration_outcome2: "Usa este espacio para contar la historia de tu organización, para ayudar a crear vínculos con tu comunidad."
|
||||
registration_outcome3: "También es el primer paso para empezar en Open Food Network, o abrir una tienda online."
|
||||
registration_finished_headline: "¡Terminado!"
|
||||
registration_finished_thanks: "Gracias por llenar los detalles de %{enterprise}."
|
||||
registration_finished_login: "Puede cambiar o actualizar su negocio en cualquier etapa iniciando sesión en Open Food Network y yendo a Admin."
|
||||
registration_finished_activate: "Activar %{enterprise}."
|
||||
registration_finished_activate_instruction_html: "Hemos enviado un correo de confirmación a <strong>%{email}</strong> si no ha sido activado antes.<br/> Siga las instrucciones ahí para hacer su empresa visible en Open Food Network."
|
||||
registration_finished_activate_instruction_html: "Hemos enviado un correo de confirmación a <strong>%{email}</strong> si no has activado tu cuenta ya.<br/> Sigue las instrucciones para hacer tu organización visible en Open Food Network."
|
||||
registration_finished_action: "Página de inicio de Open Food Network"
|
||||
registration_type_headline: "¡Último paso para agregar %{enterprise}!"
|
||||
registration_type_question: "¿Eres una productora?"
|
||||
@@ -1054,15 +1063,15 @@ es:
|
||||
registration_type_producer_help: "Las productoras hacen cosas deliciosas para comer y/o beber. Eres una productora si lo cultivas, lo haces crecer, lo preparas, lo horneas, lo fermentas, lo ordeñas, ..."
|
||||
registration_type_no_producer_help: "Si no eres una productora, probablemente conozcas a alguien que venda o distribuya comida. También podrías convertirte en un grupo de consumo u otro tipo de organización."
|
||||
create_profile: "Crear Perfil"
|
||||
registration_images_headline: "¡Gracias!"
|
||||
registration_images_description: "¡Suba algunas buenas fotografías así el perfil se verá muy bien! :)"
|
||||
registration_images_headline: "¡Ya casi lo tenemos!"
|
||||
registration_images_description: "¡Sube algunas fotografías así el perfil se verá mucho mejor! :)"
|
||||
registration_detail_headline: "Empecemos..."
|
||||
registration_detail_enterprise: "¡Bien! Primero necesitamos saber un poco más acerca de tu organización:"
|
||||
registration_detail_producer: "¡Bien! Primero necesitamos saber un poco más acerca de su productora:"
|
||||
registration_detail_enterprise: "¡Bien! Primero necesitamos saber un poco más sobre tu organización:"
|
||||
registration_detail_producer: "¡Bien! Primero necesitamos saber un poco más sobre tu productora:"
|
||||
registration_detail_name_enterprise: "Nombre de la Organización:"
|
||||
registration_detail_name_producer: "Nombre de la granja:"
|
||||
registration_detail_name_placeholder: "e.j. Cooperativa de Consum Pastanaga Feliç"
|
||||
registration_detail_name_error: "Por favor elija un nombre único para su empresa"
|
||||
registration_detail_name_error: "Por favor elije un nombre único para tu organización"
|
||||
registration_detail_address1: "Línea de dirección 1:"
|
||||
registration_detail_address1_placeholder: "e.j. Torrent de l'Olla 24"
|
||||
registration_detail_address1_error: "Ingrese una dirección"
|
||||
@@ -1162,7 +1171,7 @@ es:
|
||||
producer: "Productora"
|
||||
product: "Producto"
|
||||
price: "Precio"
|
||||
on_hand: "En mano"
|
||||
on_hand: "Disponibles"
|
||||
save_changes: "Guardar Cambios"
|
||||
spree_admin_overview_enterprises_header: "Mis Organizaciones"
|
||||
spree_admin_overview_enterprises_footer: "GESTIONAR MIS ORGANIZACIONES"
|
||||
@@ -1209,7 +1218,7 @@ es:
|
||||
enterprise_terms_of_service: "Términos del Servicio de la Organización"
|
||||
enterprises_require_tos: "Las organizaciones deben aceptar los Términos del Servicio"
|
||||
enterprise_tos_link: "Enlace a los Términos del Servicio de la Organización"
|
||||
enterprise_tos_message: "Queremos trabajar con personas que compartan nuestros objetivos y valores. Por ello, pedimos a las nuevas empresas que acepten"
|
||||
enterprise_tos_message: "Queremos trabajar con personas que compartan nuestros objetivos y valores. Por ello, pedimos a las nuevas organizaciones que acepten"
|
||||
enterprise_tos_link_text: "Términos del Servicio."
|
||||
enterprise_tos_agree: "Estoy de acuerdo con los Términos del Servicio"
|
||||
tax_settings: "Configuración de Impuestos"
|
||||
@@ -1354,10 +1363,9 @@ es:
|
||||
Tu organización no se activará completamente hasta que selecciones un
|
||||
paquete de las opciones de la izquierda.
|
||||
|
||||
choose_package_text2: >+
|
||||
choose_package_text2: >
|
||||
Haz click en una opción para ver información más detallada acerca de
|
||||
cada paquete, y pulsa el botón rojo GUARDAR cuando hayas terminado.
|
||||
|
||||
profile_only: Solo perfil
|
||||
profile_only_cost: "COSTE: GRATUITO PARA SIEMPRE"
|
||||
profile_only_text1: >+
|
||||
@@ -1484,3 +1492,13 @@ es:
|
||||
orders:
|
||||
invoice:
|
||||
tax_invoice: "IMPUESTOS FACTURA:"
|
||||
user_mailer:
|
||||
reset_password_instructions:
|
||||
request_sent_text: |
|
||||
Se ha solicitado el cambio de tu contraseña.
|
||||
Si tu no lo has solicitado simplemente ignora este email.
|
||||
link_text: >
|
||||
Si has solicitado esta acción haz click en el siguiente enlace:
|
||||
issue_text: |
|
||||
Si el enlace no funciona prueba a copiarlo y pegarlo en tu navegador.
|
||||
Si los problemas continúan no dudes en contactarnos.
|
||||
|
||||
@@ -24,7 +24,6 @@ fr:
|
||||
welcome_to: 'Bienvenue sur '
|
||||
site_meta_description: "Tout commence dans le sol. Avec ces paysans, agriculteurs, producteurs, engagés pour une agriculture durable et régénératrice, et désireux de partager leur histoire et leur passion avec fierté. Avec ces distributeurs souhaitant reconnecter les individus à leurs aliments et aux gens qui les produisent, soutenir les prises de conscience, dans une démarche de transparence, d'honnêteté, en assurant une juste rémunération des producteurs. Avec ces acheteurs qui croient que de meilleures décisions d'achats peuvent ..."
|
||||
search_by_name: Recherche par nom ou département...
|
||||
producers: 'Producteurs Français'
|
||||
producers_join: Les producteurs et autres hubs basés en France sont invités à rejoindre Open Food France.
|
||||
charges_sales_tax: Soumis à la TVA?
|
||||
print_invoice: "Imprimer la facture"
|
||||
@@ -62,6 +61,18 @@ fr:
|
||||
show_all: Tout voir
|
||||
show_all_with_more: "Voir tous (%{num} en plus)"
|
||||
cancel: Annuler
|
||||
edit: Modifier
|
||||
distributors: Distributeurs
|
||||
bulk_order_management: Gestion des commandes par lot
|
||||
enterprise_groups: Groupes
|
||||
reports: Rapports
|
||||
variant_overrides: Catalogue boutique
|
||||
more: Plus
|
||||
spree_products: Produits
|
||||
all: Tous
|
||||
current: Actuel
|
||||
available: Disponible
|
||||
dashboard: Tableau de bord
|
||||
admin:
|
||||
date: Date
|
||||
email: Email
|
||||
@@ -79,13 +90,20 @@ fr:
|
||||
sku: Référence produit
|
||||
tags: Tags
|
||||
variant: Variante
|
||||
weight: Poids
|
||||
volume: Volume
|
||||
items: Pièce
|
||||
quick_search: Recherche rapide
|
||||
clear_all: Vider
|
||||
start_date: "Date de début"
|
||||
end_date: "Date de fin"
|
||||
form_invalid: "Le formulaire contient des champs manquants ou invalides"
|
||||
clear_filters: Annuler les filtres
|
||||
clear: Annuler
|
||||
columns: Colonnes
|
||||
actions: Actions
|
||||
viewing: "Vous regardez: %{current_view_name}"
|
||||
description: Description
|
||||
whats_this: Qu'est-ce que c'est?
|
||||
tag_has_rules: "Règles existantes pour ce tag: %{num}"
|
||||
has_one_rule: "a une règle"
|
||||
@@ -158,6 +176,7 @@ fr:
|
||||
edit: 'Modifier'
|
||||
update_address: 'Mettre à jour l''adresse'
|
||||
confirm_delete: 'Confirmer suppression?'
|
||||
search_by_email: "Recherche par email/code..."
|
||||
cache_settings:
|
||||
show:
|
||||
title: Mise en cache
|
||||
@@ -181,6 +200,7 @@ fr:
|
||||
index:
|
||||
new_button: Nouveau groupe d'entreprises
|
||||
products:
|
||||
unit_name_placeholder: 'ex: botte'
|
||||
bulk_edit:
|
||||
unit: Unité
|
||||
display_as: Affiché
|
||||
@@ -189,13 +209,16 @@ fr:
|
||||
inherits_properties?: Hériter des propriétés producteur?
|
||||
available_on: Disponible sur
|
||||
av_on: "Disp. sur"
|
||||
properties:
|
||||
property_name: Nom du label
|
||||
inherited_property: Label producteur appliqué par défaut
|
||||
variants:
|
||||
to_order_tip: "Les articles fabriqués sur commande n'ont pas un niveau de stock défini, comme des pains faits à la main."
|
||||
variant_overrides:
|
||||
loading_flash:
|
||||
loading_inventory: Catalogue boutique en cours de chargement...
|
||||
index:
|
||||
title: Stock
|
||||
title: Catalogue boutique
|
||||
description: Utilisez cette page pour gérer le catalogue de votre entreprise. Les détails produits saisis ici remplaceront ceux de la page "Produit" pour votre entreprise uniquement.
|
||||
enable_reset?: Autoriser réinitialisation du stock (retour configurations par défaut)?
|
||||
inherit?: Hériter?
|
||||
@@ -249,12 +272,14 @@ fr:
|
||||
desc_short: Description (en bref)
|
||||
desc_short_placeholder: Parlez de votre entreprise en une ou deux phrases
|
||||
desc_long: A propos
|
||||
desc_long_placeholder: Parlez de vous à vos acheteurs! Ces informations seront visibles sur votre profil public.
|
||||
desc_long_placeholder: Parlez de vous à vos acheteurs ! Ces informations seront visibles sur votre profil public.
|
||||
business_details:
|
||||
abn: SIRET
|
||||
abn_placeholder: 'ex: 404 833 048 00022'
|
||||
acn: n° TVA intracommunautaire
|
||||
acn_placeholder: 'ex: 404 833 048'
|
||||
display_invoice_logo: Afficher le logo sur la facture
|
||||
invoice_text: Ajouter une mention spécifique en bas des factures
|
||||
contact:
|
||||
name: Nom
|
||||
name_placeholder: 'ex: Bernard Michelet'
|
||||
@@ -268,7 +293,7 @@ fr:
|
||||
name: Nom
|
||||
fee_type: Type de marge
|
||||
manage_fees: Gérer les marges et commissions
|
||||
no_fees_yet: Vous n'avez pas encore définies de commissions
|
||||
no_fees_yet: Vous n'avez pas encore défini de commissions
|
||||
create_button: Créer une commission
|
||||
images:
|
||||
logo: Logo
|
||||
@@ -290,9 +315,9 @@ fr:
|
||||
payment_methods:
|
||||
name: Nom
|
||||
applies: Active?
|
||||
manage: Gérer les options de paiement
|
||||
not_method_yet: Vous n'avez pas encore d'option de paiement.
|
||||
create_button: Créer une nouvelle option de paiement
|
||||
manage: Gérer les méthodes de paiement
|
||||
not_method_yet: Vous n'avez pas encore de méthode de paiement.
|
||||
create_button: Créer une nouvelle méthode de paiement
|
||||
create_one_button: En créer une maintenant
|
||||
primary_details:
|
||||
name: Nom
|
||||
@@ -312,7 +337,7 @@ fr:
|
||||
visible_in_search_tip: Indiquez si vous souhaitez ou ne souhaitez pas que votre entreprise apparaisse sur la carte et dans la liste des boutiques.
|
||||
visible: Visible
|
||||
not_visible: Invisible
|
||||
permalink: Nom affiché dans l'URL (sans espace)
|
||||
permalink: Nom pour URL (sans espace)
|
||||
permalink_tip: "Ce nom permanent est utilisé pour créer l'url de votre boutique: %{link}ma-boutique/shop"
|
||||
link_to_front: Lien URL de la boutique
|
||||
link_to_front_tip: C'est le lien qui permet d'accéder en direct à votre boutique sur Open Food France.
|
||||
@@ -321,25 +346,33 @@ fr:
|
||||
applies: Active?
|
||||
manage: Gérer les méthodes de livraison
|
||||
create_button: Créer nouvelle méthode de livraison
|
||||
create_one_button: Créer une commission
|
||||
create_one_button: En créer une maintenant
|
||||
no_method_yet: Vous n'avez pas encore paramétré de méthode de livraison.
|
||||
shop_preferences:
|
||||
shopfront_requires_login: "Boutique visible par tous?"
|
||||
shopfront_requires_login_tip: "Choisissez si les acheteurs doivent être connectés pour voir la boutique ou si la boutique est visible par tout le monde."
|
||||
shopfront_requires_login_false: "Visible par tous"
|
||||
shopfront_requires_login_true: "Visible uniquement pour les acheteurs logués"
|
||||
recommend_require_login: "Nous recommandons de demander aux utilisateurs de se connecter si vous souhaitez leur permettre de modifier leur commande."
|
||||
allow_guest_orders: "Commandes des invités"
|
||||
allow_guest_orders_tip: "Autoriser la commande en tant qu'invité ou demander que l'acheteur soit logué."
|
||||
allow_guest_orders_false: "Demander que l'acheteur se logue pour pouvoir commander"
|
||||
allow_guest_orders_true: "Autoriser les commandes en mode invité"
|
||||
allow_order_changes: "Modifier la commande"
|
||||
allow_order_changes_tip: "Permettre aux acheteurs de modifier leur commande tant que le cycle de vente est ouvert."
|
||||
allow_order_changes_false: "Les commandes validées ne peuvent plus être modifiées / annulées"
|
||||
allow_order_changes_true: "Les acheteurs peuvent modifier / valider leurs commandes tant que le cycle de vente est ouvert"
|
||||
shopfront_message: Message d'accueil boutique ouverte
|
||||
shopfront_message_placeholder: >
|
||||
Vous pouvez ici expliquer à vos acheteurs comment votre boutique fonctionne.
|
||||
Ce texte s'affiche dans votre boutique, au-dessus de la liste de produits.
|
||||
shopfront_closed_message: Message d'accueil boutique fermée
|
||||
shopfront_closed_message_placeholder: >
|
||||
Vous pouvez ici expliquer à vos acheteurs pourquoi votre boutique est
|
||||
fermée et/ou quand elle ouvrira. Ce texte s'affiche uniquement quand
|
||||
il n'y a pas de cycle de vente en cours (donc quand votre boutique est
|
||||
fermée).
|
||||
shopfront_category_ordering: Ordre d'affichage des catégories
|
||||
open_date: Date d'ouverture
|
||||
close_date: Date de fermeture
|
||||
social:
|
||||
@@ -423,6 +456,16 @@ fr:
|
||||
next_step: Etape suivante
|
||||
choose_starting_point: 'Choisissez par où commencer:'
|
||||
order_cycles:
|
||||
edit:
|
||||
advanced_settings: Paramétrages avancés
|
||||
update_and_close: Mettre à jour et fermer
|
||||
choose_products_from: 'Choisir produits depuis :'
|
||||
pickup_time_tip: Date/heure à laquelle les commandes pour ce cycle de vente seront à disposition de / livrées à l'acheteur.
|
||||
pickup_instructions_tip: Ces instructions seront affichées à l'acheteur une fois sa commande passée.
|
||||
exchange_form:
|
||||
pickup_instructions_placeholder: "Modalités de retrait/livraison"
|
||||
pickup_time_placeholder: "Prêt pour (ex : jour + créneau horaire)"
|
||||
receival_instructions_placeholder: "Modalités de livraison"
|
||||
advanced_settings:
|
||||
title: Paramétrages avancés
|
||||
choose_product_tip: Vous pouvez choisir de limiter le choix des produits pouvant être mis en vente dans votre boutique à ceux figurant dans le catalogue boutique de %{inventory}.
|
||||
@@ -432,15 +475,15 @@ fr:
|
||||
coordinator_fees:
|
||||
add: Ajouter commission coordinateur
|
||||
form:
|
||||
incoming: Produits entrants (constitution du catalogue boutique pour le cycle de vente)
|
||||
incoming: Produits entrants (pouvant être mis en vente par les hubs)
|
||||
supplier: Fournisseur
|
||||
receival_details: Détails livraison produits
|
||||
fees: Commission
|
||||
outgoing: Produits sortants (vendus via un ou plusieurs hubs)
|
||||
outgoing: Produits sortants (mis en vente par/via un ou plusieurs hubs)
|
||||
distributor: Hub (distributeur)
|
||||
products: Produits
|
||||
tags: Tags
|
||||
delivery_detaisl: Détails de livraison / retrait
|
||||
delivery_details: Précisions retrait / livraison
|
||||
debug_info: Informations de débogage
|
||||
name_and_timing_form:
|
||||
name: Nom
|
||||
@@ -458,13 +501,7 @@ fr:
|
||||
customer_instructions_placeholder: Commentaires pour le retrait / la livraison
|
||||
products: Produits
|
||||
fees: Commissions
|
||||
edit:
|
||||
advanced_settings: Paramétrages avancés
|
||||
update_and_close: Mettre à jour et fermer
|
||||
producer_properties:
|
||||
form:
|
||||
property: Propriétés / labels
|
||||
value: Détail
|
||||
index:
|
||||
title: Propriétés / labels du producteur
|
||||
shared:
|
||||
@@ -475,12 +512,20 @@ fr:
|
||||
title: Paramètres de facturation
|
||||
invoice_style2?: Utiliser le modèle de facture alternatif qui détaille le montant de TVA agrégé par taux et l'information du taux de TVA par produit (pas adapté pour les instances affichant les prix HT)
|
||||
enable_receipt_printing?: Afficher les options d'impression de tickets de caisse dans le menu déroulant des commandes?
|
||||
checkout:
|
||||
already_ordered:
|
||||
cart: "panier"
|
||||
message_html: "Vous avez déjà passé une commande pour ce cycle de vente. Vérifiez votre %{cart} pour voir les produits commandés. Vous pouvez annuler ou modifier votre commande jusqu'à la fermeture du cycle de vente."
|
||||
home:
|
||||
hubs:
|
||||
show_closed_shops: "Aficher les boutiques fermées"
|
||||
hide_closed_shops: "Masquer les boutiques fermées"
|
||||
show_on_map: "Tout afficher sur la carte"
|
||||
shared:
|
||||
menu:
|
||||
cart:
|
||||
checkout: "Finaliser la commande"
|
||||
already_ordered_products: "Déjà commandé dans ce cycle de vente"
|
||||
register_call:
|
||||
selling_on_ofn: "Vous souhaitez proposer vos produits sur Open Food France?"
|
||||
register: "Démarrez ici"
|
||||
@@ -550,6 +595,7 @@ fr:
|
||||
terms_of_service: "Conditions d'utilisation"
|
||||
on_demand: A volonté
|
||||
none: Aucun
|
||||
not_allowed: Non autorisé
|
||||
label_shops: "Boutiques"
|
||||
label_map: "Carte"
|
||||
label_producers: "Producteurs"
|
||||
@@ -570,21 +616,12 @@ fr:
|
||||
items: "produits"
|
||||
cart_headline: "Votre panier"
|
||||
total: "Total"
|
||||
checkout: "Régler la commande"
|
||||
cart_updating: "Mettre à jour le panier"
|
||||
cart_empty: "Panier vide"
|
||||
cart_edit: "Modifier votre panier"
|
||||
card_number: Numéro de carte
|
||||
card_securitycode: "Cryptogramme visuel"
|
||||
card_expiry_date: Date d'expiration
|
||||
ofn_cart_headline: "Panier actuel pour:"
|
||||
ofn_cart_distributor: "Distributeur:"
|
||||
ofn_cart_oc: "Cycle de vente:"
|
||||
ofn_cart_from: "De:"
|
||||
ofn_cart_to: "Pour:"
|
||||
ofn_cart_product: "Produit:"
|
||||
ofn_cart_quantitiy: "Quantité:"
|
||||
ofn_cart_send: "Acheter"
|
||||
ie_warning_headline: "Votre navigateur n'est pas à jour :-("
|
||||
ie_warning_text: "Pour une expérience optimale sur Open Food France, nous vous recommandons fortement de mettre à jour votre navigateur:"
|
||||
ie_warning_chrome: Télécharger Chrome
|
||||
@@ -606,7 +643,7 @@ fr:
|
||||
footer_contact_email: "Nous écrire"
|
||||
footer_nav_headline: "Naviguer"
|
||||
footer_join_headline: "Nous rejoindre"
|
||||
footer_join_body: "Créer une liste, un répertoire de boutiques ou groupes sur Open Food France."
|
||||
footer_join_body: "Créer un profil, une boutique ou un groupe sur Open Food France."
|
||||
footer_join_cta: "Je veux en savoir plus!"
|
||||
footer_legal_call: "Lire nos"
|
||||
footer_legal_tos: "Termes et conditions"
|
||||
@@ -639,19 +676,19 @@ fr:
|
||||
stats_shops: "boutiques"
|
||||
stats_shoppers: "acheteurs"
|
||||
stats_orders: "commandes"
|
||||
checkout_title: Paiement
|
||||
checkout_now: Régler la commande
|
||||
checkout_title: Finalisation commande
|
||||
checkout_now: Passer la commande
|
||||
checkout_order_ready: Commande prête pour
|
||||
checkout_hide: Masquer
|
||||
checkout_expand: Afficher
|
||||
checkout_headline: "Ok, prêt pour le paiement?"
|
||||
checkout_as_guest: "Régler en mode invité"
|
||||
checkout_headline: "Ok, prêt à finaliser la commande?"
|
||||
checkout_as_guest: "Passer commande en mode invité"
|
||||
checkout_details: "Vos informations"
|
||||
checkout_billing: "Informations de facturation"
|
||||
checkout_default_bill_address: "Sauvegarder comme adresse de facturation par défaut"
|
||||
checkout_shipping: Informations de livraison
|
||||
checkout_default_ship_address: "Sauvegarder comme adresse de livraison par défaut"
|
||||
checkout_method_free: Gratuit
|
||||
checkout_method_free: Pas de frais supplémentaires
|
||||
checkout_address_same: Adresse de livraison identique à l'adresse de facturation?
|
||||
checkout_ready_for: "Prêt pour:"
|
||||
checkout_instructions: "Commentaires ou demandes spécifiques?"
|
||||
@@ -669,14 +706,17 @@ fr:
|
||||
order_billing_address: Adresse de facturation
|
||||
order_delivery_on: Livraison prévue
|
||||
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_instructions: Instructions de retrait
|
||||
order_produce: Produit
|
||||
order_total_price: Total
|
||||
order_includes_tax: (TVA inclue)
|
||||
order_includes_tax: (dont TVA)
|
||||
order_payment_paypal_successful: Votre paiement via PayPal a été réalisé avec succès.
|
||||
order_hub_info: Hub Info
|
||||
order_back_to_store: Retour à la boutique
|
||||
order_back_to_cart: Retour au panier
|
||||
bom_tip: "Utilisez cette page pour modifier les quantités sur plusieurs commandes à la fois. Les produits peuvent aussi être supprimés des commandes si nécessaire."
|
||||
unsaved_changes_warning: "Des modifications n'ont pas été enregistrées et seront perdues si vous continuez."
|
||||
unsaved_changes_error: "Les champs entourés en rouge contiennent des erreurs."
|
||||
@@ -739,7 +779,7 @@ fr:
|
||||
producer_mail_delivery_instructions: "Modalités de livraison des produits:"
|
||||
producer_mail_signoff: "Merci et belle fin de journée!"
|
||||
shopping_oc_closed: La boutique est actuellement fermée
|
||||
shopping_oc_closed_description: "Veuillez attendre l'ouverture du prochain cycle de vente (ou contactez-nous directement pour voir si nous pouvez accépter une commande tardive)"
|
||||
shopping_oc_closed_description: "Veuillez attendre l'ouverture du prochain cycle de vente (ou contactez-nous directement pour voir si nous pouvons accepter une commande tardive)"
|
||||
shopping_oc_last_closed: "Le dernier cycle de vente s'est terminé il y a %{distance_of_time}"
|
||||
shopping_oc_next_open: "Le prochain cycle de vente ouvrira dans %{distance_of_time}"
|
||||
shopping_tabs_about: "A propos de %{distributor}"
|
||||
@@ -768,6 +808,10 @@ fr:
|
||||
hubs_intro: Passez commande près de chez vous
|
||||
hubs_distance: Le plus près de
|
||||
hubs_distance_filter: "Afficher les boutiques près de %{location}"
|
||||
shop_changeable_orders_alert_html:
|
||||
one: Votre commande avec <a href='%{path}' target='_blank'>%{shop} / %{order}</a> est ouverte pour vérification. Vous pouvez effectuer des modification jusqu'à %{oc_close}.
|
||||
other: Vous avez <a href='%{path}' target='_blank'>%{count} commandes avec %{shop}</a>ouvertes à la vérification. Vous pouvez effectuer des modifications jusqu'à %{oc_close}.
|
||||
orders_changeable_orders_alert_html: Cette commande a été confirmée, mais vous pouvez effectuer des modifications jusqu'à <strong>%{oc_close}</strong>.
|
||||
products_clear_all: Vider
|
||||
products_showing: "Afficher:"
|
||||
products_with: avec
|
||||
@@ -775,7 +819,7 @@ fr:
|
||||
products_loading: "Produits en cours de chargement..."
|
||||
products_updating_cart: "Actualisation du panier..."
|
||||
products_cart_empty: "Panier vide"
|
||||
products_edit_cart: "Modifier votre panier"
|
||||
products_edit_cart: "Valider votre panier"
|
||||
products_from: de
|
||||
products_change: "Aucun changement à sauvegarder."
|
||||
products_update_error: "Échec de l'enregistrement dû à:"
|
||||
@@ -874,9 +918,9 @@ fr:
|
||||
sell_hubs_detail: "Créer un profil pour votre entreprise de distribution ou organisation sur OFFrance. A tout moment vous pourrez créer une boutique multi-fournisseurs."
|
||||
sell_groups_detail: "Créer un répertoire sur mesure (regroupant différents producteurs et hubs de distribution) pour votre région ou votre organisation."
|
||||
sell_user_guide: "En savoir plus en explorant le guide utilisateur."
|
||||
sell_listing_price: "L'inscription sur OFFrance est gratuite. Ouvrir est gérer une boutique sur OFFrance ou créer un groupe sur OFFrance pour votre organisation ou réseau régional, n'est pas gratuit, mais le prix est libre: soit 2% du chiffre d'affaire (ou autre forme de contribution libre designée par votre hub), soit une contribution \"en compétences\" à Open Food France (développement de fonctionnalités, recherche de financement, support utilisateur, etc.), soit un mix des deux."
|
||||
sell_listing_price: "La création d'un profil sur OFFrance est entièrement libre. Si vous ouvrez et gérez une boutique sur OFFrance, ou créez un groupe pour votre organisation ou réseau régional, nous vous invitons à contribuer au commun Open Food France que vous utilisez. En effet, faire tourner la plateforme Open Food France a un coût, et nous comptons sur VOUS pour contribuer à couvrir ces frais de fonctionnement (location et maintenance des serveurs, support utilisateur, nouveaux développements...). Par exemple, en reversant sous forme de don à l'association 2% de votre chiffre d'affaire, et/ou un montant fixe tous les mois. Vous pouvez aussi contribuer au commun \"en compétences\" (développement de fonctionnalités, recherche de financement, support utilisateur, etc.)"
|
||||
sell_embed: "Nous pouvons aussi intégrer votre boutique OFFrance dans votre propre site web ou construire un site web d'alimentation locale sur mesure pour votre région."
|
||||
sell_ask_services: "Nous consulter sur les services OFFrance."
|
||||
sell_ask_services: "Nous consulter sur les services des partenaires OFFrance."
|
||||
shops_title: Boutiques
|
||||
shops_headline: Des achats qui transforment.
|
||||
shops_text: Les aliments poussent selon des cycles naturels, les fermiers récoltent en cycles. Alors ici, nous achetons aussi en cycles. Si un cycle de vente est terminé, attendez le suivant ou demandez des infos au hub !
|
||||
@@ -894,10 +938,10 @@ fr:
|
||||
orders_edit_headline: Votre panier
|
||||
orders_edit_time: Commande prête pour
|
||||
orders_edit_continue: Poursuivre mes achats
|
||||
orders_edit_checkout: Régler ma commande
|
||||
orders_edit_checkout: Passer ma commande
|
||||
orders_form_empty_cart: "Vider le panier"
|
||||
orders_form_subtotal: Sous-total
|
||||
orders_form_admin: Admin et opérations
|
||||
orders_form_admin: Admin & traitements
|
||||
orders_form_total: Total
|
||||
orders_oc_expired_headline: Les commandes ne sont plus possibles pour ce cycle de vente.
|
||||
orders_oc_expired_text: "Désolé, les commandes pour ce cycle de vente ont été clôturées il y a %{time}! Veuillez contacter directement le hub pour voir s'il accepte les commandes tardives."
|
||||
@@ -907,7 +951,18 @@ fr:
|
||||
orders_oc_expired_phone: "Téléphone:"
|
||||
orders_show_title: Confirmation de commande
|
||||
orders_show_time: Commande prête pour
|
||||
orders_show_number: Confirmation de commande
|
||||
orders_show_order_number: "Commande #%{number}"
|
||||
orders_show_cancelled: Annulée
|
||||
orders_show_confirmed: Confirmée
|
||||
orders_your_order_has_been_cancelled: "Votre commande a été annulée"
|
||||
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.'
|
||||
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 ?
|
||||
products_cart_distributor_choice: "Distributeur pour votre commande:"
|
||||
products_cart_distributor_change: "Vore distributeur pour cette commande sera dorénavant %{name} si vous ajoutez ce produit à votre panier."
|
||||
products_cart_distributor_is: "Votre distributeur pour cette commande est %{name}."
|
||||
@@ -926,7 +981,7 @@ fr:
|
||||
remember_me: Se souvenir de moi
|
||||
are_you_sure: "Confirmer?"
|
||||
orders_open: Boutique ouverte
|
||||
closing: "Fermeture"
|
||||
closing: "Fermeture "
|
||||
going_back_to_home_page: "Retour à la page d'accueil"
|
||||
creating: Création
|
||||
updating: Mettre à jour
|
||||
@@ -938,7 +993,7 @@ fr:
|
||||
hide_filters: "Masquer les filtres"
|
||||
one_filter_applied: "1 filtre appliqué"
|
||||
x_filters_applied: "filtres appliqués"
|
||||
submitting_order: "Votre commande est en cours d'envoi: veuillez patienter"
|
||||
submitting_order: "Votre commande est en cours d'envoi : veuillez patienter"
|
||||
confirm_hub_change: "Confirmer? Cette action modifiera la boutique sélectionnée et tous les articles de votre panier seront effacés."
|
||||
confirm_oc_change: "Confirmer? Cette action modifiera le cycle de vente sélectionné et tous les articles de votre panier seront effacés."
|
||||
location_placeholder: "Saisissez une localisation..."
|
||||
@@ -1008,13 +1063,14 @@ fr:
|
||||
enterprise_long_desc: "Description longue"
|
||||
enterprise_long_desc_placeholder: "Vous pouvez ici raconter l'histoire de votre organisation - votre projet, les valeurs que vous défendez. Nous vous conseillons de ne pas dépasser 600 caractères ou 150 mots."
|
||||
enterprise_long_desc_length: "%{num} caractères / inférieur à 600 recommandé"
|
||||
enterprise_limit: Nombre max d'entreprises
|
||||
enterprise_abn: "SIRET"
|
||||
enterprise_abn_placeholder: "ex: 404 833 048 00022"
|
||||
enterprise_acn: "n° TVA intracommunautaire"
|
||||
enterprise_acn_placeholder: "ex: 404 833 048"
|
||||
enterprise_tax_required: "Merci de choisir."
|
||||
enterprise_final_step: "Dernière étape!"
|
||||
enterprise_social_text: "Comment trouver la boutique en ligne %{enterprise}"
|
||||
enterprise_social_text: "Comment trouver la boutique en ligne %{enterprise} ?"
|
||||
website: "Site internet"
|
||||
website_placeholder: "ex: openfoodfrance.fr"
|
||||
facebook: "Facebook"
|
||||
@@ -1106,7 +1162,7 @@ fr:
|
||||
you_have_no_orders_yet: "Vous n'avez pas encore de commande"
|
||||
running_balance: "Solde courant"
|
||||
outstanding_balance: "Solde restant"
|
||||
admin_entreprise_relationships: "Liens inter-entreprises"
|
||||
admin_entreprise_relationships: "Permissions inter-entreprises"
|
||||
admin_entreprise_relationships_everything: "Tout"
|
||||
admin_entreprise_relationships_permits: "autorise"
|
||||
admin_entreprise_relationships_seach_placeholder: "Chercher"
|
||||
@@ -1116,7 +1172,7 @@ fr:
|
||||
admin_entreprise_groups_owner: "Manager principal"
|
||||
admin_entreprise_groups_on_front_page: "Sur la page d'accueil?"
|
||||
admin_entreprise_groups_entreprise: "Entreprises"
|
||||
admin_entreprise_groups_data_powertip: "L'utilisateur principal en charge de ce groupe."
|
||||
admin_entreprise_groups_data_powertip: "Le manager principal en charge de ce groupe."
|
||||
admin_entreprise_groups_data_powertip_logo: "Il s'agit du logo du groupe"
|
||||
admin_entreprise_groups_data_powertip_promo_image: "Cette image est affichée en haut du profil Groupe."
|
||||
admin_entreprise_groups_contact: "Contact"
|
||||
@@ -1129,7 +1185,7 @@ fr:
|
||||
admin_entreprise_groups_contact_state_id: "Département"
|
||||
admin_entreprise_groups_contact_country_id: "Pays"
|
||||
admin_entreprise_groups_web: "Liens web"
|
||||
admin_entreprise_groups_web_twitter: "ex: @OpenFoodNet"
|
||||
admin_entreprise_groups_web_twitter: "ex: @OpenFoodNet_fr"
|
||||
admin_entreprise_groups_web_website_placeholder: "ex: www.monepicerieenligne.fr"
|
||||
admin_order_cycles: "Gérer les cycles de vente"
|
||||
open: "Ouvre"
|
||||
@@ -1143,6 +1199,7 @@ fr:
|
||||
calculator_values: "Valeurs applicables"
|
||||
flat_percent_per_item: "Montant net (par produit)"
|
||||
new_order_cycles: "Nouveau cycle de vente"
|
||||
new_order_cycle: "Nouveau Cycle de Vente"
|
||||
select_a_coordinator_for_your_order_cycle: "Choisissez un coordinateur pour votre cycle de vente"
|
||||
edit_order_cycle: "Modifier le cycle de vente"
|
||||
roles: "Roles"
|
||||
@@ -1163,12 +1220,13 @@ fr:
|
||||
price: "Prix"
|
||||
on_hand: "En stock"
|
||||
save_changes: "Sauvegarder les modifications"
|
||||
order_saved: "Commande Sauvegardée"
|
||||
spree_admin_overview_enterprises_header: "Mes entreprises"
|
||||
spree_admin_overview_enterprises_footer: "GÉRER MES ENTREPRISES"
|
||||
spree_admin_enterprises_hubs_name: "Nom"
|
||||
spree_admin_enterprises_create_new: "CRÉER NOUVELLE"
|
||||
spree_admin_enterprises_shipping_methods: "Options de livraison"
|
||||
spree_admin_enterprises_fees: "Marges de l'entreprise"
|
||||
spree_admin_enterprises_shipping_methods: "Méthodes de livraison"
|
||||
spree_admin_enterprises_fees: "Marges et commissions"
|
||||
spree_admin_enterprises_none_create_a_new_enterprise: "CRÉER UNE NOUVELLE ENTREPRISE"
|
||||
spree_admin_enterprises_none_text: "Vous n'avez pas encore d'entreprise"
|
||||
spree_admin_enterprises_producers_name: "Nom"
|
||||
@@ -1177,7 +1235,7 @@ fr:
|
||||
spree_admin_enterprises_producers_order_cycles: "Produits dans le cycle de vente"
|
||||
spree_admin_enterprises_tabs_hubs: "HUBS"
|
||||
spree_admin_enterprises_tabs_producers: "PRODUCTEURS"
|
||||
spree_admin_enterprises_producers_manage_order_cycles: "GÉRER MES CYCLES DE VENTES"
|
||||
spree_admin_enterprises_producers_manage_order_cycles: "GÉRER LES CYCLES DE VENTES"
|
||||
spree_admin_enterprises_producers_manage_products: "GÉRER LES PRODUITS"
|
||||
spree_admin_enterprises_producers_orders_cycle_text: "Vous n'avez pas de cycle de vente actif."
|
||||
spree_admin_enterprises_any_active_products_text: "Vous n'avez aucun produit actif."
|
||||
@@ -1189,12 +1247,12 @@ fr:
|
||||
spree_admin_single_enterprise_alert_mail_sent: "Email envoyé à "
|
||||
spree_admin_overview_action_required: "Action requise"
|
||||
spree_admin_overview_check_your_inbox: "Veuillez vérifier votre boîte mail pour les prochaines étapes. Merci!"
|
||||
change_package: "Changer de pack"
|
||||
change_package: "Changer de type de compte"
|
||||
spree_admin_single_enterprise_hint: "Astuce: Pour permettre aux gens de vous trouver, activez votre visibilité "
|
||||
your_profil_live: "Votre profil en ligne"
|
||||
on_ofn_map: "sur la carte Open Food France"
|
||||
see: "Voir"
|
||||
live: "En ligne"
|
||||
live: "en ligne"
|
||||
manage: "Gérer"
|
||||
resend: "Renvoyer"
|
||||
add_and_manage_products: "Ajouter & gérer des produits"
|
||||
@@ -1204,6 +1262,8 @@ fr:
|
||||
edit_profile_details: "Modifier les informations du profil"
|
||||
edit_profile_details_etc: "Modifier la description, les images, etc."
|
||||
order_cycle: "Cycle de vente"
|
||||
order_cycles: "Cycles de Vente"
|
||||
enterprises: "Entreprises"
|
||||
remove_tax: "Retirer TVA"
|
||||
enterprise_terms_of_service: "Conditions Générales d'Utilisation"
|
||||
enterprises_require_tos: "Les entreprises doivent accepter les Conditions Générales d'Utilisation"
|
||||
@@ -1214,7 +1274,7 @@ fr:
|
||||
tax_settings: "Paramètres TVA"
|
||||
products_require_tax_category: "vous devez choisir la TVA applicable"
|
||||
admin_shared_address_1: "Adresse"
|
||||
admin_shared_address_2: "Adresse (cont.)"
|
||||
admin_shared_address_2: "Adresse (suite)"
|
||||
admin_share_city: "Ville"
|
||||
admin_share_zipcode: "Code postal"
|
||||
admin_share_country: "Pays"
|
||||
@@ -1265,7 +1325,7 @@ fr:
|
||||
due_date: "Date d'échéance:"
|
||||
account_code: "Code compte:"
|
||||
equals: "Egal"
|
||||
contains: "contients"
|
||||
contains: "contient"
|
||||
discount: "Réduction"
|
||||
filter_products: "Filtrer les produits"
|
||||
delete_product_variant: "La variante ne peut pas être supprimée!"
|
||||
@@ -1287,14 +1347,14 @@ fr:
|
||||
adrdress: "Adresse"
|
||||
contact: "Contact"
|
||||
social: "Réseaux sociaux"
|
||||
business_details: "N° fiscaux"
|
||||
properties: "Propriétés"
|
||||
business_details: "Juridique"
|
||||
properties: "Propriétés / labels"
|
||||
shipping_methods: "Méthodes de livraison"
|
||||
payment_methods: "Méthodes de paiement"
|
||||
payment_method_fee: "Frais de transaction"
|
||||
enterprise_fees: "Marges de l'entreprise"
|
||||
inventory_settings: "Paramètres de stock"
|
||||
tag_rules: "Règles des tags"
|
||||
enterprise_fees: "Marges et commissions"
|
||||
inventory_settings: "Catalogue boutique"
|
||||
tag_rules: "Règles de tag"
|
||||
shop_preferences: "Préférences boutique"
|
||||
validation_msg_relationship_already_established: "^Un lien est déjà établi entre ces entreprises."
|
||||
validation_msg_at_least_one_hub: "^Sélectionnez au moins un hub"
|
||||
@@ -1309,7 +1369,7 @@ fr:
|
||||
title: Règles de tag
|
||||
overview: Aperçu
|
||||
overview_text: >
|
||||
Les règles de tags vous permettent de paramétrer ce qui est vu ou pas
|
||||
Les règles de tag vous permettent de paramétrer ce qui est vu ou pas
|
||||
par tel ou tel type d'acheteur. Par exemple des options de livraison,
|
||||
des méthodes de paiement, des produits, ou des cycles de vente.
|
||||
by_default_rules: "Règles à appliquer \"par défaut\""
|
||||
@@ -1358,10 +1418,9 @@ fr:
|
||||
fois votre choix fait, cliquez sur le bouton rouge ENREGISTRER !
|
||||
profile_only: Profil uniquement
|
||||
profile_only_cost: "COÛT: CONTRIBUTION LIBRE"
|
||||
profile_only_text1: >+
|
||||
profile_only_text1: >
|
||||
Gagnez en visibilité, racontez votre histoire, et affichez vos coordonnées
|
||||
pour pouvoir être contactés.
|
||||
|
||||
profile_only_text2: >
|
||||
Si vous souhaitez vous concentrer sur votre activité de production,
|
||||
et laisser à d'autre le soin de distribuer vos produits, vous n'avez
|
||||
@@ -1407,7 +1466,7 @@ fr:
|
||||
Un producteur peut aussi avoir d'autres rôles, comme par exemple stocker
|
||||
et distribuer des produits d'autres producteurs à travers une boutique
|
||||
sur Open Food France.
|
||||
non_producer: Pas producteur
|
||||
non_producer: Non-producteur
|
||||
non_producer_text1: >
|
||||
Les entreprises qui ne produisent pas ne peuvent pas créer leur propre
|
||||
catalogue produits pour les vendre sur Open Food France.
|
||||
@@ -1434,6 +1493,9 @@ fr:
|
||||
à votre demande. Voilà les modifications opérées:
|
||||
now_out_of_stock: est maintenant en rupture de stock.
|
||||
only_n_remainging: "plus que %{num} en stock."
|
||||
producers:
|
||||
signup:
|
||||
start_free_profile: "Commencez par créer votre profil entreprise, et changez de formule quand vous êtes prêt !"
|
||||
spree:
|
||||
admin:
|
||||
products:
|
||||
@@ -1442,7 +1504,7 @@ fr:
|
||||
title: Edition des produits par lots
|
||||
indicators:
|
||||
title: CHARGEMENT DES PRODUITS
|
||||
no_products: "Aucun produit trouvé. Pourquoi n'en ajouté vous pas quelques-uns ?"
|
||||
no_products: "Aucun produit trouvé. Ajouter un produit ?"
|
||||
no_results: "Désolé, aucun résultat trouvé"
|
||||
variants:
|
||||
autocomplete:
|
||||
@@ -1450,24 +1512,7 @@ fr:
|
||||
date_picker:
|
||||
format: '%Y-%m-%d'
|
||||
js_format: 'aa-mm-jj'
|
||||
zipcode: Code postal
|
||||
shipment_states:
|
||||
backorder: réapprovisionnement
|
||||
partial: partiel
|
||||
pending: en attente
|
||||
ready: prêt
|
||||
shipped: envoyé
|
||||
payment_states:
|
||||
balance_due: solde dû
|
||||
completed: effectué
|
||||
checkout: Paiement
|
||||
credit_owed: Crédit acheteur
|
||||
failed: échec
|
||||
paid: payé
|
||||
pending: en attente
|
||||
processing: en traitement
|
||||
void: annuler
|
||||
invalid: Invalide
|
||||
inventory: Catalogue boutique
|
||||
order_mailer:
|
||||
invoice_email:
|
||||
hi: "Bonjour %{name}"
|
||||
@@ -1488,3 +1533,47 @@ fr:
|
||||
orders:
|
||||
invoice:
|
||||
tax_invoice: "FACTURE"
|
||||
payment_states:
|
||||
balance_due: solde dû
|
||||
completed: effectué
|
||||
checkout: passer commande
|
||||
credit_owed: crédit acheteur
|
||||
failed: échec
|
||||
paid: payé
|
||||
pending: en attente
|
||||
processing: en traitement
|
||||
void: faire un avoir
|
||||
invalid: invalide
|
||||
shipment_states:
|
||||
backorder: réapprovisionnement
|
||||
partial: partiel
|
||||
pending: en attente
|
||||
ready: prêt
|
||||
shipped: envoyé
|
||||
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.
|
||||
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.
|
||||
weight: Poids (au kg)
|
||||
zipcode: Code postal
|
||||
users:
|
||||
show:
|
||||
open_orders: Commandes Ouvertes
|
||||
transaction_history: Historique des Transactions
|
||||
open_orders:
|
||||
order: Commander
|
||||
shop: Faire mes courses
|
||||
changes_allowed_until: Modifications permises jusqu'à
|
||||
items: Pièce
|
||||
total: Total
|
||||
edit: Modifier
|
||||
cancel: Annuler
|
||||
closed: Fermée
|
||||
until: Jusqu'à
|
||||
|
||||
@@ -2,7 +2,7 @@ nb:
|
||||
activerecord:
|
||||
attributes:
|
||||
spree/order:
|
||||
payment_state: Betallingsstatus
|
||||
payment_state: Betalingsstatus
|
||||
shipment_state: Sendingsstatus
|
||||
devise:
|
||||
failure:
|
||||
@@ -24,7 +24,6 @@ nb:
|
||||
welcome_to: 'Velkommen til '
|
||||
site_meta_description: "Vi begynner fra grunnen. Med bønder og dyrkere klare til å fortelle sine historier, stolt og virkelig. Med distributører klare til å koble mennesker med produkter på en rettferdig og ærlig måte. Med kunder som tror på at ukentlige innkjøpsrutiner kan..."
|
||||
search_by_name: Søk på navn eller sted...
|
||||
producers: 'Norske Produsenter'
|
||||
producers_join: Norske produsenter er nå velkommen til å bli med i Open Food Network.
|
||||
charges_sales_tax: MVA-pliktig?
|
||||
print_invoice: "Skriv ut Faktura"
|
||||
@@ -62,6 +61,18 @@ nb:
|
||||
show_all: Vis alle
|
||||
show_all_with_more: "Vis Alle (%{num} Mer)"
|
||||
cancel: Avbryt
|
||||
edit: Endre
|
||||
distributors: Distributører
|
||||
bulk_order_management: Bulk ordrehåndtering
|
||||
enterprise_groups: Grupper
|
||||
reports: Rapporter
|
||||
variant_overrides: Varelager
|
||||
more: Mer
|
||||
spree_products: Spree Produkter
|
||||
all: Alle
|
||||
current: Nåværende
|
||||
available: Tilgjengelig
|
||||
dashboard: Dashboard
|
||||
admin:
|
||||
date: Dato
|
||||
email: Epost
|
||||
@@ -79,13 +90,20 @@ nb:
|
||||
sku: SKU
|
||||
tags: Merker
|
||||
variant: Variant
|
||||
weight: Vekt
|
||||
volume: Volum
|
||||
items: Varer
|
||||
quick_search: Hurtigsøk
|
||||
clear_all: Fjern Alt
|
||||
start_date: "Startdato"
|
||||
end_date: "Sluttdato"
|
||||
form_invalid: "Skjemaet inneholder manglende eller ugyldige felt"
|
||||
clear_filters: Fjern filtre
|
||||
clear: Fjern
|
||||
columns: Kolonner
|
||||
actions: Handlinger
|
||||
viewing: "Viser: %{current_view_name}"
|
||||
description: Beskrivelse
|
||||
whats_this: Hva er dette?
|
||||
tag_has_rules: "Gjeldende regler for denne merkelappen: %{num}"
|
||||
has_one_rule: "har én regel"
|
||||
@@ -158,6 +176,7 @@ nb:
|
||||
edit: 'Redigere'
|
||||
update_address: 'Oppdater Adresse'
|
||||
confirm_delete: 'Sikker på å slette?'
|
||||
search_by_email: "Søk på epost/kode..."
|
||||
cache_settings:
|
||||
show:
|
||||
title: Mellomlagring
|
||||
@@ -181,6 +200,7 @@ nb:
|
||||
index:
|
||||
new_button: Ny Bedriftsgruppe
|
||||
products:
|
||||
unit_name_placeholder: 'f.eks. bunter'
|
||||
bulk_edit:
|
||||
unit: Enhet
|
||||
display_as: Vis som
|
||||
@@ -189,6 +209,9 @@ nb:
|
||||
inherits_properties?: Arver Egenskaper?
|
||||
available_on: Tilgjengelig på
|
||||
av_on: "Til. på"
|
||||
properties:
|
||||
property_name: Navn på egenskap
|
||||
inherited_property: Arvet egenskap
|
||||
variants:
|
||||
to_order_tip: "Varer laget for bestilling har ikke et lagernivå, slik som ferske skiver brød laget for bestilling."
|
||||
variant_overrides:
|
||||
@@ -255,6 +278,8 @@ nb:
|
||||
abn_placeholder: f.eks. 999 000 123
|
||||
acn: Mva. nr.
|
||||
acn_placeholder: f.eks. 999 000 123
|
||||
display_invoice_logo: Vis logo i fakturaer
|
||||
invoice_text: Legg til tilpasset tekst på slutten av fakturaer
|
||||
contact:
|
||||
name: Navn
|
||||
name_placeholder: f.eks. Gustav Plum
|
||||
@@ -327,18 +352,26 @@ nb:
|
||||
shopfront_requires_login_tip: "Velg om kunder må logge inn for å se butikken eller om den er synlig for alle."
|
||||
shopfront_requires_login_false: "Offentlig"
|
||||
shopfront_requires_login_true: "Synlig kun for registrerte kunder."
|
||||
recommend_require_login: "Vi anbefaler at brukerne logger på når bestillinger kan endres."
|
||||
allow_guest_orders: "Gjestebestillinger"
|
||||
allow_guest_orders_tip: "Tillat gjestebestillinger eller krev brukerregistrering."
|
||||
allow_guest_orders_false: "Krev innlogging for å bestille"
|
||||
allow_guest_orders_true: "Tillat gjestebestilling"
|
||||
allow_order_changes: "Endre bestillinger"
|
||||
allow_order_changes_tip: "Tillat at kundene kan endre bestillingen så lenge bestillingsrunden er åpen."
|
||||
allow_order_changes_false: "Fullførte bestillinger kan ikke endres / kanselleres"
|
||||
allow_order_changes_true: "Kunder kan endre / avbestille bestillinger mens bestillingsrunden er åpen"
|
||||
shopfront_message: Melding Butikk
|
||||
shopfront_message_placeholder: >
|
||||
En valgfri forklaring for kunder med detaljer om hvordan din nettbutikk
|
||||
fungerer, for å vises over produktlisten på din side.
|
||||
shopfront_closed_message: Melding Butikk Stengt
|
||||
shopfront_closed_message_placeholder: >
|
||||
En melding som gir en mer detaljert forklaring om hvorfor din butikk
|
||||
er stengt og/eller når kunder kan forvente at den åpner igjen. Dette
|
||||
vises på din butikk kun når du ikke har noen aktive bestillingsrunder
|
||||
(dvs. butikk er stengt).
|
||||
shopfront_category_ordering: Kategorisortering Butikk
|
||||
open_date: Åpningsdato
|
||||
close_date: Stengedato
|
||||
social:
|
||||
@@ -422,6 +455,16 @@ nb:
|
||||
next_step: Neste steg
|
||||
choose_starting_point: 'Velg ditt startpunkt:'
|
||||
order_cycles:
|
||||
edit:
|
||||
advanced_settings: Avanserte Innstillinger
|
||||
update_and_close: Oppdater og Lukk
|
||||
choose_products_from: 'Velg Produkter Fra:'
|
||||
pickup_time_tip: Når bestillinger fra denne runden blir klar for kunden
|
||||
pickup_instructions_tip: Disse instruksjonene vises til kunder etter de ferdigstiller en bestilling
|
||||
exchange_form:
|
||||
pickup_instructions_placeholder: "Henteinstruksjoner"
|
||||
pickup_time_placeholder: "Klar til (dvs. Dato/Tid)"
|
||||
receival_instructions_placeholder: "Mottaksinstruksjoner"
|
||||
advanced_settings:
|
||||
title: Avanserte Innstillinger
|
||||
choose_product_tip: Du kan velge å begrense alle tilgjengelige produkter (både innkommende og utgående), til kun de i %{inventory}s varelager.
|
||||
@@ -439,7 +482,7 @@ nb:
|
||||
distributor: Distributør
|
||||
products: Produkter
|
||||
tags: Merker
|
||||
delivery_detaisl: Hentings- / Leveringsdetaljer
|
||||
delivery_details: Hente-/Leveringsdetaljer
|
||||
debug_info: Debuginformasjon
|
||||
name_and_timing_form:
|
||||
name: Navn
|
||||
@@ -457,13 +500,7 @@ nb:
|
||||
customer_instructions_placeholder: Hente- eller leveringsmerknader
|
||||
products: Produkter
|
||||
fees: Avgifter
|
||||
edit:
|
||||
advanced_settings: Avanserte Innstillinger
|
||||
update_and_close: Oppdater og Lukk
|
||||
producer_properties:
|
||||
form:
|
||||
property: Egenskap
|
||||
value: Verdi
|
||||
index:
|
||||
title: Produsentegenskaper
|
||||
shared:
|
||||
@@ -474,12 +511,20 @@ nb:
|
||||
title: Fakturainnstillinger
|
||||
invoice_style2?: Bruk den alternative fakturamodellen som inkluderer total avgiftsoppdeling pr rate og avgiftsrateinfo pr vare (passer ikke for land som viser priser ekskludert avgift)
|
||||
enable_receipt_printing?: 'Vis valg for utskrift av kvitteringer ved bruk av kvitteringsprinter i nedtrekksmeny for bestillinger? '
|
||||
checkout:
|
||||
already_ordered:
|
||||
cart: "handlekurv"
|
||||
message_html: "Du har allerede en bestilling for denne bestillingsrunden. Sjekk %{cart}en for å se varene du bestilte før. Du kan også avbryte varer så lenge bestillingsrunden er åpen."
|
||||
home:
|
||||
hubs:
|
||||
show_closed_shops: "Vis stengte butikker"
|
||||
hide_closed_shops: "Skjul stengte butikker"
|
||||
show_on_map: "Vis alle på kartet"
|
||||
shared:
|
||||
menu:
|
||||
cart:
|
||||
checkout: "Sjekk ut nå"
|
||||
already_ordered_products: "Allerede bestilt i denne bestillingsrunden"
|
||||
register_call:
|
||||
selling_on_ofn: "Interessert i å bli med i Open Food Network?"
|
||||
register: "Registrer her"
|
||||
@@ -549,6 +594,7 @@ nb:
|
||||
terms_of_service: "Vilkår"
|
||||
on_demand: Ved forespørsel
|
||||
none: Ingen
|
||||
not_allowed: Ikke tillatt
|
||||
label_shops: "Butikker"
|
||||
label_map: "Kart"
|
||||
label_producers: "Produsenter"
|
||||
@@ -569,21 +615,12 @@ nb:
|
||||
items: "varer"
|
||||
cart_headline: "Din handlekurv"
|
||||
total: "Sum"
|
||||
checkout: "Gå til kassen"
|
||||
cart_updating: "Oppdaterer handlekurv..."
|
||||
cart_empty: "Handlekurven er tom"
|
||||
cart_edit: "Rediger handlekurv"
|
||||
card_number: Kortnummer
|
||||
card_securitycode: "Sikkerhetskode"
|
||||
card_expiry_date: Utløpsdato
|
||||
ofn_cart_headline: "Gjeldende handlekurv for:"
|
||||
ofn_cart_distributor: "Distributør:"
|
||||
ofn_cart_oc: "Bestillingsrunde:"
|
||||
ofn_cart_from: "Fra:"
|
||||
ofn_cart_to: "Til:"
|
||||
ofn_cart_product: "Produkt:"
|
||||
ofn_cart_quantitiy: "Antall:"
|
||||
ofn_cart_send: "Kjøp"
|
||||
ie_warning_headline: "Din nettleser er for gammel :-("
|
||||
ie_warning_text: "For den beste opplevelsen med Open Food Network anbefaler vi på det sterkeste å oppgradere nettleseren din:"
|
||||
ie_warning_chrome: Last ned Chrome
|
||||
@@ -668,6 +705,7 @@ nb:
|
||||
order_billing_address: Fakturaadresse
|
||||
order_delivery_on: Levering på
|
||||
order_delivery_address: Leveringsadresse
|
||||
order_delivery_time: Leveringstid
|
||||
order_special_instructions: "Dine kommentarer:"
|
||||
order_pickup_time: Klar for henting
|
||||
order_pickup_instructions: Henteinstruksjoner
|
||||
@@ -676,6 +714,8 @@ nb:
|
||||
order_includes_tax: (inkludert MVA)
|
||||
order_payment_paypal_successful: Din betaling via PayPal har blitt godkjent.
|
||||
order_hub_info: Hub info
|
||||
order_back_to_store: Tilbake til butikken
|
||||
order_back_to_cart: Tilbake til handlekurven
|
||||
bom_tip: "Bruk denne siden for å endre produktmengder på tvers av flere bestillinger. Produkter kan også fjernes fra bestillinger helt hvis påkrevd."
|
||||
unsaved_changes_warning: "Ulagrede endringer finnes og vil gå tapt hvis du fortsetter."
|
||||
unsaved_changes_error: "Felt med røde kanter inneholder feil."
|
||||
@@ -767,6 +807,10 @@ nb:
|
||||
hubs_intro: Handle lokalt
|
||||
hubs_distance: Nærmest
|
||||
hubs_distance_filter: "Vis meg butikker nær %{location}"
|
||||
shop_changeable_orders_alert_html:
|
||||
one: Din bestilling med <a href='%{path}' target='_blank'> %{shop} / %{order} </a> er åpen for vurdering. Du kan gjøre endringer til %{oc_close}.
|
||||
other: Du har <a href='%{path}' target='_blank'> %{count} bestillinger med %{shop} </a> for øyeblikket åpen for gjennomgang. Du kan gjøre endringer til %{oc_close}.
|
||||
orders_changeable_orders_alert_html: Denne bestillingen er bekreftet, men du kan gjøre endringer til <strong>%{oc_close}</strong>.
|
||||
products_clear_all: Fjern alt
|
||||
products_showing: "Viser:"
|
||||
products_with: med
|
||||
@@ -896,7 +940,7 @@ nb:
|
||||
orders_edit_checkout: Kassen
|
||||
orders_form_empty_cart: "Tøm handlekurv"
|
||||
orders_form_subtotal: Delsum varer
|
||||
orders_form_admin: Administrasjon og håndtering
|
||||
orders_form_admin: Admin & Håndtering
|
||||
orders_form_total: Total
|
||||
orders_oc_expired_headline: Bestillinger stengt for denne runden
|
||||
orders_oc_expired_text: "Beklager, bestillinger for denne runden stengte for %{time} siden! Kontakt din hub direkte for å høre om de tar i mot sene bestillinger."
|
||||
@@ -906,7 +950,18 @@ nb:
|
||||
orders_oc_expired_phone: "Telefon:"
|
||||
orders_show_title: Ordrebekreftelse
|
||||
orders_show_time: Bestilling klar for
|
||||
orders_show_number: Ordrebekreftelse
|
||||
orders_show_order_number: "Bestilling # %{number}"
|
||||
orders_show_cancelled: Avbrutt
|
||||
orders_show_confirmed: Bekreftet
|
||||
orders_your_order_has_been_cancelled: "Din bestilling er avbrutt"
|
||||
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
|
||||
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?
|
||||
products_cart_distributor_choice: "Distributør for bestillingen:"
|
||||
products_cart_distributor_change: "Din distributør for denne ordren vil bli endret til %{name} hvis du legger til dette produktet i handlekurven din."
|
||||
products_cart_distributor_is: "Din distributør for denne ordren er %{name}."
|
||||
@@ -1007,6 +1062,7 @@ nb:
|
||||
enterprise_long_desc: "Lang beskrivelse"
|
||||
enterprise_long_desc_placeholder: "Dette er muligheten din til å fortelle historien om din virksomhet - hva gjør deg annerledes og flott? Vi vil foreslå å holde din beskrivelse til under 600 tegn eller 150 ord."
|
||||
enterprise_long_desc_length: "%{num} tegn / opptil 600 anbefales"
|
||||
enterprise_limit: Bedriftsgrense
|
||||
enterprise_abn: "ORG#"
|
||||
enterprise_abn_placeholder: "f.eks. 999 000 123"
|
||||
enterprise_acn: "MVA#"
|
||||
@@ -1095,7 +1151,7 @@ nb:
|
||||
balance: "Balanse"
|
||||
transaction: "Transaksjon"
|
||||
transaction_date: "Dato"
|
||||
payment_state: "Betallingsstatus"
|
||||
payment_state: "Betalingsstatus"
|
||||
shipping_state: "Leveringsstatus"
|
||||
value: "Verdi"
|
||||
balance_due: "Balanse forfaller"
|
||||
@@ -1142,6 +1198,7 @@ nb:
|
||||
calculator_values: "Kalkulatorverdier"
|
||||
flat_percent_per_item: "Prosent (per stk)"
|
||||
new_order_cycles: "Nye Bestillingsrunder"
|
||||
new_order_cycle: "Ny bestillingsrunde"
|
||||
select_a_coordinator_for_your_order_cycle: "Velg en koordinator for denne syklus"
|
||||
edit_order_cycle: "Endre Bestillingsrunde"
|
||||
roles: "Roller"
|
||||
@@ -1162,6 +1219,7 @@ nb:
|
||||
price: "Pris"
|
||||
on_hand: "På lager"
|
||||
save_changes: "Lagre Endringer"
|
||||
order_saved: "Bestilling lagret"
|
||||
spree_admin_overview_enterprises_header: "Mine Bedrifter"
|
||||
spree_admin_overview_enterprises_footer: "ADMINISTRER MINE BEDRIFTER"
|
||||
spree_admin_enterprises_hubs_name: "Navn"
|
||||
@@ -1203,6 +1261,8 @@ nb:
|
||||
edit_profile_details: "Endre profildetaljer"
|
||||
edit_profile_details_etc: "Endre din profilbeskrivelse, bilder, osv."
|
||||
order_cycle: "Bestillingsrunde"
|
||||
order_cycles: "Bestillingsrunder"
|
||||
enterprises: "Bedrifter"
|
||||
remove_tax: "Fjern avgift"
|
||||
enterprise_terms_of_service: "Tjenestevilkår for Bedrifter"
|
||||
enterprises_require_tos: "Bedrifter må godta Tjenestevilkår"
|
||||
@@ -1423,6 +1483,9 @@ nb:
|
||||
i din handlekurv gått ned. Her er hva som er endret.
|
||||
now_out_of_stock: er nå ikke på lager.
|
||||
only_n_remainging: "har nå kun %{num} igjen."
|
||||
producers:
|
||||
signup:
|
||||
start_free_profile: "Start med en gratis profil, og utvid når du er klar!"
|
||||
spree:
|
||||
admin:
|
||||
products:
|
||||
@@ -1439,24 +1502,7 @@ nb:
|
||||
date_picker:
|
||||
format: '%Y-%m-%d'
|
||||
js_format: 'åå-mm-dd'
|
||||
zipcode: Postnummer
|
||||
shipment_states:
|
||||
backorder: restordre
|
||||
partial: delvis
|
||||
pending: ventende
|
||||
ready: klar
|
||||
shipped: sendt
|
||||
payment_states:
|
||||
balance_due: balanse forfaller
|
||||
completed: fullført
|
||||
checkout: kasse
|
||||
credit_owed: kreditt skyldt
|
||||
failed: feilet
|
||||
paid: betalt
|
||||
pending: ventende
|
||||
processing: behandler
|
||||
void: ugyldig
|
||||
invalid: ugyldig
|
||||
inventory: Varelager
|
||||
order_mailer:
|
||||
invoice_email:
|
||||
hi: "Hei %{name}"
|
||||
@@ -1477,3 +1523,46 @@ nb:
|
||||
orders:
|
||||
invoice:
|
||||
tax_invoice: "AVGIFTSFAKTURA:"
|
||||
payment_states:
|
||||
balance_due: balanse forfaller
|
||||
completed: fullført
|
||||
checkout: kasse
|
||||
credit_owed: kreditt skyldt
|
||||
failed: feilet
|
||||
paid: betalt
|
||||
pending: ventende
|
||||
processing: behandler
|
||||
void: ugyldig
|
||||
invalid: ugyldig
|
||||
shipment_states:
|
||||
backorder: restordre
|
||||
partial: delvis
|
||||
pending: ventende
|
||||
ready: klar
|
||||
shipped: sendt
|
||||
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.
|
||||
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.
|
||||
weight: Vekt (per kg)
|
||||
zipcode: Postnummer
|
||||
users:
|
||||
show:
|
||||
open_orders: Åpne bestillinger
|
||||
transaction_history: Betalingshistorie
|
||||
open_orders:
|
||||
order: Bestilling
|
||||
shop: Butikk
|
||||
changes_allowed_until: Endringer tillatt frem til
|
||||
items: Varer
|
||||
total: Total
|
||||
edit: Endre
|
||||
cancel: Avbryt
|
||||
closed: Stengt
|
||||
until: Inntil
|
||||
|
||||
@@ -11,7 +11,7 @@ sv:
|
||||
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 bekräftats.
|
||||
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."
|
||||
@@ -28,6 +28,8 @@ sv:
|
||||
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"
|
||||
send_invoice: "Skicka faktura"
|
||||
resend_confirmation: "Skicka bekräftelse igen"
|
||||
view_order: "Se beställning"
|
||||
@@ -49,6 +51,17 @@ sv:
|
||||
say_yes: "Ja"
|
||||
then: då
|
||||
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
|
||||
remove: Ta bort
|
||||
or: eller
|
||||
collapse_all: Minimera alla
|
||||
expand_all: Expandera alla
|
||||
loading: Laddning...
|
||||
show_more: Visa mer
|
||||
show_all: Visa alla
|
||||
show_all_with_more: "Visa alla (%{num} More)"
|
||||
cancel: Makulera
|
||||
admin:
|
||||
date: Datum
|
||||
email: epost
|
||||
@@ -73,55 +86,58 @@ sv:
|
||||
columns: Kolumner
|
||||
actions: Handlingar
|
||||
viewing: "Tittar på: %{current_view_name}"
|
||||
description: Beskrivning
|
||||
whats_this: Vad är detta?
|
||||
tag_has_rules: "Regler för denna tagg: %{num}"
|
||||
has_one_rule: "har en regel"
|
||||
has_n_rules: "har %{num} regler"
|
||||
unsaved_confirm_leave: "Det finns ändringar på denna sida som ej sparats. Fortsätta utan att spara?"
|
||||
unsaved_changes: "Du har ändringar som ej sparats"
|
||||
accounts_and_billing_settings:
|
||||
method_settings:
|
||||
default_accounts_payment_method: "Default Accounts Payment Method"
|
||||
default_accounts_shipping_method: "Default Accounts Shipping Method"
|
||||
default_accounts_payment_method: "Standardkonto för bealningsmetod"
|
||||
default_accounts_shipping_method: "Standardkonto för leveransmetod"
|
||||
edit:
|
||||
accounts_and_billing: "Konton och fakturering"
|
||||
accounts_administration_distributor: "distributör av bokföringsadministration"
|
||||
accounts_administration_distributor: "Kontoadministrations-distributör"
|
||||
admin_settings: "Inställningar"
|
||||
update_invoice: "Uppdatera fakturor"
|
||||
finalise_invoice: "Slutför fakturor"
|
||||
finalise_user_invoices: "Slutför användarafakturor"
|
||||
finalise_user_invoice_explained: "Använd den här knappen för att slutföra alla fakturor i systemet för den gångna månaden. Denna uppgift ställas in så att den utförs automatiskt en gång per månad."
|
||||
manually_run_task: "Manuellt utförda uppgifter"
|
||||
auto_update_invoices: "Automatisk uppdatering av fakturor varje natt kl 01:00"
|
||||
finalise_invoice: "Slutför fakturering"
|
||||
auto_finalise_invoices: "Slutför automatiskt fakturor månadsvis den 2:a dagen kl 01;30"
|
||||
manually_run_task: "Manuellt utförd bearbetning"
|
||||
update_user_invoice_explained: "Använd denna knapp för att omedelbart uppdatera denna månads fakturor för varje företag i systemet. Denna bearbetning kan köras automatiskt varje natt."
|
||||
finalise_user_invoices: "Slutför användarfakturor"
|
||||
finalise_user_invoice_explained: "Använd denna knapp för att slutföra alla fakturor i systemet avseende föregående kalendermånad. Det går att ställa in denna bearbetning så att den utförs automatiskt en gång per månad."
|
||||
update_user_invoices: "Uppdatera användarfakturor"
|
||||
update_user_invoice_explained: "Använd denna knapp för att omedelbart uppdatera alla fakturor innevarande månad för alla företag i systemet. Den här uppgiften kan ställas in så att den automatiskt utförs varje natt."
|
||||
auto_finalise_invoices: "Automatisk summering av fakturor den 2:a kl 01.30 "
|
||||
auto_update_invoices: "Automatisk uppdatering av fakturor varje natt kl 01.00"
|
||||
business_model_configuration:
|
||||
edit:
|
||||
business_model_configuration: "Konfigurera affärsmodell"
|
||||
business_model_configuration_tip: "Configure the rate at which shops will be charged each month for use of the Open Food Network."
|
||||
bill_calculation_settings: "Bill Calculation Settings"
|
||||
bill_calculation_settings_tip: "Adjust the amount that enterprises will be billed each month for use of the OFN."
|
||||
shop_trial_length: "Försökstiden är (dagar)"
|
||||
shop_trial_length_tip: "The length of time (in days) that enterprises who are set up as shops can run as a trial period."
|
||||
fixed_monthly_charge: "Fixed Monthly Charge"
|
||||
fixed_monthly_charge_tip: "A fixed monthly charge for all enterprises who are set up as a shop and have exceeded the minimum billable turnover (if set)."
|
||||
business_model_configuration: "Företagsmodell"
|
||||
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_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)."
|
||||
percentage_of_turnover: "Procent av omsättning"
|
||||
percentage_of_turnover_tip: "When greater than zero, this rate (0.0 - 1.0) will be applied to the total turnover of each shop and added to any fixed charges (to the left) to calculate the monthly bill."
|
||||
monthly_cap_excl_tax: "månatligt tak (exkl. moms)"
|
||||
monthly_cap_excl_tax_tip: "When greater than zero, this value will be used as a cap on the amount that shops will be charged each month."
|
||||
tax_rate: "Tax Rate"
|
||||
tax_rate_tip: "Tax rate that applies to the the monthly bill that enterprises are charged for using the system."
|
||||
minimum_monthly_billable_turnover: "Minimum Monthly Billable Turnover"
|
||||
minimum_monthly_billable_turnover_tip: "Minimum monthly turnover before a shopfront will be charged for using OFN. Enterprises turning over less than this amount in a month will not be charged, either as a percentage or fixed rate."
|
||||
example_bill_calculator: "Example Bill Calculator"
|
||||
example_bill_calculator_legend: "Alter the example turnover to visualise the effect of the settings to the left."
|
||||
example_monthly_turnover: "Example Monthly Turnover"
|
||||
example_monthly_turnover_tip: "An example monthly turnover for an enterprise which will be used to generate calculate an example monthly bill below."
|
||||
cap_reached?: "Cap Reached ?"
|
||||
cap_reached?_tip: "Whether the cap (specified to the left) has been reached, given the settings and the turnover provided."
|
||||
included_tax: "Included tax"
|
||||
included_tax_tip: "The total tax included in the example monthly bill, given the settings and the turnover provided."
|
||||
total_monthly_bill_incl_tax: "Total Månadskostnad (Inkl. Skatter)"
|
||||
total_monthly_bill_incl_tax_tip: "The example total monthly bill with tax included, given the settings and the turnover provided."
|
||||
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."
|
||||
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."
|
||||
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."
|
||||
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_tip: "Exemplets totala månadsfaktura med skatt inkluderad enligt de inställningar och den omsättning som var angiven."
|
||||
customers:
|
||||
index:
|
||||
add_customer: "Lägg till kund"
|
||||
@@ -143,6 +159,28 @@ sv:
|
||||
edit: 'Ändra'
|
||||
update_address: 'Uppdatera Adress'
|
||||
confirm_delete: 'Vill du verkligen radera?'
|
||||
cache_settings:
|
||||
show:
|
||||
title: Inkomst
|
||||
distributor: Distributör
|
||||
order_cycle: Ordercykel
|
||||
status: Status
|
||||
diff: Differens
|
||||
contents:
|
||||
edit:
|
||||
title: Innehåll
|
||||
enterprise_fees:
|
||||
index:
|
||||
title: Företagsavgifter
|
||||
enterprise: Företag
|
||||
fee_type: Avgiftstyp
|
||||
name: Namn
|
||||
tax_category: Skattekategori
|
||||
calculator: Beräkning
|
||||
calculator_values: Beräknade summor
|
||||
enterprise_groups:
|
||||
index:
|
||||
new_button: Ny företagsgrupp
|
||||
products:
|
||||
bulk_edit:
|
||||
unit: Enhet
|
||||
@@ -152,7 +190,14 @@ sv:
|
||||
inherits_properties?: Ärva egenskaper?
|
||||
available_on: 'Tillgänglig '
|
||||
av_on: "Md. På"
|
||||
properties:
|
||||
property_name: Egendomens Namn
|
||||
inherited_property: Ärvd Egendom
|
||||
variants:
|
||||
to_order_tip: "Varor som framställs för en order har inget eget varunummer, ex formbröd som värms vid en order."
|
||||
variant_overrides:
|
||||
loading_flash:
|
||||
loading_inventory: LADDNING AV INVENTARIELISTA
|
||||
index:
|
||||
title: Lager
|
||||
description: Använd den här sidan som inventarieförteckning för ditt företag. Varje produkt som du angett här gäller framför de som du skrivit på "produktsidan"
|
||||
@@ -193,18 +238,95 @@ sv:
|
||||
max_fulfilled_units: "Maximalt expedierade enheter"
|
||||
order_error: "En del misstag måste korrigeras innan du kan uppdatera en order. Alla rödmarkerade fält innehåller fel."
|
||||
variants_without_unit_value: "VARNING: På en del ställen saknas antalsuppgift"
|
||||
order_cycles:
|
||||
edit:
|
||||
choose_products_from: "Välj Produkter Från:"
|
||||
enterprise:
|
||||
select_outgoing_oc_products_from: Välj utgående produkter i beställningsrunda från
|
||||
enterprises:
|
||||
index:
|
||||
producer?: Producent?
|
||||
title: Företag
|
||||
new_enterprise: Nya företag
|
||||
producer?: "Producent?"
|
||||
package: Paket
|
||||
status: Status
|
||||
manage: Hantera
|
||||
form:
|
||||
about_us:
|
||||
desc_short: Kort beskrivning
|
||||
desc_short_placeholder: Berätta om ditt företag i en eller två meningar
|
||||
desc_long: Om oss
|
||||
desc_long_placeholder: Berätta om kunder om dig själv. Denna information kommer att stå i din allmänna profil.
|
||||
business_details:
|
||||
abn: ABN
|
||||
abn_placeholder: ex 070 56 78 90
|
||||
acn: ACN
|
||||
acn_placeholder: ex 123 456 789
|
||||
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
|
||||
website_placeholder: ex www.shop.com
|
||||
enterprise_fees:
|
||||
name: Namn
|
||||
fee_type: Avgiftstyp
|
||||
manage_fees: Skötsel av företagsavgifter
|
||||
no_fees_yet: Du har inga företagsavgifter ännu.
|
||||
create_button: Skapa en nu
|
||||
images:
|
||||
logo: Logotyp
|
||||
promo_image_placeholder: 'Denna bild visas under "Om oss"'
|
||||
promo_image_note1: 'VAR VÄNLIG OBSERVERA:'
|
||||
promo_image_note2: Varje reklambild som laddas här kommer att beskäras till 1200 x 260.
|
||||
promo_image_note3: Logotypen visas högst upp på företagets profilsida och i rullgardinsmenyer.
|
||||
inventory_settings:
|
||||
text1: Du kan välja att hantera ditt varulager och dina priser via din
|
||||
inventory: Inventarielista
|
||||
text2: >
|
||||
Om använder inventeringsverktyget kan du välja huruvida nya produkter
|
||||
som lagts till av dina leverantörer behöver blir tillagda till din lagerförteckning
|
||||
innan de kan bli lagerförda. Om du inte använder din inventering för
|
||||
att hantera dina produkter bör du välja det 'rekommenderade' alternativet
|
||||
nedan:
|
||||
preferred_product_selection_from_inventory_only_yes: Nya produkter kan placeras i mitt skyltfönster (rekommenderas)
|
||||
preferred_product_selection_from_inventory_only_no: Ny produkter måste adderas till min inventarielista innan de kan placeras i mitt skyltfönster
|
||||
payment_methods:
|
||||
name: Namn
|
||||
applies: Gäller?
|
||||
manage: Bestäm betalningssätt
|
||||
not_method_yet: Du har ännu inte bestämt betalningssätt
|
||||
create_button: Skapa ett nytt betalningssätt
|
||||
create_one_button: Skapa en nu
|
||||
primary_details:
|
||||
name: Namn
|
||||
name_placeholder: t.ex. Professor Plums Biodynamiska Tryfflar
|
||||
groups: Grupper
|
||||
groups_tip: Bestäm i vilka grupper och områden du är medlem. Detta underlättar för kunder att hitta ditt företag.
|
||||
groups_placeholder: Starta din sökning efter tillgängliga grupper...
|
||||
primary_producer: Primär producent?
|
||||
primary_producer_tip: Välj "Producent" om du är en primär producent av livsmedel.
|
||||
producer: Producent
|
||||
any: Vilken som helst
|
||||
none: Ingen
|
||||
own: Egen
|
||||
sells: Säljer
|
||||
sells_tip: "Inget - företag säljer direkt till kunderna.<br />Egna - Företag säljer egna produkter till kunder.<br />Några - Företag kan sälja egna eller andra företags produkter.<br />"
|
||||
visible_in_search: Synlig vid sökning?
|
||||
visible_in_search_tip: Bestämmer om detta företag kommer att bli synligt för kunder då man söker på hemsidan.
|
||||
visible: Synlg
|
||||
not_visible: Ej synlig
|
||||
permalink: Permalänk (inga mellanrum)
|
||||
permalink_tip: "Denna permalänk används för att skapa URL:en till din butik: %{link}din-butiks-namn/butik"
|
||||
link_to_front: Länk till sitt skyltfönster
|
||||
link_to_front_tip: En direkt länk till ditt skyltfönster på OFN
|
||||
shipping_methods:
|
||||
name: Namn
|
||||
applies: Gäller?
|
||||
manage: Bestäm leversmetoder
|
||||
create_button: Skapa ny leveransmetod
|
||||
create_one_button: Skapa en nu
|
||||
no_method_yet: Du har inte bestämt leveransmetod ännu.
|
||||
shop_preferences:
|
||||
shopfront_requires_login: "Offentligt visat skyltfönster?"
|
||||
shopfront_requires_login_tip: "Välj om kunderna måste logga in för att se skyltfönstret eller om det skall visas för alla."
|
||||
@@ -214,6 +336,146 @@ sv:
|
||||
allow_guest_orders_tip: "Tillåt leveranskontroll som gäst eller registrerad kund"
|
||||
allow_guest_orders_false: "Kräv inloggning för att beställa"
|
||||
allow_guest_orders_true: "Tillåt checkout för gäster"
|
||||
shopfront_message_placeholder: >
|
||||
En frivillig förklaring för kunder som beskriver hur ditt skyltfönster
|
||||
skall användas. Den visas ovanför produktlistan i affärsfönstret.
|
||||
shopfront_closed_message_placeholder: >
|
||||
Ett meddelande som ger en mer detaljerad förklaring varför din affär
|
||||
är stängd/eller när kunder kan förvänta att den öppnar igen. Detta visas
|
||||
i din affär endast när du inte har en aktiv ordercykel (dvs när affären
|
||||
är stängd).
|
||||
open_date: Öppningsdatum
|
||||
close_date: Stängningsdatum
|
||||
social:
|
||||
twitter_placeholder: t.ex. @the_prof
|
||||
tag_rules:
|
||||
default_rules:
|
||||
by_default: Som standard
|
||||
no_rules_yet: Standardregler har ännu ej fasttällts
|
||||
add_new_button: '+ Lägg till ny standardregel'
|
||||
no_tags_yet: Inga etiketter finns för detta företag ännu
|
||||
no_rules_yet: Inga regler finns för denna etikett ännu
|
||||
for_customers_tagged: 'För kunder taggade med:'
|
||||
add_new_rule: '+ Lägg till en ny regel'
|
||||
add_new_tag: '+ Lägg till en ny etikett'
|
||||
users:
|
||||
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'
|
||||
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,
|
||||
notifications_placeholder: ex gustav@telia.com
|
||||
notifications_note: 'Observera: En ny e-postadress behöver kanske bli bekräftad före användning'
|
||||
managers: Chefer
|
||||
managers_tip: Andra användare med tillstånd att leda detta företag.
|
||||
actions:
|
||||
edit_profile: Redigera profilen
|
||||
properties: Egenskaper
|
||||
payment_methods: Betalningssätt
|
||||
payment_methods_tip: Detta företag har inga betalningssätt
|
||||
shipping_methods: Transportsätt
|
||||
shipping_methods_tip: Detta företag har inga transportsätt
|
||||
enterprise_fees: Företagsavgifter
|
||||
enterprise_fees_tip: Detta företag har inga avgifter
|
||||
admin_index:
|
||||
name: Namn
|
||||
role: Roll
|
||||
sells: Säljer
|
||||
visible: Synligt?
|
||||
owner: Ägare
|
||||
producer: Producent
|
||||
change_type_form:
|
||||
producer_profile: Producentprofil
|
||||
connect_ofn: Ansluten via OFN
|
||||
always_free: ALLTID GRATIS
|
||||
producer_description_text: 'Lägg till dina produkter till OFN, tillåt lagringscentraler att lagra dina varor i sina lokaler. '
|
||||
producer_shop: Producentaffär
|
||||
sell_your_produce: Sälj dina egna produkter
|
||||
sell_description_text: Sälj dina egna produkter direkt till kunder via ditt eget OFN skyltfönster.
|
||||
sell_description_text2: En producentaffär är enbart för din produkt, Om du önskar sälja produkter odlade/producerade på annat håll, välj "Producer Hub".
|
||||
producer_hub: Producentcentral
|
||||
producer_hub_text: Sälj produkter av egen eller annans tillverkning
|
||||
producer_hub_description_text: Ditt företag är grunden i ert lokala livsmedelssystem. Du kan sälja av egen tillverkning likväl som varor samlade från andra företag genom ditt skyltfönster i OFN.
|
||||
profile: Enbart profil
|
||||
get_listing: Få en listning
|
||||
profile_description_text: Folk kan hitta och kontakta dig i OFN. Ditt företag kommer att markeras på en karta och det går att söka i listor.
|
||||
hub_shop: Affär vid leveranscentral
|
||||
hub_shop_text: 'Sälj andras produkter '
|
||||
hub_shop_description_text: Ditt företag är grunden i dit lokala livsmedelssystem. Du kan samla produkter från andra företag och sälja dem i din affär genom OFN.
|
||||
choose_option: Var vänlig välj ett av förslagen ovan.
|
||||
change_now: Ändra nu
|
||||
enterprise_user_index:
|
||||
loading_enterprises: LADDAR FÖRETAG
|
||||
no_enterprises_found: Inget företag kunde hittas.
|
||||
search_placeholder: Sök på namn
|
||||
manage: Administrera
|
||||
new_form:
|
||||
owner: Ägare
|
||||
owner_tip: Den primära användaren är ansvarig för detta företag.
|
||||
i_am_producer: Jag är en Tillverkare
|
||||
contact_name: Kontaktperson
|
||||
edit:
|
||||
editing: 'Redigera:'
|
||||
back_link: Åter till företagslistan
|
||||
new:
|
||||
title: Nya företag
|
||||
back_link: Åter till företagslistan
|
||||
welcome:
|
||||
welcome_title: Välkommen till OFN!
|
||||
welcome_text: Du har korrekt slutfört en
|
||||
next_step: Nästa steg
|
||||
choose_starting_point: 'Välj din startpunkt:'
|
||||
order_cycles:
|
||||
advanced_settings:
|
||||
title: Avancerade inställningar
|
||||
choose_product_tip: Du kan välja att begränsa alla tillgängliga produkter (både inkommande och utgående), till enbart dem i %{inventory}'s inventory.
|
||||
preferred_product_selection_from_coordinator_inventory_only_here: Enbart koordinatorns inventarielista
|
||||
preferred_product_selection_from_coordinator_inventory_only_all: Alla tillgängliga produkter
|
||||
save_reload: Spara och ladda om sidan
|
||||
coordinator_fees:
|
||||
add: Lägg till koordinatoravgift
|
||||
form:
|
||||
incoming: Inkommande
|
||||
supplier: Leverantör
|
||||
receival_details: Mottagna detaljer
|
||||
fees: Avgifter
|
||||
outgoing: Utgående
|
||||
distributor: Distributör
|
||||
products: Produkter
|
||||
tags: Etiketter
|
||||
delivery_detaisl: Hämtade/levererade detaljer
|
||||
debug_info: Felinformation
|
||||
name_and_timing_form:
|
||||
name: Namn
|
||||
orders_open: Order öppna till
|
||||
coordinator: Koordinator
|
||||
order_closes: Order stänger
|
||||
row:
|
||||
suppliers: leverantörer
|
||||
distributors: distributörer
|
||||
variants: varianter
|
||||
simple_form:
|
||||
ready_for: Klar för
|
||||
ready_for_placeholder: Datum/tid
|
||||
customer_instructions: Kundinstruktioner
|
||||
customer_instructions_placeholder: Hämtnings eller leverans meddelanden
|
||||
products: Produkter
|
||||
fees: Avgifter
|
||||
edit:
|
||||
advanced_settings: Avancerade inställningar
|
||||
update_and_close: Uppdatera och Stäng
|
||||
producer_properties:
|
||||
index:
|
||||
title: Producentegenskaper
|
||||
shared:
|
||||
user_guide_link:
|
||||
user_guide: Användarinstruktion
|
||||
invoice_settings:
|
||||
edit:
|
||||
title: Fakturainställningar
|
||||
invoice_style2?: Använd den alternativa faktureringsmodellen som inkluderar totala skattefördelning per beräkning och skatt per artikel (ännu inte passande för länder som visar priser exklusive skatt)
|
||||
enable_receipt_printing?: 'Visa alternativ för att skriva ut recept genom att använda termiska skrivare i ordermenyn? '
|
||||
home:
|
||||
hubs:
|
||||
show_closed_shops: "Visa stängda affärer"
|
||||
@@ -231,10 +493,29 @@ sv:
|
||||
require_customer_login: "Denna butik är endast för kunder."
|
||||
require_login_html: "Var vänlig %{login} om du redan har ett konto. I annat fall %{register} för att bli kund."
|
||||
require_customer_html: "Vänlig %{contact} %{enterprise} för att bli en kund."
|
||||
invoice_column_item: "Artikel"
|
||||
invoice_column_qty: "Antal"
|
||||
invoice_billing_address: "Faktureringsadress"
|
||||
invoice_column_tax: "VAT"
|
||||
invoice_column_price: "Pris"
|
||||
invoice_column_item: "Artikel"
|
||||
invoice_column_qty: "Antal"
|
||||
invoice_column_unit_price_with_taxes: "Styckpris (Inkl skatt)"
|
||||
invoice_column_unit_price_without_taxes: "Styckpris (Exkl skatt)"
|
||||
invoice_column_price_with_taxes: "Slutsumma (inkl skatt)"
|
||||
invoice_column_price_without_taxes: "Slutsumma (Exkl skatt)"
|
||||
invoice_column_tax_rate: "Skattesats"
|
||||
tax_invoice: "SKATTEFAKTURA"
|
||||
tax_total: "Summa skatter (%{rate}):"
|
||||
total_excl_tax: "Summa (Exkl skatt):"
|
||||
total_incl_tax: "Summa (Inkl skatt):"
|
||||
abn: "ABN:"
|
||||
acn: "ACN:"
|
||||
invoice_issued_on: "Faktura utfärdad på:"
|
||||
order_number: "Fakturanummer:"
|
||||
date_of_transaction: "Transaktionsdatum:"
|
||||
ticket_column_qty: "Kvantitet"
|
||||
ticket_column_item: "Vara"
|
||||
ticket_column_unit_price: "Styckpris"
|
||||
ticket_column_total_price: "Summa"
|
||||
logo: "Logotyp (640x130)"
|
||||
logo_mobile: "Mobil logotyp (75x26)"
|
||||
logo_mobile_svg: "Mobil logotyp (SVG)"
|
||||
@@ -258,10 +539,13 @@ sv:
|
||||
phone: Telefon
|
||||
next: Näst
|
||||
address: Adress
|
||||
address_placeholder: eg. 123 High Street
|
||||
address2: Adress (fortgående)
|
||||
city: Ort
|
||||
state: Region
|
||||
city_placeholder: eg. Northcote
|
||||
postcode: Postnummer
|
||||
postcode_placeholder: eg. 3070
|
||||
state: Region
|
||||
country: Land
|
||||
unauthorized: Obehörig
|
||||
terms_of_service: "Användarvillkor "
|
||||
@@ -394,6 +678,7 @@ sv:
|
||||
order_includes_tax: (inkluderar skatter)
|
||||
order_payment_paypal_successful: Din betalning via PayPal har gått bra.
|
||||
order_hub_info: Hub-information
|
||||
bom_tip: "Använd denna sida för att ändra produktkvantiteter på flera order samtidigt. Produkter kan också tas bort från fler order samtidigt, om så erfordras."
|
||||
unsaved_changes_warning: "Osparade förändringar existerar och kommer förloras om du fortsätter."
|
||||
unsaved_changes_error: "Fält med röda kanter innehåller fel."
|
||||
products: "Produkter"
|
||||
@@ -405,7 +690,7 @@ sv:
|
||||
email_registered: "är nu del av"
|
||||
email_userguide_html: "Användarhandboken med detaljerade uppgifter hur du skall skapa din Producer eller Hub finns här: %{link}"
|
||||
email_admin_html: "Du kan sköta ditt konto genom att logga in %{link} eller att klicka på kuggen i det övre högra hörnet på hemsidan och välja Administration."
|
||||
email_community_html: "Vi har också ett internetforum för gemensamma diskussioner som är relaterade till OFN programvara och den unika utmaningen att använda ett matföretag. Vi utvecklas ständigt och dina inlägg till detta forum påverkar vad som händer i fortsättningen."
|
||||
email_community_html: "Vi har också ett internetforum för gemensamma diskussioner som är relaterade till OFN programvara och den unika utmaningen att använda ett matföretag. Vi utvecklas ständigt och dina inlägg till detta forum påverkar vad som händer i fortsättningen. %{link}"
|
||||
join_community: "Gå med i gemenskapen"
|
||||
email_help: "Om du hamnar i svårigheter, titta i vårt FAQ, sök igenom vårt forum eller skicka en fråga till Support och du kommer att få hjälp."
|
||||
email_confirmation_greeting: "Hej, %{contact}!"
|
||||
@@ -479,6 +764,7 @@ sv:
|
||||
hubs_filter_by: "Filtrera med"
|
||||
hubs_filter_type: "Typ"
|
||||
hubs_filter_delivery: "Leverans"
|
||||
hubs_filter_property: "Egenskaper"
|
||||
hubs_matches: "Menade du?"
|
||||
hubs_intro: Handla i ditt närområde
|
||||
hubs_distance: Närmast till
|
||||
@@ -493,7 +779,7 @@ sv:
|
||||
products_edit_cart: "Redigera din varukorg "
|
||||
products_from: från
|
||||
products_change: "Inga ändringar att spara."
|
||||
products_update_error: "Sparandet misslyckades med följande fel:"
|
||||
products_update_error: "Sparandet misslyckades med följande fel(en):"
|
||||
products_update_error_msg: "Sparandet misslyckades."
|
||||
products_update_error_data: "Sparandet misslyckades beroende på felaktiga data."
|
||||
products_changes_saved: "Ändringar sparade."
|
||||
@@ -724,9 +1010,9 @@ sv:
|
||||
enterprise_long_desc_placeholder: "Detta är ditt tillfälle att beskriva ditt företag - vad som gör dig speciell och intressant. Vi föreslår att du begränsar beskrivningen till 600 tecken eller 150 ord."
|
||||
enterprise_long_desc_length: "%{num} tecken / upp till 600 rekommenderas"
|
||||
enterprise_abn: "ABN"
|
||||
enterprise_abn_placeholder: "ex 123 123 123"
|
||||
enterprise_abn_placeholder: "t.ex. 99 123 456 789"
|
||||
enterprise_acn: "ACN"
|
||||
enterprise_acn_placeholder: "ex 123 123 123"
|
||||
enterprise_acn_placeholder: "t.ex. 123 456 789"
|
||||
enterprise_tax_required: "Du måste göra ett val"
|
||||
enterprise_final_step: "Sista steget!"
|
||||
enterprise_social_text: "Hur kan folk hitta %{enterprise} på nätet?"
|
||||
@@ -744,7 +1030,7 @@ sv:
|
||||
registration_intro: "Nu kan du skapa en profil för din producent eller matställe"
|
||||
registration_action: "Låt oss börja!"
|
||||
registration_checklist: "Du kommer att behöva"
|
||||
registration_time: "5 - 10 minuter"
|
||||
registration_time: "5-10 minuter"
|
||||
registration_enterprise_address: "Företagets adress"
|
||||
registration_contact_details: "Uppgifter hur man får kontakt"
|
||||
registration_logo: "Din logotype"
|
||||
@@ -785,7 +1071,7 @@ sv:
|
||||
registration_detail_suburb_placeholder: "ex spånga"
|
||||
registration_detail_suburb_error: "Var vänlig skriv in en förort"
|
||||
registration_detail_postcode: "Postkod:"
|
||||
registration_detail_postcode_placeholder: "ex 123 123"
|
||||
registration_detail_postcode_placeholder: "t.ex. 3070"
|
||||
registration_detail_postcode_error: "Postkod saknas"
|
||||
registration_detail_state: "Land:"
|
||||
registration_detail_state_error: "Land måste fyllas i "
|
||||
@@ -835,12 +1121,12 @@ sv:
|
||||
admin_entreprise_groups_data_powertip_logo: "Detta är logotypen för gruppen"
|
||||
admin_entreprise_groups_data_powertip_promo_image: "Denna bild visas överst på gruppens profil"
|
||||
admin_entreprise_groups_contact: "Kontakt"
|
||||
admin_entreprise_groups_contact_phone_placeholder: "ex 123 123"
|
||||
admin_entreprise_groups_contact_address1_placeholder: "ex Höga gatan"
|
||||
admin_entreprise_groups_contact_phone_placeholder: "t.ex. 98 7654 3210"
|
||||
admin_entreprise_groups_contact_address1_placeholder: "t.ex. 123 Höga gatan"
|
||||
admin_entreprise_groups_contact_city: "Förort"
|
||||
admin_entreprise_groups_contact_city_placeholder: "ex Norrberga"
|
||||
admin_entreprise_groups_contact_zipcode: "Postnummer"
|
||||
admin_entreprise_groups_contact_zipcode_placeholder: "ex 123"
|
||||
admin_entreprise_groups_contact_zipcode_placeholder: "t.ex. 3070"
|
||||
admin_entreprise_groups_contact_state_id: "Region"
|
||||
admin_entreprise_groups_contact_country_id: "Land"
|
||||
admin_entreprise_groups_web: "Webb resurser"
|
||||
@@ -903,7 +1189,7 @@ sv:
|
||||
spree_admin_single_enterprise_alert_mail_confirmation: "Var vänlig och fastställ e-postadressen för"
|
||||
spree_admin_single_enterprise_alert_mail_sent: "Vi har sänt e-post till "
|
||||
spree_admin_overview_action_required: "Ett ställningstagande behövs"
|
||||
spree_admin_overview_check_your_inbox: "Var vänlig och kontrollera din inkorg för ytterligare instruktioner. Tack!"
|
||||
spree_admin_overview_check_your_inbox: "Var vänlig kontrollera din inkorg för ytterligare instruktioner. Tack!"
|
||||
change_package: "Ändra förpackning"
|
||||
spree_admin_single_enterprise_hint: "Tips: För att folk skall hitta dig lättare, slå på din reklam under"
|
||||
your_profil_live: "Din profil direkt"
|
||||
@@ -920,6 +1206,12 @@ sv:
|
||||
edit_profile_details_etc: "Ändra beskrivningen av din profil, bilder, etc"
|
||||
order_cycle: "Ordercykel"
|
||||
remove_tax: "Tag bort skatt"
|
||||
enterprise_terms_of_service: "Företagets servicevillkor"
|
||||
enterprises_require_tos: "Företag måste acceptera servicevillkoren"
|
||||
enterprise_tos_link: "Länk till företagets servicevillkor"
|
||||
enterprise_tos_message: "Vi vill arbeta med personer som delar våra mål och värderingar. Därför ber vi nya företag att samtycka med vår"
|
||||
enterprise_tos_link_text: "Servicevillkor"
|
||||
enterprise_tos_agree: "Jag samtycker med ovanstående servicevillkor "
|
||||
tax_settings: "Skatteskalor"
|
||||
products_require_tax_category: "produkter kräver skattekategori"
|
||||
admin_shared_address_1: "Adress"
|
||||
@@ -953,6 +1245,22 @@ sv:
|
||||
report_order_cycle: "Beställningsrundor"
|
||||
report_entreprises: "Företag:"
|
||||
report_users: "Användare:"
|
||||
report_tax_rates: "Skattesatser"
|
||||
report_tax_types: "Typer av skatt"
|
||||
report_header_order_number: "Ordernummer"
|
||||
report_header_date: "Datum"
|
||||
report_header_items: "Varor"
|
||||
report_header_items_total: "Varusumma %{currency_symbol}"
|
||||
report_header_taxable_items_total: "Skattepliktig varusumma (%{currency_symbol})"
|
||||
report_header_sales_tax: "Skatt på försäljning (%{currency_symbol})"
|
||||
report_header_delivery_charge: "Leveransavgift (%{currency_symbol})"
|
||||
report_header_tax_on_delivery: "Leveransskatt (%{currency_symbol})"
|
||||
report_header_tax_on_fees: "Skatt på avgifter (%{currency_symbol})"
|
||||
report_header_total_tax: "Summa skatter (%{currency_symbol})"
|
||||
report_header_customer: "Kund"
|
||||
report_header_distributor: "Distributör"
|
||||
report_header_total_excl_vat: "Summa exkl skatt (%{currency_symbol})"
|
||||
report_header_total_incl_vat: "Summa inkl skatt (%{currency_symbol})"
|
||||
initial_invoice_number: "Initialt fakturanummer"
|
||||
invoice_date: "Fakturadatum:"
|
||||
due_date: "Sista betalningsdag:"
|
||||
@@ -994,7 +1302,141 @@ sv:
|
||||
validation_msg_product_category_cant_be_blank: "^Produktkategori kan inte vara blank"
|
||||
validation_msg_tax_category_cant_be_blank: "^Skattekategori kan inte vara blank"
|
||||
validation_msg_is_associated_with_an_exising_customer: "är knuten till en existerande kund"
|
||||
js:
|
||||
admin:
|
||||
modals:
|
||||
got_it: Förstått
|
||||
tag_rule_help:
|
||||
title: Regler för etiketter
|
||||
overview: Översikt
|
||||
overview_text: >
|
||||
Etikettreglerna är ett sätt att beskriva vilka varor visas eller inte
|
||||
för olika kunder. Reglerna kan beröra leveransmetoder, betalningssätt,
|
||||
produkt- eller ordercykler.
|
||||
by_default_rules: "Regler för standard "
|
||||
by_default_rules_text: >
|
||||
Standardreglerna tillåter dig att dölja varor så att de ej visas som
|
||||
standard. Denna metod kan sedan upphävas av en "ej-standard" regel för
|
||||
de kunder som har särskilda etiketter.
|
||||
customer_tagged_rules: "Regler för kundetiketter"
|
||||
customer_tagged_rules_text: >
|
||||
Genom att skapa regler för en speciell kundetikett kan du upphäva standardförfarandet
|
||||
(vare sig det är att visa eller dölja varor) för kunder med den specifika
|
||||
etiketten.
|
||||
panels:
|
||||
save: SPARA
|
||||
saved: SPARAD
|
||||
saving: SPARANDE
|
||||
enterprise_package:
|
||||
hub_profile: Hubbprofil
|
||||
hub_profile_cost: "KOSTNAD: ALLTID GRATIS"
|
||||
hub_profile_text1: >
|
||||
Folk kan finna och kontakta dig på OFN. Ditt företag visas på en karta
|
||||
och går att söka på i olika listor.
|
||||
hub_profile_text2: >
|
||||
Att ha en profil samt ha förbindelser inom ditt lokala livsmedelssystem
|
||||
via OFN är alltid gratis.
|
||||
hub_shop: Affär vid leveranscentral
|
||||
hub_shop_text1: >
|
||||
hej
|
||||
hub_shop_text2: >
|
||||
Centraler kan finnas i olika former, antingen kan de var en kooperation,
|
||||
en inköpsgrupp, en vegan-box program eller en lokal speceriaffär.
|
||||
hub_shop_text3: >
|
||||
Om du också önskar att sälja dina egna produkter måste du ändra detta
|
||||
företag till att vara en producent.
|
||||
choose_package: Var vänlig välj en förpackning
|
||||
choose_package_text1: >
|
||||
Ditt företag kommer inte att var aktiverat förrän du valt förpackning
|
||||
från listan till vänster.
|
||||
choose_package_text2: >
|
||||
Klicka på ett alternativ för att se mer detaljerad information om varje
|
||||
förpackning och klicka på den röda SAVE knappen när du är klar!
|
||||
profile_only: Enbart profil
|
||||
profile_only_cost: "KOSTNAD: ALLTID GRATIS"
|
||||
profile_only_text1: >
|
||||
En profil gör att du blir synlig och kan kontaktas av andra och är ett
|
||||
sätt att berätta din historia.
|
||||
profile_only_text2: >
|
||||
Om du föredrar att fokusera på att framställa mat och vill slippa arbetet
|
||||
med försäljning till andra, behöver du inte en affär i OFN.
|
||||
profile_only_text3: >
|
||||
Lägg till dina produkter på OFN och tillåt centraler lagra dina produkter
|
||||
i sina lokaler.
|
||||
producer_shop: Producentaffär
|
||||
producer_shop_text1: >
|
||||
Sälj dina produkter direkt till kunder genom ditt alldeles egna OFN
|
||||
skyltfönster.
|
||||
producer_shop_text2: >
|
||||
En producentaffär är enbart för din tillverkning, om du önskar sälja produkter
|
||||
odlade/framställda på annat ställe, var vänlig välj "Producer Hub".
|
||||
producer_hub: Producentcentral
|
||||
producer_hub_text1: >
|
||||
Ditt företag är grunden i ditt lokala livsmedelssystem. Du kan sälja
|
||||
dina egna såväl som produkter inköpta från andra företag genom ditt
|
||||
skyltfönster på OFN.
|
||||
producer_hub_text2: >
|
||||
Producentcentraler kan finnas i många former, antingen en CSA. en vegan-box
|
||||
program, eller en kooperation med takträdgårdar.
|
||||
producer_hub_text3: >
|
||||
OFN försöker stödja så många olika former av centraler som möjligt,
|
||||
så oavsett din situation så försöker vi förse dig med de verktyg du
|
||||
behöver för att hantera din organisation eller lokala mataffär.
|
||||
get_listing: Få en listning
|
||||
always_free: ALLTID GRATIS
|
||||
sell_produce_others: 'Sälj andras produkter '
|
||||
sell_own_produce: Sälj dina egna produkter
|
||||
sell_both: Sälj produkter av egen eller annans tillverkning
|
||||
enterprise_producer:
|
||||
producer: Producent
|
||||
producer_text1: >
|
||||
Producenter gör smaskiga saker att äta eller dricka. Du är en producent
|
||||
om du odlar,brygger bakar, jäser, mjölkar eller mal.
|
||||
producer_text2: >
|
||||
Producenter kan också ha andra funktioner såsom att samla matvaror från
|
||||
andra företag och sälja dem genom en affär på OFN.
|
||||
non_producer: Icke-producenter
|
||||
non_producer_text1: >
|
||||
Icke-tllverkare kan inte framställa mat själva, vilket innebär att de
|
||||
kan ej framställa sina egna produkter för försäljning via OFN.
|
||||
non_producer_text2: >
|
||||
I stället icke-tillverkare specialisera sig på att sammanföra producenter
|
||||
med den slutliga köparen genom att plocka samman, sortera, förpacka
|
||||
sälja eller leverera mat.
|
||||
producer_desc: Producenter av mat
|
||||
producer_example: ex ODLARE, BAGERIER, BRYGGERIER, TILLVERKARE
|
||||
non_producer_desc: Andra matföretag
|
||||
non_producer_example: t.ex. matbutiker, matkooperativ, köpgrupper
|
||||
enterprise_status:
|
||||
status_title: "%{name} är uppsatt och redo att användas!"
|
||||
severity: Allvarlighet
|
||||
description: Beskrivning
|
||||
resolve: Besluta
|
||||
new_tag_rule_dialog:
|
||||
select_rule_type: "Välj en regeltyp:"
|
||||
out_of_stock:
|
||||
reduced_stock_available: Minska tillgängligt lager
|
||||
out_of_stock_text: >
|
||||
Under tiden du handlat har lagernivån för en eller flera produkter i din
|
||||
kundvagn minskat. Detta har ändrats:
|
||||
now_out_of_stock: Är nu slut
|
||||
only_n_remainging: "nu återstår endast %{num}"
|
||||
spree:
|
||||
admin:
|
||||
products:
|
||||
bulk_edit:
|
||||
header:
|
||||
title: 'Redigera Omfång av Produkter '
|
||||
indicators:
|
||||
title: LADDAR PRODUKTER
|
||||
no_products: "Inga produkter ännu. Varför lägger du inte till några?"
|
||||
no_results: "Ledsen, inga resultat stämmer överens"
|
||||
variants:
|
||||
autocomplete:
|
||||
producer_name: Producent
|
||||
date_picker:
|
||||
format: '%Y-%m-%d'
|
||||
js_format: 'åå-mm-dd'
|
||||
zipcode: Postkod
|
||||
shipment_states:
|
||||
backorder: restorder
|
||||
@@ -1013,6 +1455,10 @@ sv:
|
||||
processing: behandlas
|
||||
void: annulerad
|
||||
invalid: felaktig
|
||||
order_mailer:
|
||||
invoice_email:
|
||||
hi: "Hi %{name}"
|
||||
invoice_attached_text: Här är en faktura för din senaste order från
|
||||
order_state:
|
||||
address: adress
|
||||
adjustments: justeringar
|
||||
@@ -1026,3 +1472,6 @@ sv:
|
||||
resumed: återupptagen
|
||||
returned: returnerad
|
||||
skrill: skrill
|
||||
orders:
|
||||
invoice:
|
||||
tax_invoice: "SKATTEFAKTURA:"
|
||||
|
||||
@@ -28,6 +28,7 @@ Openfoodnetwork::Application.routes.draw do
|
||||
get :products
|
||||
post :order_cycle
|
||||
get :order_cycle
|
||||
get :changeable_orders_alert
|
||||
end
|
||||
|
||||
resources :producers, only: [:index] do
|
||||
@@ -42,6 +43,10 @@ Openfoodnetwork::Application.routes.draw do
|
||||
end
|
||||
end
|
||||
|
||||
resources :line_items, only: [:destroy] do
|
||||
get :bought, on: :collection
|
||||
end
|
||||
|
||||
resources :groups, only: [:index, :show] do
|
||||
collection do
|
||||
get :signup
|
||||
@@ -262,6 +267,7 @@ Spree::Core::Engine.routes.prepend do
|
||||
resources :orders do
|
||||
get :clear, :on => :collection
|
||||
get :order_cycle_expired, :on => :collection
|
||||
put :cancel, on: :member
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
class AddAllowOrderChangesToEnterprise < ActiveRecord::Migration
|
||||
def change
|
||||
add_column :enterprises, :allow_order_changes, :boolean, default: false, null: false
|
||||
end
|
||||
end
|
||||
@@ -251,6 +251,7 @@ ActiveRecord::Schema.define(:version => 20161215230219) do
|
||||
t.boolean "allow_guest_orders", :default => true, :null => false
|
||||
t.text "invoice_text"
|
||||
t.boolean "display_invoice_logo", :default => false
|
||||
t.boolean "allow_order_changes", :default => false, :null => false
|
||||
end
|
||||
|
||||
add_index "enterprises", ["address_id"], :name => "index_enterprises_on_address_id"
|
||||
|
||||
@@ -47,6 +47,14 @@ module OpenFoodNetwork
|
||||
end
|
||||
end
|
||||
|
||||
def increment!(attribute, by=1)
|
||||
if attribute == :count_on_hand && @variant_override.andand.stock_overridden?
|
||||
@variant_override.increment_stock! by
|
||||
else
|
||||
super
|
||||
end
|
||||
end
|
||||
|
||||
def sku
|
||||
@variant_override.andand.sku || super
|
||||
end
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user