active_scaffold_batch 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/LICENSE.txt +20 -0
- data/README +4 -0
- data/app/assets/javascripts/jquery/active_scaffold_batch.js +13 -0
- data/app/assets/javascripts/prototype/active_scaffold_batch.js +13 -0
- data/app/assets/stylesshets/active_scaffold_batch.css +36 -0
- data/app/views/active_scaffold_overrides/_batch_create_form.html.erb +9 -0
- data/app/views/active_scaffold_overrides/_batch_create_form_attribute.html.erb +19 -0
- data/app/views/active_scaffold_overrides/_batch_create_form_body.html.erb +25 -0
- data/app/views/active_scaffold_overrides/_batch_create_form_footer.html.erb +4 -0
- data/app/views/active_scaffold_overrides/_batch_create_form_horizontal.html.erb +14 -0
- data/app/views/active_scaffold_overrides/_batch_create_form_horizontal_header.html.erb +8 -0
- data/app/views/active_scaffold_overrides/_batch_create_form_horizontal_record.html.erb +26 -0
- data/app/views/active_scaffold_overrides/_batch_create_form_multiple.html.erb +8 -0
- data/app/views/active_scaffold_overrides/_batch_create_form_vertical.html.erb +7 -0
- data/app/views/active_scaffold_overrides/_batch_create_form_vertical_record.html.erb +6 -0
- data/app/views/active_scaffold_overrides/_batch_update_form.html.erb +7 -0
- data/app/views/active_scaffold_overrides/_batch_update_form_attribute.html.erb +12 -0
- data/app/views/active_scaffold_overrides/_batch_update_form_attribute_scope.html.erb +14 -0
- data/app/views/active_scaffold_overrides/_batch_update_form_body.html.erb +25 -0
- data/app/views/active_scaffold_overrides/_form_messages.html.erb +9 -0
- data/app/views/active_scaffold_overrides/batch_add.js.erb +5 -0
- data/app/views/active_scaffold_overrides/batch_create.html.erb +5 -0
- data/app/views/active_scaffold_overrides/batch_update.html.erb +5 -0
- data/app/views/active_scaffold_overrides/on_batch_base.js.erb +10 -0
- data/app/views/active_scaffold_overrides/on_batch_create.js.erb +15 -0
- data/app/views/active_scaffold_overrides/on_batch_update.js.erb +10 -0
- data/config/locales/de.yml +22 -0
- data/config/locales/en.yml +21 -0
- data/config/locales/es.yml +21 -0
- data/lib/active_scaffold/actions/batch_base.rb +135 -0
- data/lib/active_scaffold/actions/batch_create.rb +247 -0
- data/lib/active_scaffold/actions/batch_destroy.rb +77 -0
- data/lib/active_scaffold/actions/batch_update.rb +281 -0
- data/lib/active_scaffold/config/batch_create.rb +79 -0
- data/lib/active_scaffold/config/batch_destroy.rb +54 -0
- data/lib/active_scaffold/config/batch_update.rb +52 -0
- data/lib/active_scaffold/helpers/batch_create_column_helpers.rb +38 -0
- data/lib/active_scaffold/helpers/calendar_date_select_update_column_helpers.rb +33 -0
- data/lib/active_scaffold/helpers/datepicker_update_column_helpers.rb +29 -0
- data/lib/active_scaffold/helpers/update_column_helpers.rb +93 -0
- data/lib/active_scaffold_batch/config/core.rb +13 -0
- data/lib/active_scaffold_batch/engine.rb +23 -0
- data/lib/active_scaffold_batch/version.rb +9 -0
- data/lib/active_scaffold_batch.rb +25 -0
- metadata +125 -0
data/LICENSE.txt
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2012 Sergio Cambra
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
jQuery(document).ready(function() {
|
2
|
+
jQuery('.batch-create-rows a').live('ajax:beforeSend', function(event, xhr, settings) {
|
3
|
+
var num_records = jQuery(this).closest('.batch-create-rows').find('input[name=num_records]').val();
|
4
|
+
if (num_records) settings.url += (settings.url.indexOf('?') != -1 ? '&' : '?') + 'num_records=' + num_records;
|
5
|
+
return true;
|
6
|
+
});
|
7
|
+
jQuery('.multiple .form_record a.remove').live('click', function(event) {
|
8
|
+
event.preventDefault();
|
9
|
+
var record = jQuery(this).closest('.form_record');
|
10
|
+
record.prev('.form_record-errors').remove();
|
11
|
+
record.remove();
|
12
|
+
});
|
13
|
+
});
|
@@ -0,0 +1,13 @@
|
|
1
|
+
document.observe("dom:loaded", function() {
|
2
|
+
document.on('ajax:create', '.batch-create-rows a', function(event, response) {
|
3
|
+
var num_records = $(this).up('.batch-create-rows').down('input[name=num_records]').value();
|
4
|
+
if (num_records) response.request.url += (response.request.url.include('?') ? '&' : '?') + 'num_records=' + num_records;
|
5
|
+
return true;
|
6
|
+
});
|
7
|
+
document.on('click', '.multiple .form_record > a.remove', function(event) {
|
8
|
+
event.stop();
|
9
|
+
var record = $(this).up('.form_record'), errors = record.previous('.form_record-errors');
|
10
|
+
if (errors) errors.remove();
|
11
|
+
record.remove();
|
12
|
+
});
|
13
|
+
});
|
@@ -0,0 +1,36 @@
|
|
1
|
+
.active-scaffold .multiple .form_record .errorExplanation {
|
2
|
+
clear: left;
|
3
|
+
margin-top: 10px;
|
4
|
+
}
|
5
|
+
.active-scaffold .multiple .form_record {
|
6
|
+
border-top: 1px solid #7FCF00;
|
7
|
+
}
|
8
|
+
.active-scaffold .multiple .form_record:first-child {
|
9
|
+
border-top: 0;
|
10
|
+
}
|
11
|
+
.active-scaffold .multiple .form_record a.remove {
|
12
|
+
background-image: url("/assets/active_scaffold/cross.png");
|
13
|
+
display: block;
|
14
|
+
font-weight: bold;
|
15
|
+
height: 16px;
|
16
|
+
padding: 0;
|
17
|
+
text-indent: -4000px;
|
18
|
+
width: 16px;
|
19
|
+
margin: 0 5px 10px;
|
20
|
+
}
|
21
|
+
.batch-create-rows {
|
22
|
+
float: right;
|
23
|
+
}
|
24
|
+
.batch-create-rows input {
|
25
|
+
width: 4em;
|
26
|
+
}
|
27
|
+
.active-scaffold-header div.actions > a.batch_new {
|
28
|
+
background-position: 5px 50%;
|
29
|
+
background-repeat: no-repeat;
|
30
|
+
background-image: url("/assets/active_scaffold/add.png");
|
31
|
+
margin: 0;
|
32
|
+
padding: 5px 5px 5px 25px;
|
33
|
+
}
|
34
|
+
.active-scaffold .active-scaffold .active-scaffold-header div.actions > a.batch_new {
|
35
|
+
padding-left: 25px;
|
36
|
+
}
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<%= render :partial => "base_form", :locals => {:xhr => xhr ||= nil,
|
2
|
+
:form_action => form_action ||= :batch_create,
|
3
|
+
:method => method ||= :post,
|
4
|
+
:cancel_link => cancel_link ||= true,
|
5
|
+
:body_partial => batch_create_by_column ? 'batch_create_form_body' : 'batch_create_form_multiple',
|
6
|
+
:footer_extension => ('batch_create_form_footer' unless batch_create_by_column),
|
7
|
+
:scope => @scope,
|
8
|
+
:headline => headline ||= active_scaffold_config.batch_create.label} %>
|
9
|
+
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<% scope ||= nil %>
|
2
|
+
<dl>
|
3
|
+
<dt>
|
4
|
+
<label for="<%= active_scaffold_input_options(column, scope)[:id] %>"><%= column.label %></label>
|
5
|
+
</dt>
|
6
|
+
<dd>
|
7
|
+
<% if batch_create_by_column.to_sym == column %>
|
8
|
+
<%= active_scaffold_batch_create_by_column column, scope %>
|
9
|
+
<% else %>
|
10
|
+
<%= active_scaffold_input_for column, scope %>
|
11
|
+
<% if column.update_columns -%>
|
12
|
+
<%= loading_indicator_tag(:action => :render_field, :id => params[:id]) %>
|
13
|
+
<% end -%>
|
14
|
+
<% end %>
|
15
|
+
<% if column.description -%>
|
16
|
+
<span class="description"><%= column.description %></span>
|
17
|
+
<% end -%>
|
18
|
+
</dd>
|
19
|
+
</dl>
|
@@ -0,0 +1,25 @@
|
|
1
|
+
<% subsection_id ||= nil %>
|
2
|
+
<ol class="form" <%= "id=#{subsection_id}" unless subsection_id.nil? %> <%= 'style="display: none;"' if columns.collapsed -%>>
|
3
|
+
<li class="form-element">
|
4
|
+
<%= hidden_field_tag("batch_scope", (batch_scope || 'LISTED')) %>
|
5
|
+
</li>
|
6
|
+
<% columns.each :for => @record do |column| %>
|
7
|
+
<% next if column.plural_association? || (column.association && [:has_one].include?(column.association.macro)) %>
|
8
|
+
<% renders_as = column_renders_as(column) %>
|
9
|
+
<% if renders_as == :subsection -%>
|
10
|
+
<% subsection_id = sub_section_id(:sub_section => column.label) %>
|
11
|
+
<li class="sub-section">
|
12
|
+
<h5><%= column.label %></h5>
|
13
|
+
<%= render :partial => 'form', :locals => { :columns => column, :subsection_id => subsection_id} %>
|
14
|
+
<%= link_to_visibility_toggle(subsection_id, {:default_visible => !column.collapsed}) -%>
|
15
|
+
</li>
|
16
|
+
<% elsif column.readonly_association?
|
17
|
+
next %>
|
18
|
+
<% else
|
19
|
+
renders_as = :field if renders_as == :subform -%>
|
20
|
+
<li class="form-element <%= column.css_class unless column.css_class.nil? %>">
|
21
|
+
<%= render :partial => 'batch_create_form_attribute', :locals => { :column => column } -%>
|
22
|
+
</li>
|
23
|
+
<% end -%>
|
24
|
+
<% end -%>
|
25
|
+
</ol>
|
@@ -0,0 +1,4 @@
|
|
1
|
+
<span class='batch-create-rows'>
|
2
|
+
<%= as_(:add_some_records, :model => active_scaffold_config.label(:count => 2), :number_input => text_field_tag(:num_records, 1, :id => nil)).html_safe %>
|
3
|
+
<%= link_to as_(:add), params_for(:action => :batch_add), :remote => true %>
|
4
|
+
</span>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<div class="form sub-form horizontal-sub-form">
|
2
|
+
<table cellpadding="0" cellspacing="0">
|
3
|
+
<% @record = records.first -%>
|
4
|
+
<%= render :partial => 'batch_create_form_horizontal_header', :locals => {:columns => columns, :record => @record} %>
|
5
|
+
|
6
|
+
<tbody id="<%= element_form_id :action => form_action %>-content" class="multiple">
|
7
|
+
<% first = true -%>
|
8
|
+
<% records.each do |scope, @record| %>
|
9
|
+
<%= render :partial => 'batch_create_form_horizontal_record', :locals => { :columns => columns, :form_action => form_action, :scope => "[#{scope}]", :first => first } %>
|
10
|
+
<% first = false -%>
|
11
|
+
<% end -%>
|
12
|
+
</tbody>
|
13
|
+
</table>
|
14
|
+
</div>
|
@@ -0,0 +1,26 @@
|
|
1
|
+
<% first = true unless local_assigns.has_key? :first -%>
|
2
|
+
<% if @record.errors.count -%>
|
3
|
+
<tr class="form_record-errors">
|
4
|
+
<td colspan="<%= columns.length + 1 %>" id="<%= element_messages_id :action => @record.class.name.underscore %>">
|
5
|
+
<%= active_scaffold_error_messages_for :record, :object_name => @record.class.model_name.human.downcase %>
|
6
|
+
</td>
|
7
|
+
</tr>
|
8
|
+
<% end %>
|
9
|
+
<tr class="form_record">
|
10
|
+
<% columns.each :flatten => true do |column| -%>
|
11
|
+
<%
|
12
|
+
next if column_renders_as(column) == :hidden
|
13
|
+
next unless @record.authorized_for?(:crud_type => :create, :column => column.name)
|
14
|
+
column = column.clone
|
15
|
+
column.form_ui ||= :select if column.association
|
16
|
+
|
17
|
+
col_class = []
|
18
|
+
col_class << 'required' if column.required?
|
19
|
+
col_class << column.css_class unless column.css_class.nil?
|
20
|
+
-%>
|
21
|
+
<td class="<%= col_class.join(' ') %>">
|
22
|
+
<%= render :partial => form_partial_for_column(column), :locals => { :column => column, :scope => scope } -%>
|
23
|
+
</td>
|
24
|
+
<% end -%>
|
25
|
+
<td><%= batch_create_multiple_remove_link unless first %></td>
|
26
|
+
</tr>
|
@@ -0,0 +1,7 @@
|
|
1
|
+
<div id="<%= element_form_id :action => form_action %>-content" class="multiple">
|
2
|
+
<% first = true -%>
|
3
|
+
<% records.each do |scope, @record| -%>
|
4
|
+
<%= render :partial => 'batch_create_form_vertical_record', :locals => { :columns => columns, :form_action => form_action, :scope => "[#{scope}]", :first => first } %>
|
5
|
+
<% first = false -%>
|
6
|
+
<% end -%>
|
7
|
+
</div>
|
@@ -0,0 +1,6 @@
|
|
1
|
+
<% first = true unless local_assigns.has_key? :first -%>
|
2
|
+
<div class="form_record">
|
3
|
+
<%= render :partial => 'form_messages' %>
|
4
|
+
<%= render :partial => 'form', :locals => { :columns => columns, :form_action => form_action, :scope => scope } %>
|
5
|
+
<%= batch_create_multiple_remove_link unless first %>
|
6
|
+
</div>
|
@@ -0,0 +1,7 @@
|
|
1
|
+
<%= render :partial => "base_form", :locals => {:xhr => xhr ||= nil,
|
2
|
+
:form_action => form_action ||= :batch_update,
|
3
|
+
:method => method ||= :post,
|
4
|
+
:cancel_link => cancel_link ||= true,
|
5
|
+
:body_partial => 'batch_update_form_body',
|
6
|
+
:headline => headline ||= active_scaffold_config.batch_update.label} %>
|
7
|
+
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<% scope ||= nil %>
|
2
|
+
<dl>
|
3
|
+
<dt>
|
4
|
+
<label for="<%= active_scaffold_input_options(column, scope)[:id] %>"><%= column.label %></label>
|
5
|
+
</dt>
|
6
|
+
<dd>
|
7
|
+
<%= active_scaffold_update_for column, scope %>
|
8
|
+
<% if column.description -%>
|
9
|
+
<span class="description"><%= column.description %></span>
|
10
|
+
<% end -%>
|
11
|
+
</dd>
|
12
|
+
</dl>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<% scope ||= nil
|
2
|
+
scope_select_options = active_scaffold_update_scope_select_options %>
|
3
|
+
<% if scope_select_options.length < 2 %>
|
4
|
+
<%= active_scaffold_update_scope_select(scope_select_options) %>
|
5
|
+
<% else %>
|
6
|
+
<dl>
|
7
|
+
<dt>
|
8
|
+
<label for="record_batch_scope"><%= as_(:records) %></label>
|
9
|
+
</dt>
|
10
|
+
<dd>
|
11
|
+
<%= active_scaffold_update_scope_select(scope_select_options) %>
|
12
|
+
</dd>
|
13
|
+
</dl>
|
14
|
+
<% end %>
|
@@ -0,0 +1,25 @@
|
|
1
|
+
<% subsection_id ||= nil %>
|
2
|
+
<ol class="form" <%= "id=#{subsection_id}" unless subsection_id.nil? %> <%= 'style="display: none;"' if columns.collapsed -%>>
|
3
|
+
<li class="form-element">
|
4
|
+
<%= render :partial => 'batch_update_form_attribute_scope' -%>
|
5
|
+
</li>
|
6
|
+
<% columns.each :for => @record do |column| %>
|
7
|
+
<% next if column.plural_association? || (column.association && [:has_one].include?(column.association.macro)) %>
|
8
|
+
<% renders_as = column_renders_as(column) %>
|
9
|
+
<% if renders_as == :subsection -%>
|
10
|
+
<% subsection_id = sub_section_id(:sub_section => column.label) %>
|
11
|
+
<li class="sub-section">
|
12
|
+
<h5><%= column.label %></h5>
|
13
|
+
<%= render :partial => 'form', :locals => { :columns => column, :subsection_id => subsection_id} %>
|
14
|
+
<%= link_to_visibility_toggle(subsection_id, {:default_visible => !column.collapsed}) -%>
|
15
|
+
</li>
|
16
|
+
<% elsif column.readonly_association?
|
17
|
+
next %>
|
18
|
+
<% else
|
19
|
+
renders_as = :field if renders_as == :subform -%>
|
20
|
+
<li class="form-element <%= column.css_class unless column.css_class.nil? %>">
|
21
|
+
<%= render :partial => 'batch_update_form_attribute', :locals => { :column => column } -%>
|
22
|
+
</li>
|
23
|
+
<% end -%>
|
24
|
+
<% end -%>
|
25
|
+
</ol>
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<% if @error_records.present? && @record_errors.is_a?(Array) -%>
|
2
|
+
<%= render :partial => 'messages' unless request.xhr? %>
|
3
|
+
|
4
|
+
<% @error_records.each do |record| %>
|
5
|
+
<%= active_scaffold_error_messages_for record, :object_name => "#{record.class.model_name.human.downcase}#{record.new_record? ? '' : ": #{record.to_label}"}" %>
|
6
|
+
<% end %>
|
7
|
+
<% else %>
|
8
|
+
<%= render :super %>
|
9
|
+
<% end %>
|
@@ -0,0 +1,5 @@
|
|
1
|
+
<% html = ''.html_safe -%>
|
2
|
+
<% @records.each do |scope, @record| -%>
|
3
|
+
<% html << render(:partial => "#{batch_create_multiple_layout}_record", :locals => { :columns => active_scaffold_config.batch_create.columns, :form_action => :batch_create, :scope => "[#{scope}]", :first => false }) %>
|
4
|
+
<% end %>
|
5
|
+
ActiveScaffold.create_associated_record_form('<%= element_form_id(:action => :batch_create) %>-content','<%= escape_javascript(html) %>', <%= {:singular => false}.to_json.html_safe %>);
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<%
|
2
|
+
if @error_records.empty?
|
3
|
+
flash[:info] = as_(:batch_processing_successful) if flash[:info].blank?
|
4
|
+
else
|
5
|
+
flash[:error] = @error_records.collect do |_, record|
|
6
|
+
active_scaffold_error_messages_for(record, :object_name => "#{record.class.model_name.human.downcase}#{record.new_record? ? '' : ": #{record.to_label}"}", :header_message => '', :message => "#{record.class.model_name.human.downcase}#{record.new_record? ? '' : ": #{record.to_label}"}", :container_tag => nil, :list_type => :br)
|
7
|
+
end.join.html_safe
|
8
|
+
end
|
9
|
+
%>
|
10
|
+
ActiveScaffold.replace_html('<%= active_scaffold_content_id%>','<%=escape_javascript(render(:partial => 'list', :layout => false))%>');
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<% form_selector = "#{element_form_id(:action => :batch_create)}" %>
|
2
|
+
|
3
|
+
<% if controller.send :batch_successful? %>
|
4
|
+
<% called_by_controller = params.delete(:batch_create_by) %>
|
5
|
+
<% if called_by_controller.nil? %>
|
6
|
+
ActiveScaffold.replace_html('<%= active_scaffold_content_id %>','<%= escape_javascript(render(:partial => 'list', :layout => false)) %>');
|
7
|
+
<% else %>
|
8
|
+
ActiveScaffold.mark_records('<%= "#{controller_id(called_by_controller)}-tbody" %>', <%= {:checked => false, :include_checkboxes => true}.to_json.html_safe %>);
|
9
|
+
<% end %>
|
10
|
+
ActiveScaffold.find_action_link('<%= form_selector %>').close();
|
11
|
+
<% else %>
|
12
|
+
ActiveScaffold.find_action_link('<%= form_selector %>').update_flash_messages('<%= escape_javascript(render(:partial => 'messages')) %>');
|
13
|
+
ActiveScaffold.replace('<%= form_selector %>', '<%= escape_javascript(render(:partial => 'batch_create_form', :locals => {:xhr => true})) %>');
|
14
|
+
ActiveScaffold.scroll_to('<%= form_selector %>', true);
|
15
|
+
<% end %>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<% form_selector = "#{element_form_id(:action => :batch_update)}" %>
|
2
|
+
|
3
|
+
<% if controller.send :batch_successful? %>
|
4
|
+
ActiveScaffold.replace_html('<%= active_scaffold_content_id %>','<%= escape_javascript(render(:partial => 'list', :layout => false)) %>');
|
5
|
+
ActiveScaffold.find_action_link('<%= form_selector %>').close();
|
6
|
+
<% else %>
|
7
|
+
ActiveScaffold.find_action_link('<%= form_selector %>').update_flash_messages('<%= escape_javascript(render(:partial => 'messages')) %>');
|
8
|
+
ActiveScaffold.replace('<%= form_selector %>', '<%= escape_javascript(render(:partial => 'batch_update_form', :locals => {:xhr => true})) %>');
|
9
|
+
ActiveScaffold.scroll_to('<%= form_selector %>', true);
|
10
|
+
<% end %>
|
@@ -0,0 +1,22 @@
|
|
1
|
+
de:
|
2
|
+
active_scaffold:
|
3
|
+
no_update: '- Auswählen -'
|
4
|
+
replace: Ersetzen
|
5
|
+
plus: '+'
|
6
|
+
minus: '-'
|
7
|
+
times: '*'
|
8
|
+
division: '/'
|
9
|
+
absolute: abs
|
10
|
+
percent: '%'
|
11
|
+
batch_update: 'Speichern'
|
12
|
+
add_some_records: 'Add %{number_input} %{model}'
|
13
|
+
records: 'Records'
|
14
|
+
batch_processing_successful: "Batch processing successful"
|
15
|
+
batch: Batch
|
16
|
+
some_records_created:
|
17
|
+
one: "1 %{model} was created"
|
18
|
+
other: "%{count} %{model} were created"
|
19
|
+
delete_model: "Delete %{model}"
|
20
|
+
listed: listed
|
21
|
+
marked: marked
|
22
|
+
|
@@ -0,0 +1,21 @@
|
|
1
|
+
en:
|
2
|
+
active_scaffold:
|
3
|
+
no_update: No Update
|
4
|
+
replace: Replace
|
5
|
+
plus: '+'
|
6
|
+
minus: '-'
|
7
|
+
times: '*'
|
8
|
+
division: '/'
|
9
|
+
absolute: abs
|
10
|
+
percent: '%'
|
11
|
+
batch_update: 'Batch Update'
|
12
|
+
add_some_records: 'Add %{number_input} %{model}'
|
13
|
+
records: 'Records'
|
14
|
+
batch_processing_successful: "Batch processing successful"
|
15
|
+
batch: Batch
|
16
|
+
some_records_created:
|
17
|
+
one: "1 %{model} was created"
|
18
|
+
other: "%{count} %{model} were created"
|
19
|
+
delete_model: "Delete %{model}"
|
20
|
+
listed: listed
|
21
|
+
marked: marked
|
@@ -0,0 +1,21 @@
|
|
1
|
+
es:
|
2
|
+
active_scaffold:
|
3
|
+
no_update: No Actualizar
|
4
|
+
replace: Reemplazar
|
5
|
+
plus: '+'
|
6
|
+
minus: '-'
|
7
|
+
times: '*'
|
8
|
+
division: '/'
|
9
|
+
absolute: abs
|
10
|
+
percent: '%'
|
11
|
+
batch_update: 'Actualizar Lote'
|
12
|
+
add_some_records: 'Añadir %{number_input} %{model}'
|
13
|
+
records: 'Registros'
|
14
|
+
batch_processing_successful: "Proceso en lote realizado correctamente"
|
15
|
+
batch: Lote
|
16
|
+
some_records_created:
|
17
|
+
one: "Se creo 1 %{model}"
|
18
|
+
other: "Se crearon %{count} %{model}"
|
19
|
+
delete_model: "Eliminar %{model}"
|
20
|
+
listed: listados
|
21
|
+
marked: marcados
|
@@ -0,0 +1,135 @@
|
|
1
|
+
module ActiveScaffold::Actions
|
2
|
+
module BatchBase
|
3
|
+
|
4
|
+
def self.included(base)
|
5
|
+
base.helper_method :batch_scope
|
6
|
+
end
|
7
|
+
|
8
|
+
protected
|
9
|
+
|
10
|
+
def batch_action(batch_action = :batch_base)
|
11
|
+
process_action_link_action(batch_action) do
|
12
|
+
process_batch
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def batch_scope
|
17
|
+
if @batch_scope.nil? && params[:batch_scope]
|
18
|
+
@batch_scope = params[:batch_scope] if ['LISTED', 'MARKED'].include?(params[:batch_scope])
|
19
|
+
params.delete :batch_scope
|
20
|
+
end
|
21
|
+
@batch_scope
|
22
|
+
end
|
23
|
+
|
24
|
+
def error_records
|
25
|
+
@error_records ||= []
|
26
|
+
end
|
27
|
+
|
28
|
+
def set_record_attribute(column, attribute, value)
|
29
|
+
form_ui = column_form_ui(column)
|
30
|
+
if form_ui && (method = send("override_#{action_name}_value", form_ui))
|
31
|
+
@record.send("#{attribute}=", send(method, column, @record, value))
|
32
|
+
else
|
33
|
+
@record.send("#{attribute}=", action_name == 'batch_update' ? value[:value] : value)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def column_form_ui(column)
|
38
|
+
form_ui = column.form_ui
|
39
|
+
form_ui = column.column.type if form_ui.nil? && column.column
|
40
|
+
form_ui
|
41
|
+
end
|
42
|
+
|
43
|
+
# in case of an error we have to prepare @record object to have assigned all
|
44
|
+
# defined batch_update values, however, do not set those ones with an override
|
45
|
+
# these ones will manage on their own
|
46
|
+
def prepare_error_record
|
47
|
+
do_new
|
48
|
+
send("#{action_name}_values").each do |attribute, value|
|
49
|
+
form_ui = column_form_ui(value[:column])
|
50
|
+
set_record_attribute(value[:column], attribute, value[:value]) unless form_ui && send("override_#{action_name}_value", form_ui)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def batch_successful?
|
55
|
+
error_records.empty?
|
56
|
+
end
|
57
|
+
|
58
|
+
def process_batch
|
59
|
+
send("before_do_#{action_name}")
|
60
|
+
send("#{action_name}_#{batch_scope.downcase}") if !batch_scope.nil? && respond_to?("#{action_name}_#{batch_scope.downcase}")
|
61
|
+
prepare_error_record unless batch_successful?
|
62
|
+
end
|
63
|
+
|
64
|
+
def authorized_for_job?(record)
|
65
|
+
if record.authorized_for?(:crud_type => active_scaffold_config.send(action_name).crud_type)
|
66
|
+
true
|
67
|
+
else
|
68
|
+
record.errors.add(:base, as_(:no_authorization_for_action, :action => action_name))
|
69
|
+
error_records << record
|
70
|
+
false
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def temporary_id
|
75
|
+
(Time.now.to_f*1000).to_i.to_s
|
76
|
+
end
|
77
|
+
|
78
|
+
def batch_base_respond_to_html
|
79
|
+
if respond_to? "#{action_name}_respond_to_html"
|
80
|
+
send("#{action_name}_respond_to_html")
|
81
|
+
else
|
82
|
+
if params[:iframe]=='true' # was this an iframe post ?
|
83
|
+
do_refresh_list
|
84
|
+
responds_to_parent do
|
85
|
+
render :action => 'on_batch_base.js', :layout => false
|
86
|
+
end
|
87
|
+
else # just a regular post
|
88
|
+
flash[:info] = as_(:batch_processing_successful) if batch_successful?
|
89
|
+
return_to_main
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
def batch_base_respond_to_js
|
95
|
+
if respond_to? "#{action_name}_respond_to_js"
|
96
|
+
send("#{action_name}_respond_to_js")
|
97
|
+
else
|
98
|
+
do_refresh_list
|
99
|
+
render :action => "on_batch_base"
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
def batch_base_respond_to_xml
|
104
|
+
if respond_to? "#{action_name}_respond_to_xml"
|
105
|
+
send("#{action_name}_respond_to_xml")
|
106
|
+
else
|
107
|
+
render :xml => response_object.to_xml(:only => active_scaffold_config.send(action_name).columns.names), :content_type => Mime::XML, :status => response_status
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
def batch_base_respond_to_json
|
112
|
+
if respond_to? "#{action_name}_respond_to_json"
|
113
|
+
send("#{action_name}_respond_to_json")
|
114
|
+
else
|
115
|
+
render :text => response_object.to_json(:only => active_scaffold_config.send(action_name).columns.names), :content_type => Mime::JSON, :status => response_status
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
def batch_base_respond_to_yaml
|
120
|
+
if respond_to? "#{action_name}_respond_to_yaml"
|
121
|
+
send("#{action_name}_respond_to_yaml")
|
122
|
+
else
|
123
|
+
render :text => Hash.from_xml(response_object.to_xml(:only => active_scaffold_config.send(action_name).columns.names)).to_yaml, :content_type => Mime::YAML, :status => response_status
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
def batch_base_formats
|
128
|
+
if respond_to? "#{action_name}_formats"
|
129
|
+
send("#{action_name}_formats")
|
130
|
+
else
|
131
|
+
(default_formats + active_scaffold_config.formats + active_scaffold_config.send(action_name).formats).uniq
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|