From 0f47367cd03fd8e0c7ea969660071b3354fdabce Mon Sep 17 00:00:00 2001 From: Senad Uka Date: Tue, 3 Mar 2015 07:26:18 +0100 Subject: [PATCH] confirming works, last address is now persisted, thank you page is up but not yet accessible --- front-api/controllers/cart.rb | 16 +++-- front-api/models/cart.rb | 4 +- front-api/models/delivery_destination.rb | 7 +++ front-ui/app/actions/navigationActions.js | 8 +++ front-ui/app/components/cart/addToCart.js | 16 ++++- .../app/components/thankyou/thankYouPage.js | 60 +++++++++++++++++++ front-ui/app/models/orderConfirmation.js | 20 +++++++ front-ui/app/router.js | 2 + front-ui/app/stores/cartStore.js | 40 +++++++++---- 9 files changed, 153 insertions(+), 20 deletions(-) create mode 100644 front-ui/app/components/thankyou/thankYouPage.js create mode 100644 front-ui/app/models/orderConfirmation.js diff --git a/front-api/controllers/cart.rb b/front-api/controllers/cart.rb index 062e725..ded9cab 100644 --- a/front-api/controllers/cart.rb +++ b/front-api/controllers/cart.rb @@ -5,9 +5,9 @@ helpers do auid = cookies[:anonymous_user_id] if auid.nil? auid = AnonymousUser.uid - response.set_cookie('anonymous_user_id', :path=> '/', :httponly => true, :value=>auid, :expires=>Time.now+100.year) + response.set_cookie('anonymous_user_id', :path=> '/', :httponly => true, :value=>auid, :expires=> Time.now + 100.year) end - auid + return auid end end @@ -22,7 +22,6 @@ get '/cart/item' do Cart.find_or_create(anonymous_id, -1).item_in_carts.to_json end - update_cart_item = ->() { cart_id = Cart.find_or_create(anonymous_id, -1).id item_id = @json_params["item_id"].to_i @@ -58,4 +57,13 @@ update_delivery_destination = ->() { cart.delivery_destination.to_json(:except => [:created_at, :email_verification_code, :phone_verification_code]) } put '/cart/delivery_destination', &update_delivery_destination -post '/cart/delivery_destination', &update_delivery_destination \ No newline at end of file +post '/cart/delivery_destination', &update_delivery_destination + + +post '/cart/confirmation' do + cart = Cart.find_or_create(anonymous_id, -1) + if cart.item_in_carts.length > 0 + cart.ordered = true + cart.save! + end +end \ No newline at end of file diff --git a/front-api/models/cart.rb b/front-api/models/cart.rb index b03f293..5597e26 100644 --- a/front-api/models/cart.rb +++ b/front-api/models/cart.rb @@ -7,7 +7,7 @@ class Cart < ActiveRecord::Base cart ||= Cart.where(anonymous_id_string: anonymous_id).where(ordered: false).first safe_user_id = (user_id > 0) ? user_id : nil cart ||= Cart.create!(anonymous_id_string: anonymous_id, user_id: safe_user_id, ordered: false ) - cart.delivery_destination ||= DeliveryDestination.create! + cart.delivery_destination ||= DeliveryDestination.find_or_create(anonymous_id, user_id); return cart end -end \ No newline at end of file +end \ No newline at end of file diff --git a/front-api/models/delivery_destination.rb b/front-api/models/delivery_destination.rb index ac8594b..5d3bd6f 100644 --- a/front-api/models/delivery_destination.rb +++ b/front-api/models/delivery_destination.rb @@ -1,4 +1,11 @@ class DeliveryDestination < ActiveRecord::Base has_one :cart belongs_to :user + + def self.find_or_create(anonymous_id, user_id) + dd = DeliveryDestination.where(user_id: user_id).order("id desc").first + dd ||= DeliveryDestination.where(anonymous_id_string: anonymous_id).order("id desc").first + dd ||= DeliveryDestination.create!({user_id: user_id, anonymous_id_string: anonymous_id }) + return dd + end end diff --git a/front-ui/app/actions/navigationActions.js b/front-ui/app/actions/navigationActions.js index 6099b6d..87f923e 100644 --- a/front-ui/app/actions/navigationActions.js +++ b/front-ui/app/actions/navigationActions.js @@ -78,9 +78,17 @@ var NavigationActions = { actionType: NavigationConstants.CHANGE_URL, url: '/' }); + }, + + goToThankYou: function() { + AppDispatcher.handleAction({ + actionType: NavigationConstants.CHANGE_URL, + url: '/hvala' + }); } + }; module.exports = NavigationActions; diff --git a/front-ui/app/components/cart/addToCart.js b/front-ui/app/components/cart/addToCart.js index 2b1a229..1180abd 100644 --- a/front-ui/app/components/cart/addToCart.js +++ b/front-ui/app/components/cart/addToCart.js @@ -12,15 +12,25 @@ var AddToCart = React.createClass({ render: function() { - return ( + var itemCount = this.state.item.get('count'); + + var moreThanZeroItems = (
-
-
+
+
); + + var zeroItems = (
+
+
+
+
); + + return (itemCount <= 0) ? zeroItems : moreThanZeroItems; }, // Add change listeners to stores diff --git a/front-ui/app/components/thankyou/thankYouPage.js b/front-ui/app/components/thankyou/thankYouPage.js new file mode 100644 index 0000000..e1e35cd --- /dev/null +++ b/front-ui/app/components/thankyou/thankYouPage.js @@ -0,0 +1,60 @@ +var React = require('react'), + CartStore = require('../../stores/cartStore'), + AddToCart = require('../cart/addToCart'), + CartActions = require('../../actions/cartActions'), + NavigationActions = require('../../actions/navigationActions'), + Globals = require('../../globals') + Router = require("react-router"), + Link = Router.Link; + + +var ThankYouPage = React.createClass({ + + render: function() { + + return ( + +
+

Roba je naručena!

+

Hvala na narudžbi. Naša zaposlenica će vas kontaktirati da ugovori detalje o preuzimanju.

+ +

Registrujte se kako biste dobili informaciju o popustima, imali pregled svih vaših narudžbi, + koristili Baby Shower, Predlagač poklona te kalendar događaja.

+ +

+ Registracija je jednostavna - samo jedan klik. Klikni ovdje. +

+
+ + ); + + }, + + // Add change listeners to stores + /* + , + componentDidMount: function() { + CartStore.addChangeListener(this._onChange); + CartActions.load(); + }, + + componentWillUnmount: function () { + CartStore.removeChangeListener(this._onChange); + }, + + _onChange: function () { + if (this.isMounted()) { + this.setState(CartStore.getWholeCartState()); + } + + }, + + + getInitialState: function () { + return CartStore.getWholeCartState(); + }*/ + +}); + + +module.exports = ThankYouPage; diff --git a/front-ui/app/models/orderConfirmation.js b/front-ui/app/models/orderConfirmation.js new file mode 100644 index 0000000..e6a499d --- /dev/null +++ b/front-ui/app/models/orderConfirmation.js @@ -0,0 +1,20 @@ +var Backbone = require('backbone'); +var Globals = require('../globals'); + +var orderConfirmation = Backbone.Model.extend({ + + initialize: function() { + $.ajaxPrefilter( + function(options, originalOptions, jqXHR) { + options.xhrFields = { + withCredentials: true + } + } + ); + }, + + url: Globals.ApiUrl + '/cart/confirmation', + defaults: { } +}); + +module.exports = orderConfirmation; \ No newline at end of file diff --git a/front-ui/app/router.js b/front-ui/app/router.js index 3a5d55f..e5755c9 100644 --- a/front-ui/app/router.js +++ b/front-ui/app/router.js @@ -14,6 +14,7 @@ var RootApp = require('./components/rootApp'); var StartPage = require('./components/startPage/startPage'); var ByCategory = require('./components/browsing/byCategory'); var BySection = require('./components/browsing/bySection'); +var ThankYouPage = require('./components/thankyou/thankYouPage'); var Register = require('./components/account/register'); var Login = require('./components/account/login'); @@ -28,6 +29,7 @@ var routes = ( + ); diff --git a/front-ui/app/stores/cartStore.js b/front-ui/app/stores/cartStore.js index abda775..8638266 100644 --- a/front-ui/app/stores/cartStore.js +++ b/front-ui/app/stores/cartStore.js @@ -2,10 +2,12 @@ var AppDispatcher = require('../dispatcher/appDispatcher'); var EventEmitter = require('events').EventEmitter; var CartConstants = require('../constants/cartConstants'); var CartActions = require('../actions/cartActions'); +var NavigationActions = require('../actions/navigationActions'); var ItemInCart = require('../models/itemInCart'); var ItemInCartCollection = require('../models/itemInCartCollection'); var ItemCollection = require('../models/itemCollection'); var DeliveryDestination = require('../models/deliveryDestination'); +var OrderConfirmation = require('../models/orderConfirmation'); var _ = require('underscore'); @@ -44,6 +46,15 @@ var loadCart = function() { }; +var saveCartStateForItem = function(itemId) { + var item = CartStore.getStateFor(itemId); + item.save({ + success: function() { + CartActions.dataLoaded(); + } + }); +}; + var addItem = function(itemId) { var state = states[itemId] || new ItemInCart({ @@ -53,6 +64,7 @@ var addItem = function(itemId) { state.set('count', state.get('count') + 1); states[itemId] = state; saveCartStateForItem(itemId); + }; var takeItemOut = function(itemId) { @@ -68,23 +80,29 @@ var takeItemOut = function(itemId) { saveCartStateForItem(itemId); }; -var saveCartStateForItem = function(itemId) { - var item = CartStore.getStateFor(itemId); - item.save({ - success: function() { - CartActions.dataLoaded(); - } - }); -}; - var changeDeliveryDestinationProperty = function(property, value) { _deliveryDestination.set(property, value); }; + +var confirmOrder = function () { + console.log("confirming"); + var oc = new OrderConfirmation({ hamo: 'meho' }); + oc.save({b:'b'}, { + success: function () { + console.log("done"); + NavigationActions.goToThankYou(); + } + }); +}; + + var saveDeliveryDestination = function() { - _deliveryDestination.save({ + console.log("saving delivery destination"); + _deliveryDestination.save(null,{ success: function() { - CartActions.dataLoaded(); + console.log("saved delivery destination"); + confirmOrder(); } }) };