diff --git a/app/assets/javascripts/supplier/app/controllers/employees_index_controller.js.coffee b/app/assets/javascripts/supplier/app/controllers/employees_index_controller.js.coffee index 7d4a74f8..0cab3470 100644 --- a/app/assets/javascripts/supplier/app/controllers/employees_index_controller.js.coffee +++ b/app/assets/javascripts/supplier/app/controllers/employees_index_controller.js.coffee @@ -1,19 +1,3 @@ App.EmployeesIndexController = Ember.ArrayController.extend needs: ['application'] employees: (-> @get('model').sortBy('name')).property('model.@each.name') - actions: - newEmployee: -> - employee = @store.createRecord('employee') - @modal 'employee_edit', - model: employee - title_path: 'employee.modal.new_title' - close: -> employee.deleteRecord() - editEmployee: (employee)-> - @modal 'employee_edit', - model: employee - title_path: 'employee.modal.edit_title' - close: -> employee.rollback() - destroyEmployee: (employee)-> - @modal 'confirm', - title: t('employee.destroy.modal.title', employee.serialize()) - ok: -> employee.destroyRecord() diff --git a/app/assets/javascripts/supplier/app/routes/employees_route.js.coffee b/app/assets/javascripts/supplier/app/routes/employees_route.js.coffee index 7b00a783..0d9a8596 100644 --- a/app/assets/javascripts/supplier/app/routes/employees_route.js.coffee +++ b/app/assets/javascripts/supplier/app/routes/employees_route.js.coffee @@ -1,2 +1,23 @@ App.EmployeesRoute = Ember.Route.extend model: -> @store.all 'employee' + actions: + newEmployee: -> + employee = @store.createRecord('employee') + @get('controller').modal 'employee_edit', + model: employee + title_path: 'employee.modal.new_title' + close: -> employee.deleteRecord() + editEmployee: (employee)-> + @get('controller').modal 'employee_edit', + model: employee + title_path: 'employee.modal.edit_title' + close: -> employee.rollback() + destroyEmployee: (employee)-> + ac = @controllerFor('application') + if ac.get('employee.id') isnt employee.id + ac.modal 'confirm', + title: t('employee.destroy.modal.title', employee.serialize()) + ok: -> employee.destroyRecord() + else + ac.modal 'alert', + title: 'You cannot remove yourself' diff --git a/app/assets/javascripts/supplier/app/templates/employee.emblem b/app/assets/javascripts/supplier/app/templates/employee.emblem new file mode 100644 index 00000000..284f31a6 --- /dev/null +++ b/app/assets/javascripts/supplier/app/templates/employee.emblem @@ -0,0 +1,19 @@ +.row: .small-12.columns + h2=t 'models.employee' + .display-row + .display-label=t 'attributes.employee.name' + .display-field= model.name + .display-row + .display-label=t 'attributes.employee.manager' + .display-field= boolean model.manager + .display-row + .display-label=t 'attributes.employee.active' + .display-field= boolean model.active + .display-row + .display-label=t 'attributes.employee.color' + .display-field: span.current-color= colorbox model.color +.page-actions + .small-12.columns + link-to 'employees' class="button" + span=t 'models.plural.employee' + a.edit-button{ action 'editEmployee' model}= t 'helpers.links.edit' diff --git a/app/assets/javascripts/supplier/app/templates/modals/alert.emblem b/app/assets/javascripts/supplier/app/templates/modals/alert.emblem new file mode 100644 index 00000000..76037ce7 --- /dev/null +++ b/app/assets/javascripts/supplier/app/templates/modals/alert.emblem @@ -0,0 +1,3 @@ +p=body +hr +button.modal-close{action "close"}= t 'confirm.cancel' diff --git a/app/assets/javascripts/supplier/app/templates/modals/employee_shift.emblem b/app/assets/javascripts/supplier/app/templates/modals/employee_shift.emblem index 839d2be4..26397882 100644 --- a/app/assets/javascripts/supplier/app/templates/modals/employee_shift.emblem +++ b/app/assets/javascripts/supplier/app/templates/modals/employee_shift.emblem @@ -4,7 +4,7 @@ p=t 'employee_shift.modal.body_header' .form-field= model.employee.name .form-row.description .form-label=t 'attributes.employee_shift.description' - .form-field + .form-field.full = input valueBinding="model.description" = errors model.errors.description hr diff --git a/app/assets/javascripts/supplier/app/views/schedule.js.coffee b/app/assets/javascripts/supplier/app/views/schedule.js.coffee index 52bf2588..bf5bb262 100644 --- a/app/assets/javascripts/supplier/app/views/schedule.js.coffee +++ b/app/assets/javascripts/supplier/app/views/schedule.js.coffee @@ -3,7 +3,7 @@ App.ScheduleView = Ember.View.extend didInsertElement: -> placeholder = @$('#schedule-placeholder') controller = @get('controller') - events = controller.get('model').map (employee_shift)->employee_shift.get('calendar_event') + events = controller.get('model').filter((employee_shift) -> employee_shift.get('employee.active') ).map( (employee_shift)->employee_shift.get('calendar_event') ) placeholder.fullCalendar header: left: 'prev,next,today' diff --git a/app/assets/stylesheets/supplier/foundation1/_qlists.css.sass b/app/assets/stylesheets/supplier/foundation1/_qlists.css.sass index 58d35d9c..2e30423c 100644 --- a/app/assets/stylesheets/supplier/foundation1/_qlists.css.sass +++ b/app/assets/stylesheets/supplier/foundation1/_qlists.css.sass @@ -10,6 +10,13 @@ td.boolean .boolean-true @extend .fa @extend .fa-money +.display-field + .boolean-true + @extend .fa, .fa-lg, .fa-check + .boolean-false + @extend .fa, .fa-lg, .fa-minus + + td.colorbox +table-fit .list-orders-container diff --git a/app/assets/stylesheets/supplier/foundation1/_qstructure.css.sass b/app/assets/stylesheets/supplier/foundation1/_qstructure.css.sass index 54ba2067..6c3f1820 100644 --- a/app/assets/stylesheets/supplier/foundation1/_qstructure.css.sass +++ b/app/assets/stylesheets/supplier/foundation1/_qstructure.css.sass @@ -16,7 +16,7 @@ $side-spacing: 0px cursor: move !important .text-alert color: $alert-color -.text-danger +.text-warning color: $warning-color input.dimension width: 52px diff --git a/app/assets/stylesheets/supplier/foundation1/components/_colorbox.css.sass b/app/assets/stylesheets/supplier/foundation1/components/_colorbox.css.sass index 407ccc5a..1fa94c6f 100644 --- a/app/assets/stylesheets/supplier/foundation1/components/_colorbox.css.sass +++ b/app/assets/stylesheets/supplier/foundation1/components/_colorbox.css.sass @@ -3,7 +3,7 @@ display: inline-block span display: inline-block -.form-field +.form-field, .display-field .current-color .colorbox-container padding: 4px diff --git a/app/assets/stylesheets/supplier/foundation1/components/_page-actions.css.sass b/app/assets/stylesheets/supplier/foundation1/components/_page-actions.css.sass new file mode 100644 index 00000000..d5bbdb30 --- /dev/null +++ b/app/assets/stylesheets/supplier/foundation1/components/_page-actions.css.sass @@ -0,0 +1,7 @@ +.page-actions + +grid-row + $button-margin: 8px + margin-top: 15px + .edit-button + +button($bg: $warning-color) + margin-left: $button-margin diff --git a/app/controllers/confirmations_controller.rb b/app/controllers/confirmations_controller.rb index 43d47c55..8d1ccd3f 100644 --- a/app/controllers/confirmations_controller.rb +++ b/app/controllers/confirmations_controller.rb @@ -15,7 +15,7 @@ class ConfirmationsController < Devise::ConfirmationsController def after_confirmation_path_for(resource_name, resource) case resource_name - when :supplier then supplier_root_path(anchor: '/settings') + when :employee then supplier_root_path(anchor: '/settings') else root_path end end diff --git a/app/controllers/suppliers/employee_shifts_controller.rb b/app/controllers/suppliers/employee_shifts_controller.rb index 2820d82a..8aedab55 100644 --- a/app/controllers/suppliers/employee_shifts_controller.rb +++ b/app/controllers/suppliers/employee_shifts_controller.rb @@ -2,6 +2,11 @@ module Suppliers class EmployeeShiftsController < Suppliers::ApplicationController def index @employee_shifts = EmployeeShift.for_supplier(current_supplier, relevant_from: 1.week.ago) + @employee_shifts.include_relation(:employee) + # Only select shifts from currently linked and employees + @employee_shifts.select! do |shift| + current_supplier.employee_ids.include?(shift.employee.try(:id)) + end render json: @employee_shifts, each_serializer: Suppliers::EmployeeShiftSerializer end def create diff --git a/app/controllers/suppliers/employees_controller.rb b/app/controllers/suppliers/employees_controller.rb index 65692eb7..c46a8289 100644 --- a/app/controllers/suppliers/employees_controller.rb +++ b/app/controllers/suppliers/employees_controller.rb @@ -18,10 +18,11 @@ module Suppliers # POST /employees # POST /employees.json def create - @employee = Employee.new(employee_params) + @employee = Employee.find_by_email(employee_params[:email]) if employee_params[:email].present? + @employee ||= Employee.new(employee_params) if @employee.save - current_supplier.add_employee @employee + current_supplier.add_employee @employee unless current_supplier.employee_ids.include? @employee.id # already linked render json: @employee, serializer: Suppliers::EmployeeSerializer, status: :created else render json: {errors: @employee.errors}, status: :unprocessable_entity @@ -47,8 +48,9 @@ module Suppliers # DELETE /employees/1.json def destroy @employee = Employee.find(params[:id]) - render json: {}, status: :forbidden unless @employee.supplier_id == current_supplier.id - @employee.destroy + render json: {}, status: :forbidden unless current_supplier.employee_ids.include?(@employee.id) + head :forbidden and return if @employee == current_employee # do not remove self at the moment + current_supplier.remove_employee @employee respond_to do |format| format.json { head :no_content } diff --git a/app/models/employee.rb b/app/models/employee.rb index d1d0d8a9..70603e7b 100644 --- a/app/models/employee.rb +++ b/app/models/employee.rb @@ -22,7 +22,7 @@ class Employee property :name #property :email - has_many :employee_shifts + has_many :employee_shifts, dependent: :destroy view :by_email, key: :email class << self diff --git a/app/services/supplier_employees_settings.rb b/app/services/supplier_employees_settings.rb index 9bbf7e00..b55769ad 100644 --- a/app/services/supplier_employees_settings.rb +++ b/app/services/supplier_employees_settings.rb @@ -57,6 +57,13 @@ class SupplierEmployeesSettings end define_method(attribute){ value } end + def public_send(m, *args) + if ::Employee::DEFAULT_SETTINGS.has_key?(m.to_s) + ::Employee::DEFAULT_SETTINGS[m.to_s] + else + nil # this time we will raise on further invocation, since then there is something wrong + end + end end def initialize(all_employees_settings, employee, settings = {}) diff --git a/config/locales/supplier.nl.yml b/config/locales/supplier.nl.yml index da9aeb2d..45aad9b3 100644 --- a/config/locales/supplier.nl.yml +++ b/config/locales/supplier.nl.yml @@ -1,7 +1,7 @@ nl: supplier: confirm: - cancel: Nee + cancel: Sluit confirm: Ja general: destroy: diff --git a/config/routes.rb b/config/routes.rb index 45603413..985dc35e 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -2,7 +2,7 @@ ALLOWED_LOCALES = /nl|be|de|fr|en/ Qwaiter::Application.routes.draw do devise_for :users, controllers: { omniauth_callbacks: "users/omniauth_callbacks" } #devise_for :suppliers, controllers: { confirmations: 'confirmations', registrations: 'registrations' } - devise_for :employees + devise_for :employees, controllers: { confirmations: 'confirmations', registrations: 'registrations' } devise_for :administrators namespace :admin do resources :users do diff --git a/spec/models/employee_spec.rb b/spec/models/employee_spec.rb index 7687ac8f..3d8cc2af 100644 --- a/spec/models/employee_spec.rb +++ b/spec/models/employee_spec.rb @@ -22,6 +22,10 @@ describe Employee do employee.enrich_with_settings supplier.settings_for(employee) end + it 'responds to defaults without full initialization (yes this test is needed)' do + Employee.new.manager?.should be false + end + it 'responds to defaults' do employee.manager?.should be false employee.active?.should be true