From e69b783eb05c1632d10b4f346c9b9205f93aff34 Mon Sep 17 00:00:00 2001 From: Benjamin ter Kuile Date: Wed, 21 Oct 2015 18:29:24 +0200 Subject: [PATCH] backup commit smart signup form --- app/controllers/new_suppliers_controller.rb | 24 +++++++++++++++++++ app/{services => models}/new_supplier.rb | 22 ++++++++++++++++- app/models/supplier.rb | 2 ++ .../new_suppliers/choose_supplier.html.slim | 5 ++++ app/views/theme1/_navigation.html.slim | 1 + .../{services => models}/new_supplier_spec.rb | 0 wip.md | 1 + 7 files changed, 54 insertions(+), 1 deletion(-) rename app/{services => models}/new_supplier.rb (75%) create mode 100644 app/views/new_suppliers/choose_supplier.html.slim rename spec/{services => models}/new_supplier_spec.rb (100%) diff --git a/app/controllers/new_suppliers_controller.rb b/app/controllers/new_suppliers_controller.rb index 3f2595d1..7a45d1e9 100644 --- a/app/controllers/new_suppliers_controller.rb +++ b/app/controllers/new_suppliers_controller.rb @@ -15,6 +15,30 @@ class NewSuppliersController < ApplicationController @new_supplier = NewSupplier.new(params[:new_supplier]) @new_supplier.current_employee = current_employee + if @new_supplier.existing_employee? + if @new_supplier.supplier_name.present? && @new_supplier.new_supplier_name? + save_new_supplier + else + sign_in @new_supplier.employee + if @new_supplier.employee.suppliers.size < 2 + session[:supplier_id] = @new_supplier.employee.suppliers.first.try(:id) + else + render "choose_supplier" + end + end + else + save_new_supplier + end + + end + + def choose_supplier + + end + + private + + def save_new_supplier if @new_supplier.save sign_in @new_supplier.employee unless current_employee Notifier.new_supplier(@new_supplier.supplier.try(:id), @new_supplier.employee.id).deliver_later diff --git a/app/services/new_supplier.rb b/app/models/new_supplier.rb similarity index 75% rename from app/services/new_supplier.rb rename to app/models/new_supplier.rb index dede7022..06caf584 100644 --- a/app/services/new_supplier.rb +++ b/app/models/new_supplier.rb @@ -9,13 +9,18 @@ class NewSupplier attribute :password_confirmation without_current_employee = { unless: 'current_employee.present?' } + without_employee = { unless: 'employee.present?' } validates :supplier_name, presence: true validates :email, email: without_current_employee - validates :password, presence: without_current_employee, confirmation: without_current_employee + validates :password, presence: without_current_employee, confirmation: without_employee validate :employee_uniqueness_or_existence validate :supplier_name_uniqueness + def current_employee=(employee) + @current_employee = @employee = employee + end + def save if valid? persist! @@ -25,6 +30,21 @@ class NewSupplier end end + def existing_employee? + return true if current_employee.present? + return false unless email.present? and password.present? + existing_employee = Employee.find_by_email email + if existing_employee.valid_password?(password) + @employee = existing_employee + return true + end + false + end + + def new_supplier_name? + Supplier.count_by_name(supplier_name).zero? + end + private def persist! diff --git a/app/models/supplier.rb b/app/models/supplier.rb index 1d467647..d223b47a 100644 --- a/app/models/supplier.rb +++ b/app/models/supplier.rb @@ -50,6 +50,8 @@ class Supplier has_and_belongs_to_many :employees, storing_keys: true has_many :employee_shifts + view :by_name, key: :name + alias_method :non_enriced_employees, :employees def employees @cached_enriched_employees ||= non_enriced_employees.tap { |es| es.each{ |e| e.enrich_with_settings(settings_for(e) ) }} diff --git a/app/views/new_suppliers/choose_supplier.html.slim b/app/views/new_suppliers/choose_supplier.html.slim new file mode 100644 index 00000000..382e8afa --- /dev/null +++ b/app/views/new_suppliers/choose_supplier.html.slim @@ -0,0 +1,5 @@ +h2 Choose supplier +ul + - current_employee.suppliers.each do |supplier| + li= supplier.name + diff --git a/app/views/theme1/_navigation.html.slim b/app/views/theme1/_navigation.html.slim index 84c87df6..1458cff5 100644 --- a/app/views/theme1/_navigation.html.slim +++ b/app/views/theme1/_navigation.html.slim @@ -6,3 +6,4 @@ ul.nav ul.nav.secondary - Page.menu_roots.each do |page| li class=active_class('pages#show', name: page.name).push(page.name) = link_to page.menu_text, go_to_page_path(page.name) + li.hide-for-large-up class=active_class('sessions#new') = link_to 'Login', new_employee_session_path diff --git a/spec/services/new_supplier_spec.rb b/spec/models/new_supplier_spec.rb similarity index 100% rename from spec/services/new_supplier_spec.rb rename to spec/models/new_supplier_spec.rb diff --git a/wip.md b/wip.md index d73dfcdb..51a3008f 100644 --- a/wip.md +++ b/wip.md @@ -73,6 +73,7 @@ General - minimum delay - What products - how to display +- bitpay integration Post release