mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-24 20:36:49 +00:00
Move form-saving logic into dedicated StandingOrderForm service
This commit is contained in:
@@ -1,46 +1,18 @@
|
||||
angular.module("admin.standingOrders").controller "StandingOrderController", ($scope, $http, $window, StatusMessage, StandingOrder, customers, schedules, paymentMethods, shippingMethods) ->
|
||||
angular.module("admin.standingOrders").controller "StandingOrderController", ($scope, $http, StandingOrder, StandingOrderForm, customers, schedules, paymentMethods, shippingMethods) ->
|
||||
$scope.standingOrder = new StandingOrder()
|
||||
$scope.errors = null
|
||||
$scope.save = null
|
||||
$scope.customers = customers
|
||||
$scope.schedules = schedules
|
||||
$scope.paymentMethods = paymentMethods
|
||||
$scope.shippingMethods = shippingMethods
|
||||
$scope.errors = {}
|
||||
$scope.distributor_id = $scope.standingOrder.shop_id # variant selector requires distributor_id
|
||||
$scope.view = if $scope.standingOrder.id? then 'review' else 'details'
|
||||
$scope.nextCallbacks = {}
|
||||
$scope.backCallbacks = {}
|
||||
$scope.creditCards = []
|
||||
|
||||
successCallback = (response) ->
|
||||
StatusMessage.display 'success', 'Saved. Redirecting...'
|
||||
$window.location.href = "/admin/standing_orders"
|
||||
|
||||
errorCallback = (response) ->
|
||||
if response.data?.errors?
|
||||
angular.extend($scope.errors, response.data.errors)
|
||||
keys = Object.keys(response.data.errors)
|
||||
StatusMessage.display 'failure', response.data.errors[keys[0]][0]
|
||||
else
|
||||
# Happens when there are sync issues between SO and initialised orders
|
||||
# We save the SO, but open a dialog, so want to stay on the page
|
||||
StatusMessage.display 'success', 'Saved'
|
||||
|
||||
formInvalid = -> StatusMessage.display 'failure', t('admin.standing_orders.details.invalid_error')
|
||||
|
||||
$scope.save = ->
|
||||
return formInvalid() unless $scope.standing_order_form.$valid
|
||||
delete $scope.errors[k] for k, v of $scope.errors
|
||||
$scope.standing_order_form.$setPristine()
|
||||
StatusMessage.display 'progress', 'Saving...'
|
||||
if $scope.standingOrder.id?
|
||||
$scope.standingOrder.update().then successCallback, errorCallback
|
||||
else
|
||||
$scope.standingOrder.create().then successCallback, errorCallback
|
||||
|
||||
$scope.setView = (view) -> $scope.view = view
|
||||
|
||||
$scope.stepTitleFor = (step) -> t("admin.standing_orders.steps.#{step}")
|
||||
|
||||
$scope.registerNextCallback = (view, callback) => $scope.nextCallbacks[view] = callback
|
||||
$scope.registerBackCallback = (view, callback) => $scope.backCallbacks[view] = callback
|
||||
$scope.next = -> $scope.nextCallbacks[$scope.view]()
|
||||
@@ -60,3 +32,8 @@ angular.module("admin.standingOrders").controller "StandingOrderController", ($s
|
||||
|
||||
$scope.shipAddressFromBilling = =>
|
||||
angular.extend($scope.standingOrder.ship_address, $scope.standingOrder.bill_address)
|
||||
|
||||
$scope.$watch 'standing_order_form', ->
|
||||
form = new StandingOrderForm($scope.standing_order_form, $scope.standingOrder)
|
||||
$scope.errors = form.errors
|
||||
$scope.save = form.save
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
angular.module("admin.standingOrders").factory 'StandingOrderForm', ($window, StatusMessage) ->
|
||||
class StandingOrderForm
|
||||
form: null
|
||||
standingOrder: null
|
||||
errors: {}
|
||||
|
||||
constructor: (form, standingOrder) ->
|
||||
@form = form
|
||||
@standingOrder = standingOrder
|
||||
|
||||
save: =>
|
||||
return @formInvalid() unless @form.$valid
|
||||
delete @errors[k] for k, v of @errors
|
||||
@form.$setPristine()
|
||||
StatusMessage.display 'progress', 'Saving...'
|
||||
if @standingOrder.id?
|
||||
@standingOrder.update().then @successCallback, @errorCallback
|
||||
else
|
||||
@standingOrder.create().then @successCallback, @errorCallback
|
||||
|
||||
successCallback: (response) =>
|
||||
StatusMessage.display 'success', 'Saved. Redirecting...'
|
||||
$window.location.href = "/admin/standing_orders"
|
||||
|
||||
errorCallback: (response) =>
|
||||
if response.data?.errors?
|
||||
angular.extend(@errors, response.data.errors)
|
||||
keys = Object.keys(response.data.errors)
|
||||
StatusMessage.display 'failure', response.data.errors[keys[0]][0]
|
||||
else
|
||||
# Happens when there are sync issues between SO and initialised orders
|
||||
# We save the SO, but open a dialog, so want to stay on the page
|
||||
StatusMessage.display 'success', 'Saved'
|
||||
|
||||
formInvalid: -> StatusMessage.display 'failure', t('admin.standing_orders.details.invalid_error')
|
||||
Reference in New Issue
Block a user