mirror of
https://github.com/LaCasemate/fab-manager.git
synced 2024-12-01 12:24:28 +01:00
handle coupons & plans & user change in cart directive
This commit is contained in:
parent
62860a45fc
commit
9b7f74e02d
@ -250,8 +250,9 @@ Application.Controllers.controller 'ApplicationController', ["$rootScope", "$sco
|
|||||||
|
|
||||||
|
|
||||||
# shorthands
|
# shorthands
|
||||||
$scope.isAuthenticated = Auth.isAuthenticated;
|
$scope.isAuthenticated = Auth.isAuthenticated
|
||||||
$scope.isAuthorized = AuthService.isAuthorized;
|
$scope.isAuthorized = AuthService.isAuthorized
|
||||||
|
$rootScope.login = $scope.login
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -309,6 +309,8 @@ Application.Controllers.controller "ReserveMachineController", ["$scope", "$stat
|
|||||||
## will store the user's plan if he choosed to buy one
|
## will store the user's plan if he choosed to buy one
|
||||||
$scope.selectedPlan = null
|
$scope.selectedPlan = null
|
||||||
|
|
||||||
|
$scope.planSelectionTime = null
|
||||||
|
|
||||||
## array of fullCalendar events. Slots where the user want to book
|
## array of fullCalendar events. Slots where the user want to book
|
||||||
$scope.eventsReserved = []
|
$scope.eventsReserved = []
|
||||||
|
|
||||||
@ -568,22 +570,12 @@ Application.Controllers.controller "ReserveMachineController", ["$scope", "$stat
|
|||||||
# @param plan {Object} the plan to subscribe
|
# @param plan {Object} the plan to subscribe
|
||||||
##
|
##
|
||||||
$scope.selectPlan = (plan) ->
|
$scope.selectPlan = (plan) ->
|
||||||
if $scope.isAuthenticated()
|
$scope.planSelectionTime = new Date()
|
||||||
angular.forEach $scope.eventsReserved, (machineSlot)->
|
# toggle selected plan
|
||||||
angular.forEach $scope.ctrl.member.machine_credits, (credit)->
|
if $scope.selectedPlan != plan
|
||||||
if credit.machine_id = machineSlot.machine.id
|
$scope.selectedPlan = plan
|
||||||
credit.hours_used = 0
|
|
||||||
machineSlot.machine.is_reduced_amount = false
|
|
||||||
|
|
||||||
if $scope.selectedPlan != plan
|
|
||||||
$scope.selectedPlan = plan
|
|
||||||
else
|
|
||||||
$scope.selectedPlan = null
|
|
||||||
updateCartPrice()
|
|
||||||
else
|
else
|
||||||
$scope.login null, ->
|
$scope.selectedPlan = null
|
||||||
$scope.selectedPlan = plan
|
|
||||||
updateCartPrice()
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,15 +10,18 @@ UNAVAILABLE_SLOT_BORDER_COLOR = '<%= AvailabilityHelper::MACHINE_IS_RESERVED_BY_
|
|||||||
BOOKED_SLOT_BORDER_COLOR = '<%= AvailabilityHelper::IS_RESERVED_BY_CURRENT_USER %>'
|
BOOKED_SLOT_BORDER_COLOR = '<%= AvailabilityHelper::IS_RESERVED_BY_CURRENT_USER %>'
|
||||||
|
|
||||||
|
|
||||||
Application.Directives.directive 'cart', [ '$rootScope', 'dialogs', 'growl', 'Price', '_t', ($rootScope, dialogs, growl, Price, _t) ->
|
Application.Directives.directive 'cart', [ '$rootScope', 'dialogs', 'growl', 'Auth', 'Price', '_t', ($rootScope, dialogs, growl, Auth, Price, _t) ->
|
||||||
{
|
{
|
||||||
restrict: 'E'
|
restrict: 'E'
|
||||||
scope:
|
scope:
|
||||||
slot: '='
|
slot: '='
|
||||||
selectionTime: '='
|
slotSelectionTime: '='
|
||||||
onUpdate: '='
|
onUpdate: '='
|
||||||
onOutdated: '='
|
onOutdated: '='
|
||||||
user: '='
|
user: '='
|
||||||
|
modePlans: '='
|
||||||
|
plan: '='
|
||||||
|
planSelectionTime: '='
|
||||||
templateUrl: '<%= asset_path "shared/_cart.html" %>'
|
templateUrl: '<%= asset_path "shared/_cart.html" %>'
|
||||||
link: ($scope, element, attributes) ->
|
link: ($scope, element, attributes) ->
|
||||||
|
|
||||||
@ -51,10 +54,6 @@ Application.Directives.directive 'cart', [ '$rootScope', 'dialogs', 'growl', 'Pr
|
|||||||
applied: null
|
applied: null
|
||||||
|
|
||||||
|
|
||||||
# What the binded slot
|
|
||||||
$scope.$watch 'selectionTime', (newValue, oldValue) ->
|
|
||||||
if newValue != oldValue
|
|
||||||
slotSelectionChanged()
|
|
||||||
|
|
||||||
##
|
##
|
||||||
# Add the provided slot to the shopping cart (state transition from free to 'about to be reserved')
|
# Add the provided slot to the shopping cart (state transition from free to 'about to be reserved')
|
||||||
@ -97,6 +96,49 @@ Application.Directives.directive 'cart', [ '$rootScope', 'dialogs', 'growl', 'Pr
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
##
|
||||||
|
# Checks that every selected slots were added to the shopping cart. Ie. will return false if
|
||||||
|
# any checked slot was not validated by the user.
|
||||||
|
##
|
||||||
|
$scope.machineSlotsValid = ->
|
||||||
|
isValid = true
|
||||||
|
angular.forEach $scope.eventsReserved, (m)->
|
||||||
|
isValid = false if !m.isValid
|
||||||
|
isValid
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
##
|
||||||
|
# Switch the user's view from the reservation agenda to the plan subscription
|
||||||
|
##
|
||||||
|
$scope.showPlans = ->
|
||||||
|
$scope.modePlans = true
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### PRIVATE SCOPE ###
|
||||||
|
|
||||||
|
##
|
||||||
|
# Kind of constructor: these actions will be realized first when the directive is loaded
|
||||||
|
##
|
||||||
|
initialize = ->
|
||||||
|
# What the binded slot
|
||||||
|
$scope.$watch 'slotSelectionTime', (newValue, oldValue) ->
|
||||||
|
if newValue != oldValue
|
||||||
|
slotSelectionChanged()
|
||||||
|
$scope.$watch 'user', (newValue, oldValue) ->
|
||||||
|
if newValue != oldValue
|
||||||
|
slotSelectionChanged()
|
||||||
|
$scope.$watch 'planSelectionTime', (newValue, oldValue) ->
|
||||||
|
if newValue != oldValue
|
||||||
|
planSelectionChanged()
|
||||||
|
# watch when a coupon is applied to re-compute the total price
|
||||||
|
$scope.$watch 'coupon.applied', (newValue, oldValue) ->
|
||||||
|
unless newValue == null and oldValue == null
|
||||||
|
updateCartPrice()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
##
|
##
|
||||||
# Callback triggered when the selected slot changed
|
# Callback triggered when the selected slot changed
|
||||||
##
|
##
|
||||||
@ -163,6 +205,21 @@ Application.Directives.directive 'cart', [ '$rootScope', 'dialogs', 'growl', 'Pr
|
|||||||
updateCartPrice()
|
updateCartPrice()
|
||||||
|
|
||||||
|
|
||||||
|
##
|
||||||
|
# Callback triggered when the selected slot changed
|
||||||
|
##
|
||||||
|
planSelectionChanged = ->
|
||||||
|
if Auth.isAuthenticated()
|
||||||
|
if $scope.selectedPlan != $scope.plan
|
||||||
|
$scope.selectedPlan = $scope.plan
|
||||||
|
else
|
||||||
|
$scope.selectedPlan = null
|
||||||
|
updateCartPrice()
|
||||||
|
else
|
||||||
|
$rootScope.login null, ->
|
||||||
|
$scope.selectedPlan = $scope.plan
|
||||||
|
updateCartPrice()
|
||||||
|
|
||||||
|
|
||||||
##
|
##
|
||||||
# Update the total price of the current selection/reservation
|
# Update the total price of the current selection/reservation
|
||||||
@ -225,6 +282,11 @@ Application.Directives.directive 'cart', [ '$rootScope', 'dialogs', 'growl', 'Pr
|
|||||||
offered: slot.offered || false
|
offered: slot.offered || false
|
||||||
|
|
||||||
reservation
|
reservation
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## !!! MUST BE CALLED AT THE END of the directive
|
||||||
|
initialize()
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -41,10 +41,13 @@
|
|||||||
|
|
||||||
|
|
||||||
<cart slot="selectedEvent"
|
<cart slot="selectedEvent"
|
||||||
selection-time="selectionTime"
|
slot-selection-time="selectionTime"
|
||||||
on-update="updateCalendar"
|
on-update="updateCalendar"
|
||||||
on-outdated="refetchCalendar"
|
on-outdated="refetchCalendar"
|
||||||
user="ctrl.member"></cart>
|
user="ctrl.member"
|
||||||
|
mode-plans="plansAreShown"
|
||||||
|
plan="selectedPlan"
|
||||||
|
plan-selection-time="planSelectionTime"></cart>
|
||||||
|
|
||||||
<uib-alert type="warning m">
|
<uib-alert type="warning m">
|
||||||
<p class="text-sm">
|
<p class="text-sm">
|
||||||
|
@ -39,22 +39,22 @@
|
|||||||
<coupon show="machineSlotsValid() && (!plansAreShown || selectedPlan)" coupon="coupon.applied" total="totalNoCoupon" user-id="{{user.id}}"></coupon>
|
<coupon show="machineSlotsValid() && (!plansAreShown || selectedPlan)" coupon="coupon.applied" total="totalNoCoupon" user-id="{{user.id}}"></coupon>
|
||||||
|
|
||||||
<span ng-hide="fablabWithoutPlans">
|
<span ng-hide="fablabWithoutPlans">
|
||||||
<div ng-if="machineSlotsValid() && !user.subscribed_plan" ng-show="!plansAreShown">
|
<div ng-if="machineSlotsValid() && !user.subscribed_plan" ng-show="!plansAreShown">
|
||||||
<p class="font-sbold text-base l-h-2x" translate>{{ 'to_benefit_from_attractive_prices' }}</p>
|
<p class="font-sbold text-base l-h-2x" translate>{{ 'to_benefit_from_attractive_prices' }}</p>
|
||||||
<div><button class="btn btn-warning-full rounded btn-block text-xs" ng-click="showPlans()" translate>{{ 'view_our_subscriptions' }}</button></div>
|
<div><button class="btn btn-warning-full rounded btn-block text-xs" ng-click="showPlans()" translate>{{ 'view_our_subscriptions' }}</button></div>
|
||||||
<p class="font-bold text-base text-u-c text-center m-b-xs" translate>{{ 'or' }}</p>
|
<p class="font-bold text-base text-u-c text-center m-b-xs" translate>{{ 'or' }}</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div ng-if="selectedPlan">
|
<div ng-if="selectedPlan">
|
||||||
<div class="m-t-md m-b-sm text-base">{{ 'you_ve_just_selected_a_' | translate }} <br> <span class="font-sbold" translate>{{ '_subscription' }}</span> :</div>
|
<div class="m-t-md m-b-sm text-base">{{ 'you_ve_just_selected_a_' | translate }} <br> <span class="font-sbold" translate>{{ '_subscription' }}</span> :</div>
|
||||||
<div class="panel panel-default bg-light m-n">
|
<div class="panel panel-default bg-light m-n">
|
||||||
<div class="panel-body m-b-md">
|
<div class="panel-body m-b-md">
|
||||||
<div class="font-sbold text-u-c">{{selectedPlan | humanReadablePlanName }}</div>
|
<div class="font-sbold text-u-c">{{selectedPlan | humanReadablePlanName }}</div>
|
||||||
<div class="text-base">{{ 'cost_of_the_subscription' | translate }} <span class="text-blue">{{selectedPlan.amount | currency}}</span></div>
|
<div class="text-base">{{ 'cost_of_the_subscription' | translate }} <span class="text-blue">{{selectedPlan.amount | currency}}</span></div>
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</span>
|
</div>
|
||||||
|
</div>
|
||||||
|
</span>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user