diff --git a/app/views/group_orders/edit.html.haml b/app/views/group_orders/edit.html.haml
index 5569c4a1..86842fe7 100644
--- a/app/views/group_orders/edit.html.haml
+++ b/app/views/group_orders/edit.html.haml
@@ -1,2 +1 @@
-#group-order-form
- = render 'form'
\ No newline at end of file
+= render 'form'
\ No newline at end of file
diff --git a/app/views/group_orders/new.html.haml b/app/views/group_orders/new.html.haml
index 418a3b93..bcc58327 100644
--- a/app/views/group_orders/new.html.haml
+++ b/app/views/group_orders/new.html.haml
@@ -1,2 +1 @@
-#group-order-form
- = render 'form'
+= render 'form'
diff --git a/plugins/automatic_invoices/app/overrides/controllers/finance/balancing_controller.rb b/plugins/automatic_invoices/app/overrides/controllers/finance/balancing_controller.rb
new file mode 100644
index 00000000..b62734b8
--- /dev/null
+++ b/plugins/automatic_invoices/app/overrides/controllers/finance/balancing_controller.rb
@@ -0,0 +1,27 @@
+if FoodsoftAutomaticInvoices.enabled?
+ Finance::BalancingController.class_eval do
+ def close
+ @order = Order.find(params[:id])
+ @type = FinancialTransactionType.find_by_id(params.permit(:type)[:type])
+ @order.close!(@current_user, @type)
+ note = t('finance.balancing.close.notice')
+ if @order.closed?
+ alert = t('finance.balancing.close.alert')
+ if FoodsoftConfig[:group_order_invoices]&.[](:use_automatic_invoices)
+ @order.group_orders.each do |go|
+ alert = t('finance.balancing.close.settings_not_set')
+ goi = GroupOrderInvoice.find_or_create_by!(group_order_id: go.id)
+ if goi.save!
+ NotifyGroupOrderInvoiceJob.perform_later(goi)
+ note = t('finance.balancing.close.notice_mail')
+ end
+ end
+ end
+ end
+ alert ||= t('finance.balancing.close.alert')
+ redirect_to finance_order_index_url, notice: note
+ rescue => error
+ redirect_to new_finance_order_url(order_id: @order.id), notice: note, alert: alert, msg: error.message
+ end
+ end
+end
diff --git a/plugins/automatic_invoices/app/overrides/group_orders/edit/fix_hover.html.haml.deface b/plugins/automatic_invoices/app/overrides/group_orders/edit/fix_hover.html.haml.deface
deleted file mode 100644
index a867b3dc..00000000
--- a/plugins/automatic_invoices/app/overrides/group_orders/edit/fix_hover.html.haml.deface
+++ /dev/null
@@ -1,3 +0,0 @@
-/ replace_contents "#group-order-form"
-- if FoodsoftAutomaticInvoices.enabled?
- = render "form_override"
\ No newline at end of file
diff --git a/plugins/automatic_invoices/app/overrides/group_orders/new/fix_hover.html.haml.deface b/plugins/automatic_invoices/app/overrides/group_orders/new/fix_hover.html.haml.deface
deleted file mode 100644
index a867b3dc..00000000
--- a/plugins/automatic_invoices/app/overrides/group_orders/new/fix_hover.html.haml.deface
+++ /dev/null
@@ -1,3 +0,0 @@
-/ replace_contents "#group-order-form"
-- if FoodsoftAutomaticInvoices.enabled?
- = render "form_override"
\ No newline at end of file
diff --git a/plugins/automatic_invoices/app/overrides/mailers/mailer_override.rb b/plugins/automatic_invoices/app/overrides/mailers/mailer_override.rb
index e38dec85..9102d960 100644
--- a/plugins/automatic_invoices/app/overrides/mailers/mailer_override.rb
+++ b/plugins/automatic_invoices/app/overrides/mailers/mailer_override.rb
@@ -1,6 +1,11 @@
if FoodsoftAutomaticInvoices.enabled?
Mailer.class_eval do
# Sends automatically generated invoicesfor group orders to ordergroup members
+ def add_group_order_invoice_attachments(group_order_invoice)
+ attachment_name = group_order_invoice.name + '.pdf'
+ attachments[attachment_name] = GroupOrderInvoicePdf.new(group_order_invoice.load_data_for_invoice).to_pdf
+ end
+
def group_order_invoice(group_order_invoice, user)
@user = user
@group_order_invoice = group_order_invoice
diff --git a/plugins/automatic_invoices/app/views/group_orders/_form_override.html.haml b/plugins/automatic_invoices/app/views/group_orders/_form_override.html.haml
deleted file mode 100644
index ca42a203..00000000
--- a/plugins/automatic_invoices/app/views/group_orders/_form_override.html.haml
+++ /dev/null
@@ -1,181 +0,0 @@
-- content_for :javascript do
- - group_balance = FoodsoftConfig[:charge_members_manually] ? @ordering_data[:account_balance] : @ordering_data[:available_funds]
- :javascript
- $(function() {
- #{data_to_js(@ordering_data)}
- setGroupBalance(#{group_balance});
- setMinimumBalance(#{FoodsoftConfig[:minimum_balance] or 0});
- setToleranceBehaviour(#{FoodsoftConfig[:tolerance_is_costly]});
- setStockit(#{@order.stockit?});
- // create List for search-feature (using list.js, http://listjs.com)
- var listjsResetPlugin = ['reset', {highlightClass: 'btn-primary'}];
- var listjsDelayPlugin = ['delay', {delayedSearchTime: 500}];
- new List(document.body, {
- valueNames: ['name'],
- engine: 'unlist',
- plugins: [listjsResetPlugin, listjsDelayPlugin],
- // make large pages work too (as we don't have paging - articles may disappear!)
- page: 10000,
- indexAsync: true
- });
- });
-
-= stylesheet_link_tag 'group_orders'
-- title t('.title'), false
-
-.row-fluid
- .well.pull-left
- = close_button :alert
- %h2= @order.name
- %dl.dl-horizontal
- - unless @order.note.blank?
- %dt= heading_helper Order, :note
- %dd= @order.note
- %dt= heading_helper Order, :created_by
- %dd= show_user_link(@order.created_by)
- %dt= heading_helper Order, :ends
- %dd= format_time(@order.ends)
- %dt= heading_helper Order, :pickup
- %dd= format_date(@order.pickup)
- - unless @order.stockit? or @order.supplier.min_order_quantity.blank?
- %dt= heading_helper Supplier, :min_order_quantity, short: true
- %dd= @order.supplier.min_order_quantity
- %dt= t '.sum_amount'
- %dd= number_to_currency @order.sum
- - unless @group_order.new_record?
- %dt= heading_helper GroupOrder, :updated_by
- %dd
- = show_user(@group_order.updated_by)
- (#{format_time(@group_order.updated_on)})
- %dt= heading_helper Ordergroup, :account_balance
- %dd= number_to_currency(@ordering_data[:account_balance])
- - unless FoodsoftConfig[:charge_members_manually]
- %dt= heading_helper Ordergroup, :available_funds
- %dd= number_to_currency(@ordering_data[:available_funds])
-
- .well.pull-right
- = close_button :alert
- = render 'switch_order', current_order: @order
-
-.row-fluid
- .well.clear
- .form-search
- .input-append
- = text_field_tag :article, params[:article], placeholder: t('.search_article'), class: 'search-query delayed-search resettable'
- %button.add-on.btn.reset-search{:type => :button, :title => t('.reset_article_search')}
- %i.icon.icon-remove
-
-= form_for @group_order do |f|
- = f.hidden_field :lock_version
- = f.hidden_field :order_id
- = f.hidden_field :updated_by_user_id
- = f.hidden_field :ordergroup_id
- %table.table
- %thead
- %tr
- %th= heading_helper Article, :name
- - if @order.stockit?
- %th{style: 'width:120px'}= heading_helper StockArticle, :supplier
- %th{style: "width:13px;"}
- %th{style: "width:4.5em;"}= t '.price'
- %th{style: "width:4.5em;"}= heading_helper Article, :unit
- - unless @order.stockit?
- %th{style: "width:70px;"}= heading_helper OrderArticle, :missing_units, short: true
- %th#col_required= heading_helper GroupOrderArticle, :quantity
- %th#col_tolerance= heading_helper GroupOrderArticle, :tolerance
- - else
- %th(style="width:20px")= heading_helper StockArticle, :available
- %th#col_required= heading_helper GroupOrderArticle, :quantity
- %th{style: "width:15px;"}= heading_helper GroupOrderArticle, :total_price
- %tbody.list
- - @order.articles_grouped_by_category.each do |category, order_articles|
- %tr.list-heading.article-category
- %td
- = category
- %i.icon-tag
- %td{colspan: "9"}
- - order_articles.each do |order_article|
- %tr{class: "#{cycle('even', 'odd', name: 'articles')} order-article #{get_missing_units_css_class(@ordering_data[:order_articles][order_article.id][:missing_units])}", valign: "top", tabindex: "0"}
- %td.name= order_article.article.name
- - if @order.stockit?
- %td= truncate order_article.article.supplier.name, length: 15
- %td= h order_article.article.origin
- %td= number_to_currency(@ordering_data[:order_articles][order_article.id][:price])
- %td= order_article.article.unit
- %td
- - if @order.stockit?
- = @ordering_data[:order_articles][order_article.id][:quantity_available]
- - else
- %span{id: "missing_units_#{order_article.id}"}= @ordering_data[:order_articles][order_article.id][:missing_units]
-
- %td.quantity
- %input{id: "q_#{order_article.id}", name: "group_order[group_order_articles_attributes][#{order_article.id}][quantity]", type: "hidden", value: @ordering_data[:order_articles][order_article.id][:quantity], 'data-min' => (@ordering_data[:order_articles][order_article.id][:quantity] if @order.boxfill?), 'data-max' => (@ordering_data[:order_articles][order_article.id][:quantity]+@ordering_data[:order_articles][order_article.id][:missing_units] if @order.boxfill?)}/
- %span.used{id: "q_used_#{order_article.id}"}= @ordering_data[:order_articles][order_article.id][:used_quantity]
- +
- %span.unused{id: "q_unused_#{order_article.id}"}= @ordering_data[:order_articles][order_article.id][:quantity] - @ordering_data[:order_articles][order_article.id][:used_quantity]
- .btn-group
- %a.btn.btn-ordering{'data-increase_quantity' => order_article.id}
- %i.icon-plus
- %a.btn.btn-ordering{'data-decrease_quantity' => order_article.id}
- %i.icon-minus
-
- %td.tolerance{style: ('display:none' if @order.stockit?)}
- %input{id: "t_#{order_article.id}", name: "group_order[group_order_articles_attributes][#{order_article.id}][tolerance]", type: "hidden", value: @ordering_data[:order_articles][order_article.id][:tolerance], 'data-min' => (@ordering_data[:order_articles][order_article.id][:tolerance] if @order.boxfill?)}/
- - if (@ordering_data[:order_articles][order_article.id][:unit] > 1)
- %span.used{id: "t_used_#{order_article.id}"}= @ordering_data[:order_articles][order_article.id][:used_tolerance]
- +
- %span.unused{id: "t_unused_#{order_article.id}"}= @ordering_data[:order_articles][order_article.id][:tolerance] - @ordering_data[:order_articles][order_article.id][:used_tolerance]
- .btn-group
- %a.btn.btn-ordering{'data-increase_tolerance' => order_article.id}
- %i.icon-plus
- %a.btn.btn-ordering{'data-decrease_tolerance' => order_article.id}
- %i.icon-minus
-
- %td{id: "td_price_#{order_article.id}", style: "text-align:right; padding-right:10px; width:4em"}
- %span{id: "price_#{order_article.id}_display"}= number_to_currency(@ordering_data[:order_articles][order_article.id][:total_price])
- .article-info
- .article-name= order_article.article.name
- .pull-right
- = t('.units_full') + ':'
- %span{id: "units_#{order_article.id}"}= order_article.units_to_order
- %br/
- = t('.units_total') + ':'
- %span{id: "q_total_#{order_article.id}"}= @ordering_data[:order_articles][order_article.id][:quantity] + @ordering_data[:order_articles][order_article.id][:others_quantity]
- %br/
- = t('.total_tolerance') + ':'
- %span{id: "t_total_#{order_article.id}"}= @ordering_data[:order_articles][order_article.id][:tolerance] + @ordering_data[:order_articles][order_article.id][:others_tolerance]
- %br/
- .pull-left
- #{heading_helper Article, :manufacturer}: #{order_article.article.manufacturer}
- %br/
- #{heading_helper Article, :units}: #{@order.stockit? ? order_article.article.quantity_available : @ordering_data[:order_articles][order_article.id][:unit]} * #{h order_article.article.unit}
- %br/
- #{heading_helper Article, :note}: #{order_article.article.note}
- %br/
- #order-footer-override
- #info-box
- #total-sum
- %table
- %tr
- %td= t('.total_sum_amount') + ':'
- %td.currency
- %span#total_price= number_to_currency(@group_order.price)
- %tr
- - if FoodsoftConfig[:charge_members_manually]
- - old_balance = @ordering_data[:account_balance]
- %td= heading_helper(Ordergroup, :account_balance) + ':'
- %td.currency= number_to_currency(@ordering_data[:account_balance])
- - else
- - old_balance = @ordering_data[:available_funds]
- %td= heading_helper(Ordergroup, :available_funds) + ':'
- %td.currency= number_to_currency(@ordering_data[:available_funds])
- %tr
- %td= t('.new_funds') + ':'
- %td.currency
- %strong
- %span#new_balance= number_to_currency(old_balance - @group_order.price)
- #order-button
- = submit_tag( t('.action_save'), id: 'submit_button', class: 'btn btn-primary' )
- #{link_to t('ui.or_cancel'), group_orders_path}
- %input#total_balance{name: "total_balance", type: "hidden", value: @ordergroup.account_balance - @group_order.price}/
- %input{name: "version", type: "hidden", value: @version}/
diff --git a/plugins/automatic_invoices/config/locales/de.yml b/plugins/automatic_invoices/config/locales/de.yml
index c09ced5c..fcc338a2 100644
--- a/plugins/automatic_invoices/config/locales/de.yml
+++ b/plugins/automatic_invoices/config/locales/de.yml
@@ -1640,6 +1640,7 @@ de:
starts: läuft von %{starts}
starts_ends: läuft von %{starts} bis %{ends}
description2: "%{ordergroups} haben %{article_count} Artikel mit einem Gesamtwert von %{net_sum} / %{gross_sum} (netto / brutto + fc + Pfand) bestellt."
+ description3: " Zuzüglich Pfand %{net_deposit} / %{deposit} (netto / brutto)."
group_orders: 'Gruppenbestellungen:'
search_placeholder:
articles: Suche nach Artikeln ...