diff --git a/app/controllers/backend/base_controller.rb b/app/controllers/backend/base_controller.rb index 35d303a4ab..8dd4365993 100644 --- a/app/controllers/backend/base_controller.rb +++ b/app/controllers/backend/base_controller.rb @@ -123,32 +123,27 @@ def find_and_check(*args) record end - def save_and_redirect(record, options = {}, &_block) + def save_and_redirect(record, options = {}) record.attributes = options[:attributes] if options[:attributes] ActiveRecord::Base.transaction do if options[:saved] || record.send(:save) - yield record if block_given? response.headers['X-Return-Code'] = 'success' response.headers['X-Saved-Record-Id'] = record.id.to_s if params[:dialog] head :ok - else - # TODO: notify if success - if options[:url] == :back - redirect_to_back - elsif params[:redirect] - redirect_to params[:redirect] - else - url = options[:url] - record.reload - if url.is_a? Hash - url.each do |k, v| - url[k] = (v.is_a?(CodeString) ? record.send(v) : v) - end - end - redirect_to(url) + return true + end + + notify_success options[:notify] if options[:notify] + + url = options[:url] + record.reload + if url.is_a? Hash + url.each do |k, v| + url[k] = (v.is_a?(CodeString) ? record.send(v) : v) end end + redirect_to(url) return true end end diff --git a/app/controllers/concerns/restfully_manageable.rb b/app/controllers/concerns/restfully_manageable.rb index 61f8ae6bb0..8cb1d53535 100644 --- a/app/controllers/concerns/restfully_manageable.rb +++ b/app/controllers/concerns/restfully_manageable.rb @@ -6,7 +6,7 @@ module ClassMethods def manage_restfully(defaults = {}) name = controller_name path = controller_path - options = defaults.extract!(:t3e, :creation_t3e, :redirect_to, :xhr, :destroy_to, :subclass_inheritance, :partial, :multipart, :except, :only, :cancel_url, :scope) + options = defaults.extract!(:t3e, :creation_t3e, :redirect_to, :xhr, :destroy_to, :subclass_inheritance, :partial, :multipart, :except, :only, :cancel_url, :scope, :identifier) after_save_url = options[:redirect_to] after_destroy_url = options[:destroy_to] || :index actions = [:index, :show, :new, :create, :edit, :update, :destroy] @@ -16,6 +16,7 @@ def manage_restfully(defaults = {}) record_name = name.to_s.singularize model_name = name.to_s.classify model = model_name.constantize + columns = model.columns_definition.keys if after_save_url.blank? if instance_methods(true).include?(:show) || actions.include?(:show) @@ -25,16 +26,21 @@ def manage_restfully(defaults = {}) end end + notify = true if after_save_url == :show - after_save_url = "{action: :show, id: 'id'.c}".c + after_save_url = "{ action: :show, id: 'id'.c }".c + notify = false elsif after_save_url == :index - after_save_url = '{action: :index}'.c + after_save_url = '{ action: :index }'.c elsif after_save_url.is_a?(CodeString) after_save_url.gsub!(/RECORD/, "@#{record_name}") elsif after_save_url.is_a?(Hash) after_save_url = after_save_url.inspect.gsub(/RECORD/, "@#{record_name}") end + options[:identifier] ||= %w(name number id).detect { |i| columns.include?(i) } + raise 'Need a :identifier option' if options[:identifier].blank? + render_form_options = [] render_form_options << "partial: '#{options[:partial]}'" if options[:partial] render_form_options << 'multipart: true' if options[:multipart] @@ -43,7 +49,7 @@ def manage_restfully(defaults = {}) else :back end - render_form_options << "locals: {cancel_url: #{options[:cancel_url].inspect}}" + render_form_options << "locals: { cancel_url: #{options[:cancel_url].inspect} }" render_form = 'render(' + render_form_options.join(', ') + ')' after_save_url ||= options[:cancel_url].inspect @@ -154,7 +160,14 @@ def manage_restfully(defaults = {}) code << "def create\n" # code << " raise params.inspect.red\n" code << " @#{record_name} = resource_model.new(permitted_params)\n" - code << " return if save_and_redirect(@#{record_name}#{', url: (' + after_save_url + ')' if after_save_url})\n" + code << " return if save_and_redirect(@#{record_name}, url: params[:redirect] || (#{after_save_url})" + notification_message = ":record_x_created.tn(record: #{model.name}.model_name.human, name: @#{record_name}.#{options[:identifier]}, column: #{model.name}.human_attribute_name(#{options[:identifier].inspect}))" + code << if notify + ", notify: #{notification_message}" + else + ", notify: (params[:redirect] ? #{notification_message} : false)" + end + code << ")\n" code << " #{t3e_code}\n" if creation_t3e code << " #{render_form}\n" code << "end\n" @@ -173,7 +186,14 @@ def manage_restfully(defaults = {}) code << find_and_check_code code << " #{t3e_code}\n" code << " @#{record_name}.attributes = permitted_params\n" - code << " return if save_and_redirect(@#{record_name}#{', url: (' + after_save_url + ')' if after_save_url})\n" + code << " return if save_and_redirect(@#{record_name}, url: params[:redirect] || (#{after_save_url})" + notification_message = ":record_x_updated.tn(record: #{model.name}.model_name.human, name: @#{record_name}.#{options[:identifier]}, column: #{model.name}.human_attribute_name(#{options[:identifier].inspect}))" + code << if notify + ", notify: #{notification_message}" + else + ", notify: (params[:redirect] ? #{notification_message} : false)" + end + code << ")\n" code << " #{render_form}\n" code << "end\n" end diff --git a/app/helpers/backend/helps_helper.rb b/app/helpers/backend/helps_helper.rb index e7d225fb0a..bdc2231e63 100644 --- a/app/helpers/backend/helps_helper.rb +++ b/app/helpers/backend/helps_helper.rb @@ -143,6 +143,5 @@ def wikize(content, options = {}) content.html_safe end - end end diff --git a/config/locales/cmn/action.yml b/config/locales/cmn/action.yml index b1c1bcf2ff..6ca543a9c9 100644 --- a/config/locales/cmn/action.yml +++ b/config/locales/cmn/action.yml @@ -1724,6 +1724,8 @@ cmn: record_has_been_correctly_removed: "该记录已成功删除" record_has_been_imported: "记录已导入" record_not_found: "未发现记录" + record_x_created: "%{record}%{name}已建立" + record_x_updated: "%{record}%{name}已更新" sale_is_not_duplicatable: "销售不duplicatable" select_entry_items_to_mark_together: "选择条目的项目一起庆祝" # sensor_has_been_fixed: "Sensor %{name} has been fixed" diff --git a/config/locales/deu/action.yml b/config/locales/deu/action.yml index 8deeb9574c..d9d4638d06 100644 --- a/config/locales/deu/action.yml +++ b/config/locales/deu/action.yml @@ -1723,6 +1723,8 @@ deu: record_has_been_correctly_removed: "Die Aufzeichnung wurde erfolgreich entfernt" record_has_been_imported: "Die Bilanz wurde importiert" record_not_found: "Aufnahme nicht gefunden" + record_x_created: "%{record} %{name} erstellt" + record_x_updated: "%{record} %{name} aktualisiert" sale_is_not_duplicatable: "Verkauf ist nicht duplizierbar" select_entry_items_to_mark_together: "Eintrag auswählen Elemente zu kennzeichnen zusammen" # sensor_has_been_fixed: "Sensor %{name} has been fixed" diff --git a/config/locales/eng/action.yml b/config/locales/eng/action.yml index cf69049d44..c966659b7a 100644 --- a/config/locales/eng/action.yml +++ b/config/locales/eng/action.yml @@ -1907,6 +1907,8 @@ eng: record_has_been_correctly_removed: "The record has been removed successfully" record_has_been_imported: "Record has been imported" record_not_found: "Record not found" #? + record_x_created: "%{record} %{name} created" + record_x_updated: "%{record} %{name} updated" sale_is_not_duplicatable: "Sale is not duplicatable" select_entry_items_to_mark_together: "Select entry items to mark together" sensor_has_been_fixed: "Sensor %{name} has been fixed" @@ -2082,4 +2084,4 @@ eng: backend/product_natures: "%{name}" backend/products: "%{work_number} %{name} (%{number})" backend/trackings: "%{serial} ‒ %{name} ‒ %{producer_full_name}" - backend/users: "%{first_name} %{last_name}" \ No newline at end of file + backend/users: "%{first_name} %{last_name}" diff --git a/config/locales/fra/action.yml b/config/locales/fra/action.yml index 1b5c5b65a0..1f813dfeab 100644 --- a/config/locales/fra/action.yml +++ b/config/locales/fra/action.yml @@ -2346,6 +2346,8 @@ fra: record_has_been_imported: "L’enregistrement a été importé" record_has_not_been_removed: "L’enregistrement n’a pas être supprimé correctement" #? record_not_found: "Enregistrement introuvable" + record_x_created: "%{record} %{name} créé" + record_x_updated: "%{record} %{name} mise à jour" restoration_finished: "La restauration de la sauvegarde s’est terminée (en %{value} secondes)." #? sale_already_invoiced: "La vente a déjà été facturée: vous ne pouvez pas définir de livraison" #? sale_cannot_be_updated: "Le devis n’est plus modifiable." #? diff --git a/config/locales/ita/action.yml b/config/locales/ita/action.yml index 53811de342..9dc40afb04 100644 --- a/config/locales/ita/action.yml +++ b/config/locales/ita/action.yml @@ -1789,6 +1789,8 @@ ita: record_has_been_correctly_removed: "Il record è stato rimosso con successo" record_has_been_imported: "Record è stato importato" record_not_found: "Inserimento non trovato" + record_x_created: "%{record} %{name} creato" + record_x_updated: "%{record} %{name} aggiornato" sale_is_not_duplicatable: "Sale non è duplicabile" select_entry_items_to_mark_together: "Selezionare gli elementi di ingresso per segnare insieme" # sensor_has_been_fixed: "Sensor %{name} has been fixed" diff --git a/config/locales/por/action.yml b/config/locales/por/action.yml index 80b08f9266..73cdecc7eb 100644 --- a/config/locales/por/action.yml +++ b/config/locales/por/action.yml @@ -1728,6 +1728,8 @@ por: record_has_been_correctly_removed: "O registro foi removido com sucesso" record_has_been_imported: "Registro foi importada" record_not_found: "Registro não encontrado" + record_x_created: "%{record} %{name} criado" + record_x_updated: "%{record} %{name} atualizado" sale_is_not_duplicatable: "Venda não é duplicatable" select_entry_items_to_mark_together: "Selecione os itens de entrada para marcar juntos" # sensor_has_been_fixed: "Sensor %{name} has been fixed" diff --git a/config/locales/spa/action.yml b/config/locales/spa/action.yml index bc6f0d1680..a9f5b07d8d 100644 --- a/config/locales/spa/action.yml +++ b/config/locales/spa/action.yml @@ -2000,6 +2000,8 @@ spa: record_has_been_imported: "El registro ha sido importado" record_has_not_been_removed: "El registro no puede ser suprimido" #? record_not_found: "Registro no encontrado" + record_x_created: "%{record} %{name} creado" + record_x_updated: "%{record} %{name} actualizado" restoration_finished: "La restauración de la salvaguardia se tremino (en %{name} secondos). Su codigo sociedad es %{code}" #? sale_already_invoiced: "La vente a déjà été facturée: vous ne pouvez pas définir de livraison" #? sale_cannot_be_updated: "El presupuesto ya no esta modificable." #? diff --git a/db/structure.sql b/db/structure.sql index e831fd5674..916ae48932 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -2,8 +2,8 @@ -- PostgreSQL database dump -- --- Dumped from database version 9.5.4 --- Dumped by pg_dump version 9.5.4 +-- Dumped from database version 9.5.5 +-- Dumped by pg_dump version 9.5.5 SET statement_timeout = 0; SET lock_timeout = 0;