diff --git a/app/assets/javascripts/user/app/controllers/application_controller.js.coffee b/app/assets/javascripts/user/app/controllers/application_controller.js.coffee index 7d72da8b..80d36394 100644 --- a/app/assets/javascripts/user/app/controllers/application_controller.js.coffee +++ b/app/assets/javascripts/user/app/controllers/application_controller.js.coffee @@ -30,8 +30,6 @@ App.ApplicationController = Ember.Controller.extend @transitionToRoute('list', data.id).then => @set 'globals.list.state', 'closed' @set 'globals.list', null - join_request_approved: (data)-> - @setCurrentList -> @transitionToRoute('active_list') order_being_processed: (data)-> order = @store.all('order').findBy 'id', data.id order.set('state', 'active') if order @@ -63,16 +61,20 @@ App.ApplicationController = Ember.Controller.extend if requestor_id is Qstorage.getItem('user_id') @set 'globals.notice', t('join_request.requestor.join_request_rejected') @set 'globals.join_request_sent', false + else + @transitionToRoute 'active_list' - join_request_approved: -> - return if @get('globals.list.id') # Not interested when there is an active list + + join_request_approved: (data)-> + return @transitionToRoute 'active_list' if @get('globals.list.id') # Not interested when there is an active list + # The rest of the code is for the new user @setCurrentList -> @transitionToRoute('active_list').then => @set 'globals.notice', t('join_request.requestor.join_request_approved') @set 'globals.join_request_sent', false - list_changed_table: -> - @setCurrentList() + list_changed_table: (data)-> + @store.findRecord('table', data.to_table_id).then (table)=>@set('globals.list.table', table) orders_in_process_count: (data)-> @set 'globals.list.supplier.orders_in_process_count', data.count orders_placed_count: (data)-> diff --git a/app/assets/javascripts/user/app/modifications/model_modifications.js.coffee b/app/assets/javascripts/user/app/modifications/model_modifications.js.coffee index 0b74483e..31ca208c 100644 --- a/app/assets/javascripts/user/app/modifications/model_modifications.js.coffee +++ b/app/assets/javascripts/user/app/modifications/model_modifications.js.coffee @@ -4,6 +4,7 @@ DS.Model.reopen eraseRecord: -> #@clearRelationships() @transitionTo('deleted.saved') + @unloadRecord() DS.Model.reopenClass findCached: (id)-> return null unless id diff --git a/app/assets/javascripts/user/app/templates/global/_side_menu.emblem b/app/assets/javascripts/user/app/templates/global/_side_menu.emblem index 380234f6..cb6b681e 100644 --- a/app/assets/javascripts/user/app/templates/global/_side_menu.emblem +++ b/app/assets/javascripts/user/app/templates/global/_side_menu.emblem @@ -19,7 +19,7 @@ =link-to 'active_list' class="side-menu-active-list" span.active-list-icon span= t 'active_list.title' - if globals.list.join_requests + if globals.list.join_requests.length li =link-to 'join_requests' span= t 'models.plural.join_request' diff --git a/app/controllers/suppliers/lists_controller.rb b/app/controllers/suppliers/lists_controller.rb index 7172b16f..3744f6d3 100644 --- a/app/controllers/suppliers/lists_controller.rb +++ b/app/controllers/suppliers/lists_controller.rb @@ -26,7 +26,7 @@ module Suppliers def active - @lists = List.active_for_supplier(current_supplier.id) + @lists = List.active_for_supplier(current_supplier) @lists.include_relation(:table) # for number respond_to do |format| diff --git a/app/controllers/suppliers/orders_controller.rb b/app/controllers/suppliers/orders_controller.rb index 5c5dc11e..c59e3883 100644 --- a/app/controllers/suppliers/orders_controller.rb +++ b/app/controllers/suppliers/orders_controller.rb @@ -4,7 +4,7 @@ module Suppliers # GET /tables.json def index if params[:state] == 'active' - @orders = Order.active_for_supplier(current_supplier.id) + @orders = Order.active_for_supplier(current_supplier) else @orders = Order.for_supplier(current_supplier, page: params[:page], per_page: params['per_page'] || 25) end diff --git a/app/controllers/suppliers/sections_controller.rb b/app/controllers/suppliers/sections_controller.rb index cedcf405..aae51ee6 100644 --- a/app/controllers/suppliers/sections_controller.rb +++ b/app/controllers/suppliers/sections_controller.rb @@ -8,7 +8,7 @@ module Suppliers @sections = current_supplier.sections @sections.include_relation(:tables) - # @active_lists = List.active_for_supplier(current_supplier.id) + # @active_lists = List.active_for_supplier(current_supplier) # @active_table_ids = @active_lists.map(&:table_id).compact # for section in @sections # for table in section.tables diff --git a/app/models/list.rb b/app/models/list.rb index a9ee56a2..1d5ab520 100644 --- a/app/models/list.rb +++ b/app/models/list.rb @@ -29,17 +29,22 @@ class List view :by_supplier_id_and_id, key: [:supplier_id, :_id] view :for_supplier_view, key: [:supplier_id, :created_at] - view :active_by_table_id_view, type: :custom, map_function: %|function(doc){ + view :active_view, type: :custom, map_function: %|function(doc){ if(doc.ruby_class == 'List' && doc.state == 'active'){ - emit(doc.table_id, 1); + emit([doc.supplier_id, doc.table_id], 1); } }|, reduce_function: '_sum' + #view :active_by_table_id_view, type: :custom, map_function: %|function(doc){ + #if(doc.ruby_class == 'List' && doc.state == 'active'){ + #emit(doc.table_id, 1); + #} + #}|, reduce_function: '_sum' - view :active_by_supplier_id_view, type: :custom, map_function: %|function(doc){ - if(doc.ruby_class == 'List' && doc.state == 'active'){ - emit(doc.supplier_id, 1); - } - }|, reduce_function: '_sum' + #view :active_by_supplier_id_view, type: :custom, map_function: %|function(doc){ + #if(doc.ruby_class == 'List' && doc.state == 'active'){ + #emit(doc.supplier_id, 1); + #} + #}|, reduce_function: '_sum' view :active_by_section_id_view, type: :custom, map_function: %|function(doc){ if(doc.ruby_class == 'List' && doc.state == 'active' && doc.section_id){ @@ -70,7 +75,7 @@ class List }|, reduce_function: '_sum' def self.active - database.view(active_by_supplier_id_view(reduce: false, include_docs: true)) + database.view(active_view(reduce: false, include_docs: true)) end # Create, a list given a table and a user @@ -107,13 +112,12 @@ class List end end - def self.active_for_supplier(supplier_id, options = {}) - supplier_id = supplier_id.id if supplier_id.is_a?(Supplier) - database.view(active_by_supplier_id_view(key: supplier_id, reduce: false, include_docs: true)) + def self.active_for_supplier(supplier, options = {}) + database.view(active_view(startkey: [supplier.id], endkey: ["#{supplier.id}\u9999"], reduce: false, include_docs: true)) end - def self.active_for_section(section_id, options = {}) - database.view(active_by_section_id_view(key: section_id, reduce: false, include_docs: true)) + def self.active_for_section(section, options = {}) + database.view(active_by_section_id_view(key: section.id, reduce: false, include_docs: true)) end # Return all currently active orders for a given section @@ -121,12 +125,11 @@ class List database.view(active_for_supplier_and_section_view(key: [supplier.id, section_id], reduce: false, include_docs: true)) end - def self.active_for_table(table_id, options = {}) - if table_id.is_a?(Array) - database.view(active_by_table_id_view(options.reverse_merge(keys: table_id, reduce: false, include_docs: true))) + def self.active_for_table(table_or_tables, options = {}) + if table_or_tables.is_a?(Array) + database.view(active_view(options.reverse_merge(keys: table_or_tables.map{|t| [t.supplier_id, t.id]}, reduce: false, include_docs: true))) else - table_id = table_id.id if table_id.is_a?(SimplyStored::Couch) - database.view(active_by_table_id_view(options.reverse_merge(key: table_id, reduce: false, include_docs: true))) + database.view(active_view(options.reverse_merge(key: [table_or_tables.supplier_id, table_or_tables.id], reduce: false, include_docs: true))) end end diff --git a/app/models/section.rb b/app/models/section.rb index 3c5b240d..35c1b1cd 100644 --- a/app/models/section.rb +++ b/app/models/section.rb @@ -20,14 +20,14 @@ class Section def occupied_tables return @occupied_tables if @occupied_tables.present? - @active_lists = List.active_for_section(self.id) + @active_lists = List.active_for_section(self) @active_lists.include_relation(:table) @occupied_tables = @active_lists.map(&:table) end def active_lists return @active_lists if @active_lists.present? - @active_lists = List.active_for_section(self.id) + @active_lists = List.active_for_section(self) end def active_orders diff --git a/app/models/supplier.rb b/app/models/supplier.rb index 999343b9..648687cf 100644 --- a/app/models/supplier.rb +++ b/app/models/supplier.rb @@ -99,9 +99,10 @@ class Supplier @active_orders end + # Tody, simplify to List.active_for_supplier(self) def active_lists(options = {}) return @active_lists if @active_lists - @active_lists = options[:section_id].present? ? List.active_for_supplier_and_section(self, options[:section_id]) : List.active_for_supplier(id) + @active_lists = options[:section_id].present? ? List.active_for_supplier_and_section(self, options[:section_id]) : List.active_for_supplier(self) @active_lists.include_relations(table: :section, orders: {product_orders: :product}) @active_lists end diff --git a/app/models/table.rb b/app/models/table.rb index 7026972b..35cdf914 100644 --- a/app/models/table.rb +++ b/app/models/table.rb @@ -51,14 +51,14 @@ class Table def occupied? return @is_occupied if instance_variable_defined?(:'@is_occupied') - @is_occupied = !self.class.database.view(List.active_by_table_id_view(key: id, reduce: true)).zero? + @is_occupied = !self.class.database.view(List.active_view(key: [supplier_id, id], reduce: true)).zero? end alias occupied occupied? def occupied=(val) end def self.enrich_active_list_id(tables) if tables.is_a?(Array) - lists = List.active_for_table(tables.map(&:id)) + lists = List.active_for_table(tables) for table in tables if list = lists.find{|l| l.table_id == table.id} table.active_list_id = list.id @@ -79,7 +79,7 @@ class Table def active_list # nil memoizing return @active_list if @active_list || @active_list_is_set - self.active_list = self.class.database.view(List.active_by_table_id_view(key: id, include_docs: true, reduce: false, limit: 1)).try(:first) + self.active_list = self.class.database.view(List.active_view(key: [supplier_id, id], include_docs: true, reduce: false, limit: 1)).try(:first) end def active_list=(val) diff --git a/spec/acceptance_steps/global_user_steps.rb b/spec/acceptance_steps/global_user_steps.rb index 8af98fe0..0b2247d4 100644 --- a/spec/acceptance_steps/global_user_steps.rb +++ b/spec/acceptance_steps/global_user_steps.rb @@ -3,12 +3,6 @@ step "the user scans a table QR code" do page.execute_script "App.__container__.lookup('route:application').transitionTo('table','#{@table.id}')" end -step "another user scans the QR code on the table" do - step 'there is another signed in user user' - visit user_root_path - page.execute_script "App.__container__.lookup('route:application').transitionTo('table','#{@table.id}')" -end - step "I am on the user homepage" do step "the user is on the homepage" end diff --git a/spec/acceptance_steps/users/join_request_steps.rb b/spec/acceptance_steps/users/join_request_steps.rb index 09d739f0..f7ff90b2 100644 --- a/spec/acceptance_steps/users/join_request_steps.rb +++ b/spec/acceptance_steps/users/join_request_steps.rb @@ -14,6 +14,14 @@ step "the original user should not see the join request anymore" do page.should_not have_content request_text end +step "another user scans the QR code on the table" do + step 'there is another signed in user user' + visit user_root_path + when_ember_is_ready do + page.execute_script "App.__container__.lookup('route:application').transitionTo('table','#{@table.id}')" + end +end + step "the original user approves the other user's join request" do find('.join-request-approve').click end diff --git a/spec/factories/list_factory.rb b/spec/factories/list_factory.rb index df6b233d..117c8ae3 100644 --- a/spec/factories/list_factory.rb +++ b/spec/factories/list_factory.rb @@ -2,5 +2,8 @@ FactoryGirl.define do factory :list do association :table association :supplier #TODO warning! this may create a different supplier than the one created by the associated table + trait :active do + #default + end end end diff --git a/spec/models/list_spec.rb b/spec/models/list_spec.rb index aacfe0bb..7cb4d1ef 100644 --- a/spec/models/list_spec.rb +++ b/spec/models/list_spec.rb @@ -164,4 +164,14 @@ describe List do expect( list.needs_help? ).not_to be true end end + context 'class_methods' do + describe 'active_for_supplier' do + + it 'only returns the lists for the supplier' do + other_supplier = create :supplier, open: true + other_list = create :list, :active, supplier: other_supplier + described_class.active_for_supplier( list.supplier ).should eq [list] + end + end + end end diff --git a/spec/support/ember_helpers.rb b/spec/support/ember_helpers.rb index cf18cb9f..676bb12e 100644 --- a/spec/support/ember_helpers.rb +++ b/spec/support/ember_helpers.rb @@ -101,4 +101,16 @@ module SpecEmberHelpers def faye_log JSON.parse(page.evaluate_script(%|JSON.stringify(window.faye_log)|)) end + + def when_ember_is_ready(&blk) + times = 0 + ember_ready = page.evaluate_script('window.ember_ready') + while not ember_ready or times < 30 + sleep 0.1 + ember_ready = page.evaluate_script('window.ember_ready') + times += 1 + end + raise "Ember is not loaded and should be" unless ember_ready + blk.call + end end diff --git a/spec/support/route_helpers.rb b/spec/support/route_helpers.rb index 99559b65..ad72744b 100644 --- a/spec/support/route_helpers.rb +++ b/spec/support/route_helpers.rb @@ -18,9 +18,11 @@ module SpecRouteHelpers max_wait = 4 time = 0.0 time_step = 0.25 - while time < max_wait && ember_route != route_def + current_route = ember_route + while time < max_wait && current_route != route_def time += time_step sleep time_step + current_route = ember_route end ember_route(omit_should_raise: true).should == route_def end diff --git a/wip.md b/wip.md index f3ff0ab9..dae2ac70 100644 --- a/wip.md +++ b/wip.md @@ -4,6 +4,8 @@ Release Supplier -------- +- Add confirmation on order + deletion!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - Allow table drag rollback same as area and element in section edit mode view - Move arrange tables logic to the client @@ -24,6 +26,8 @@ Supplier User ---- +- Fix clicking on product with + variants!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - Implement https://github.com/EddyVerbruggen/Custom-URL-scheme with mozo:// scheme - test met veel producten - product variants