Merge branch 'rails3' of http://github.com/balkansalat/foodsoft into rails3-order-delivery-articles
This commit is contained in:
commit
966902ff55
19 changed files with 75 additions and 41 deletions
3
Gemfile
3
Gemfile
|
@ -55,4 +55,7 @@ group :development do
|
||||||
|
|
||||||
# Get infos when not using proper eager loading
|
# Get infos when not using proper eager loading
|
||||||
gem 'bullet'
|
gem 'bullet'
|
||||||
|
|
||||||
|
# Hide assets requests in log
|
||||||
|
gem 'quiet_assets'
|
||||||
end
|
end
|
||||||
|
|
|
@ -126,6 +126,8 @@ GEM
|
||||||
prawn (0.12.0)
|
prawn (0.12.0)
|
||||||
pdf-reader (>= 0.9.0)
|
pdf-reader (>= 0.9.0)
|
||||||
ttfunk (~> 1.0.2)
|
ttfunk (~> 1.0.2)
|
||||||
|
quiet_assets (1.0.2)
|
||||||
|
railties (>= 3.1, < 5.0)
|
||||||
rack (1.4.5)
|
rack (1.4.5)
|
||||||
rack-cache (1.2)
|
rack-cache (1.2)
|
||||||
rack (>= 0.4)
|
rack (>= 0.4)
|
||||||
|
@ -237,6 +239,7 @@ DEPENDENCIES
|
||||||
meta_search
|
meta_search
|
||||||
mysql2
|
mysql2
|
||||||
prawn
|
prawn
|
||||||
|
quiet_assets
|
||||||
rails (~> 3.2.9)
|
rails (~> 3.2.9)
|
||||||
resque
|
resque
|
||||||
ruby-prof
|
ruby-prof
|
||||||
|
|
|
@ -74,12 +74,12 @@ class ArticlesController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
# Updates all article of specific supplier
|
# Updates all article of specific supplier
|
||||||
# deletes all articles from params[outlisted_articles]
|
|
||||||
def update_all
|
def update_all
|
||||||
|
invalid_articles = false
|
||||||
|
|
||||||
begin
|
begin
|
||||||
Article.transaction do
|
Article.transaction do
|
||||||
unless params[:articles].blank?
|
unless params[:articles].blank?
|
||||||
invalid_articles = false
|
|
||||||
# Update other article attributes...
|
# Update other article attributes...
|
||||||
@articles = Article.find(params[:articles].keys)
|
@articles = Article.find(params[:articles].keys)
|
||||||
@articles.each do |article|
|
@articles.each do |article|
|
||||||
|
@ -88,25 +88,18 @@ class ArticlesController < ApplicationController
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
raise "Artikel sind fehlerhaft. Bitte überprüfe Deine Eingaben." if invalid_articles
|
raise ActiveRecord::Rollback if invalid_articles # Rollback all changes
|
||||||
end
|
|
||||||
# delete articles
|
|
||||||
if params[:outlisted_articles]
|
|
||||||
params[:outlisted_articles].keys.each {|id| Article.find(id).mark_as_deleted }
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if invalid_articles
|
||||||
|
# An error has occurred, transaction has been rolled back.
|
||||||
|
flash.now.alert = 'Artikel sind fehlerhaft. Bitte überprüfen.'
|
||||||
|
render :edit_all
|
||||||
|
else
|
||||||
# Successfully done.
|
# Successfully done.
|
||||||
redirect_to supplier_articles_path(@supplier), notice: "Alle Artikel und Preise wurden aktalisiert"
|
redirect_to supplier_articles_path(@supplier), notice: "Alle Artikel und Preise wurden aktalisiert"
|
||||||
|
|
||||||
rescue => e
|
|
||||||
# An error has occurred, transaction has been rolled back.
|
|
||||||
if params[:sync]
|
|
||||||
flash[:error] = "Es trat ein Fehler beim Aktualisieren des Artikels '#{current_article.name}' auf: #{e.message}"
|
|
||||||
redirect_to(supplier_articles_path(@supplier))
|
|
||||||
else
|
|
||||||
flash.now.alert = e.message
|
|
||||||
render :edit_all
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -232,4 +225,33 @@ class ArticlesController < ApplicationController
|
||||||
redirect_to supplier_articles_path(@supplier), :notice => "Der Katalog ist aktuell."
|
redirect_to supplier_articles_path(@supplier), :notice => "Der Katalog ist aktuell."
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Updates, deletes articles when sync form is submitted
|
||||||
|
def update_synchronized
|
||||||
|
begin
|
||||||
|
Article.transaction do
|
||||||
|
# delete articles
|
||||||
|
if params[:outlisted_articles]
|
||||||
|
Article.find(params[:outlisted_articles].keys).each(&:mark_as_deleted)
|
||||||
|
end
|
||||||
|
|
||||||
|
# Update articles
|
||||||
|
params[:articles].each do |id, attrs|
|
||||||
|
Article.find(id).update_attributes! attrs
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Successfully done.
|
||||||
|
redirect_to supplier_articles_path(@supplier), notice: "Alle Artikel und Preise wurden aktalisiert"
|
||||||
|
|
||||||
|
rescue ActiveRecord::RecordInvalid => invalid
|
||||||
|
# An error has occurred, transaction has been rolled back.
|
||||||
|
redirect_to supplier_articles_path(@supplier),
|
||||||
|
alert: "Es trat ein Fehler beim Aktualisieren des Artikels '#{invalid.record.name}' auf: #{invalid.record.errors.full_messages}"
|
||||||
|
|
||||||
|
rescue => error
|
||||||
|
redirect_to supplier_articles_path(@supplier),
|
||||||
|
alert: "Es trat ein Fehler auf: #{error.message}"
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -18,7 +18,8 @@ class Article < ActiveRecord::Base
|
||||||
validates_presence_of :name, :unit, :price, :tax, :deposit, :unit_quantity, :supplier_id, :article_category
|
validates_presence_of :name, :unit, :price, :tax, :deposit, :unit_quantity, :supplier_id, :article_category
|
||||||
validates_length_of :name, :in => 4..60
|
validates_length_of :name, :in => 4..60
|
||||||
validates_length_of :unit, :in => 2..15
|
validates_length_of :unit, :in => 2..15
|
||||||
validates_numericality_of :price, :unit_quantity, :greater_than => 0
|
validates_numericality_of :price, :greater_than_or_equal_to => 0
|
||||||
|
validates_numericality_of :unit_quantity, :greater_than => 0
|
||||||
validates_numericality_of :deposit, :tax
|
validates_numericality_of :deposit, :tax
|
||||||
validates_uniqueness_of :name, :scope => [:supplier_id, :deleted_at, :type]
|
validates_uniqueness_of :name, :scope => [:supplier_id, :deleted_at, :type]
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,8 @@ class ArticlePrice < ActiveRecord::Base
|
||||||
has_many :order_articles
|
has_many :order_articles
|
||||||
|
|
||||||
validates_presence_of :price, :tax, :deposit, :unit_quantity
|
validates_presence_of :price, :tax, :deposit, :unit_quantity
|
||||||
validates_numericality_of :price, :unit_quantity, :greater_than => 0
|
validates_numericality_of :price, :greater_than_or_equal_to => 0
|
||||||
|
validates_numericality_of :unit_quantity, :greater_than => 0
|
||||||
validates_numericality_of :deposit, :tax
|
validates_numericality_of :deposit, :tax
|
||||||
|
|
||||||
localize_input_of :price, :tax, :deposit
|
localize_input_of :price, :tax, :deposit
|
||||||
|
|
|
@ -158,7 +158,7 @@ class Order < ActiveRecord::Base
|
||||||
goa.save_results!
|
goa.save_results!
|
||||||
# Delete no longer required order-history (group_order_article_quantities) and
|
# Delete no longer required order-history (group_order_article_quantities) and
|
||||||
# TODO: Do we need articles, which aren't ordered? (units_to_order == 0 ?)
|
# TODO: Do we need articles, which aren't ordered? (units_to_order == 0 ?)
|
||||||
goa.group_order_article_quantities.clear
|
#goa.group_order_article_quantities.clear
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -66,13 +66,10 @@ class Task < ActiveRecord::Base
|
||||||
# and makes the users responsible for the task
|
# and makes the users responsible for the task
|
||||||
# TODO: check for maximal number of users
|
# TODO: check for maximal number of users
|
||||||
def user_list=(ids)
|
def user_list=(ids)
|
||||||
list = ids.split(",")
|
list = ids.split(",").map(&:to_i)
|
||||||
new_users = (list - users.collect(&:id)).uniq
|
new_users = (list - users.collect(&:id)).uniq
|
||||||
old_users = users.reject { |user| list.include?(user.id) }
|
old_users = users.reject { |user| list.include?(user.id) }
|
||||||
|
|
||||||
logger.debug "[debug] New users: #{new_users}"
|
|
||||||
logger.debug "Old users: #{old_users}"
|
|
||||||
|
|
||||||
self.class.transaction do
|
self.class.transaction do
|
||||||
# delete old assignments
|
# delete old assignments
|
||||||
if old_users.any?
|
if old_users.any?
|
||||||
|
@ -84,7 +81,7 @@ class Task < ActiveRecord::Base
|
||||||
if user.blank?
|
if user.blank?
|
||||||
errors.add(:user_list)
|
errors.add(:user_list)
|
||||||
else
|
else
|
||||||
if id == current_user_id
|
if id == current_user_id.to_i
|
||||||
# current_user will accept, when he puts himself to the list of users
|
# current_user will accept, when he puts himself to the list of users
|
||||||
self.assignments.build :user => user, :accepted => true
|
self.assignments.build :user => user, :accepted => true
|
||||||
else
|
else
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
= f.hidden_field :shared_updated_on
|
= f.hidden_field :shared_updated_on
|
||||||
= f.hidden_field :supplier_id
|
= f.hidden_field :supplier_id
|
||||||
.modal-header
|
.modal-header
|
||||||
= button_tag "x", class: 'close', data: {dismiss: 'modal'}
|
= link_to 'x', '#', class: 'close', data: {dismiss: 'modal'}
|
||||||
%h3 Neuen Artikel einfügen
|
%h3 Neuen Artikel einfügen
|
||||||
.modal-body
|
.modal-body
|
||||||
= f.input :availability
|
= f.input :availability
|
||||||
|
@ -19,6 +19,6 @@
|
||||||
= f.input :tax
|
= f.input :tax
|
||||||
= f.input :deposit
|
= f.input :deposit
|
||||||
.modal-footer
|
.modal-footer
|
||||||
= button_tag "Schließen", class: 'btn', data: {dismiss: 'modal'}
|
= link_to 'Schließen', '#', class: 'btn', data: {dismiss: 'modal'}
|
||||||
= f.submit class: 'btn btn-primary'
|
= f.submit class: 'btn btn-primary'
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
- title 'Artikel mit externer Datenbank synchronisieren'
|
- title 'Artikel mit externer Datenbank synchronisieren'
|
||||||
|
|
||||||
= form_tag update_all_supplier_articles_path(@supplier, :sync => "1") do
|
= form_tag update_synchronized_supplier_articles_path(@supplier) do
|
||||||
%h2 Auslisten ...
|
%h2 Auslisten ...
|
||||||
%p
|
%p
|
||||||
- unless @outlisted_articles.empty?
|
- unless @outlisted_articles.empty?
|
||||||
|
@ -11,6 +11,9 @@
|
||||||
%li
|
%li
|
||||||
= hidden_field_tag "outlisted_articles[#{article.id}]", '1'
|
= hidden_field_tag "outlisted_articles[#{article.id}]", '1'
|
||||||
= article.name
|
= article.name
|
||||||
|
- if article.in_open_order
|
||||||
|
.alert
|
||||||
|
Achtung, #{article.name} wird gerade in einer laufenden Bestellung verwendet. Bitte erst Bestellung anpassen.
|
||||||
- else
|
- else
|
||||||
%i Es müssen keine Artikel gelöscht werden.
|
%i Es müssen keine Artikel gelöscht werden.
|
||||||
%hr/
|
%hr/
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
= simple_form_for @order, url: update_note_finance_order_path(@order), remote: true, method: :put do |f|
|
= simple_form_for @order, url: update_note_finance_order_path(@order), remote: true, method: :put do |f|
|
||||||
.modal-header
|
.modal-header
|
||||||
= button_tag "x", class: 'close', data: {dismiss: 'modal'}
|
= link_to 'x', '#', class: 'close', data: {dismiss: 'modal'}
|
||||||
%h3 Notiz bearbeiten
|
%h3 Notiz bearbeiten
|
||||||
.modal-body
|
.modal-body
|
||||||
= f.input :note, input_html: {class: 'input-xlarge'}
|
= f.input :note, input_html: {class: 'input-xlarge'}
|
||||||
.modal-footer
|
.modal-footer
|
||||||
= button_tag "Schließen", class: 'btn', data: {dismiss: 'modal'}
|
= link_to 'Schließen', '#', class: 'btn', data: {dismiss: 'modal'}
|
||||||
= f.submit "Speichern", class: 'btn btn-primary'
|
= f.submit "Speichern", class: 'btn btn-primary'
|
|
@ -1,11 +1,11 @@
|
||||||
= simple_form_for [:finance, @group_order_article], remote: true do |form|
|
= simple_form_for [:finance, @group_order_article], remote: true do |form|
|
||||||
= form.hidden_field :order_article_id
|
= form.hidden_field :order_article_id
|
||||||
.modal-header
|
.modal-header
|
||||||
= button_tag "x", class: 'close', data: {dismiss: 'modal'}
|
= link_to 'x', '#', class: 'close', data: {dismiss: 'modal'}
|
||||||
%h3 Mengenänderung für #{@order_article.article.name}
|
%h3 Mengenänderung für #{@order_article.article.name}
|
||||||
.modal-body
|
.modal-body
|
||||||
= form.input :ordergroup_id, as: :select, collection: Ordergroup.all.map { |g| [g.name, g.id] }
|
= form.input :ordergroup_id, as: :select, collection: Ordergroup.all.map { |g| [g.name, g.id] }
|
||||||
= form.input :result, hint: "Einheit: #{@order_article.article.unit}"
|
= form.input :result, hint: "Einheit: #{@order_article.article.unit}"
|
||||||
.modal-footer
|
.modal-footer
|
||||||
= button_tag "Schließen", class: 'btn', data: {dismiss: 'modal'}
|
= link_to 'Schließen', '#', class: 'btn', data: {dismiss: 'modal'}
|
||||||
= form.submit "Speichern", class: 'btn btn-primary'
|
= form.submit "Speichern", class: 'btn btn-primary'
|
|
@ -1,6 +1,6 @@
|
||||||
= simple_form_for [:finance, @order, @order_article], remote: true do |form|
|
= simple_form_for [:finance, @order, @order_article], remote: true do |form|
|
||||||
.modal-header
|
.modal-header
|
||||||
= button_tag "x", class: 'close', data: {dismiss: 'modal'}
|
= link_to 'x', '#', class: 'close', data: {dismiss: 'modal'}
|
||||||
%h3 Artikel aktualisieren
|
%h3 Artikel aktualisieren
|
||||||
.modal-body
|
.modal-body
|
||||||
= form.input :units_to_order
|
= form.input :units_to_order
|
||||||
|
@ -20,5 +20,5 @@
|
||||||
= f.input :deposit
|
= f.input :deposit
|
||||||
= form.input :update_current_price, as: :boolean
|
= form.input :update_current_price, as: :boolean
|
||||||
.modal-footer
|
.modal-footer
|
||||||
= button_tag "Schließen", class: 'btn', data: {dismiss: 'modal'}
|
= link_to 'Schließen', '#', class: 'btn', data: {dismiss: 'modal'}
|
||||||
= form.submit class: 'btn btn-primary'
|
= form.submit class: 'btn btn-primary'
|
|
@ -1,9 +1,9 @@
|
||||||
= simple_form_for [:finance, @order, @order_article], remote: true do |form|
|
= simple_form_for [:finance, @order, @order_article], remote: true do |form|
|
||||||
.modal-header
|
.modal-header
|
||||||
= button_tag "x", class: 'close', data: {dismiss: 'modal'}
|
= link_to 'x', '#', class: 'close', data: {dismiss: 'modal'}
|
||||||
%h3 Neuer gelieferter Artikel die Bestellung
|
%h3 Neuer gelieferter Artikel die Bestellung
|
||||||
.modal-body
|
.modal-body
|
||||||
= form.input :article_id, as: :select, collection: new_order_articles_collection
|
= form.input :article_id, as: :select, collection: new_order_articles_collection
|
||||||
.modal-footer
|
.modal-footer
|
||||||
= button_tag "Schließen", class: 'btn', data: {dismiss: 'modal'}
|
= link_to 'Schließen', '#', class: 'btn', data: {dismiss: 'modal'}
|
||||||
= form.submit class: 'btn btn-primary'
|
= form.submit class: 'btn btn-primary'
|
|
@ -1,2 +1,3 @@
|
||||||
$('#modalContainer').modal('hide');
|
$('#modalContainer').modal('hide');
|
||||||
$('#result_table').prepend('#{j(render('finance/balancing/order_article_result', order_article: @order_article))}');
|
$('#result_table').prepend('#{j(render('finance/balancing/order_article_result', order_article: @order_article))}');
|
||||||
|
$('#summaryChangedWarning').show();
|
|
@ -1,2 +1,4 @@
|
||||||
$('#modalContainer').modal('hide');
|
$('#modalContainer').modal('hide');
|
||||||
$('#order_article_#{@order_article.id}').html('#{j(render('finance/balancing/order_article', order_article: @order_article))}');
|
$('#order_article_#{@order_article.id}').html('#{j(render('finance/balancing/order_article', order_article: @order_article))}');
|
||||||
|
$('#group_order_articles_#{@order_article.id}').html('#{j(render('finance/balancing/group_order_articles', order_article: @order_article))}');
|
||||||
|
$('#summaryChangedWarning').show();
|
|
@ -47,7 +47,6 @@
|
||||||
Erhalten
|
Erhalten
|
||||||
%th Gesamtpreis
|
%th Gesamtpreis
|
||||||
%tbody
|
%tbody
|
||||||
- total = 0 #set counter for order-sum
|
|
||||||
- for category_name, order_articles in @order.articles_grouped_by_category
|
- for category_name, order_articles in @order.articles_grouped_by_category
|
||||||
%tr.article-category
|
%tr.article-category
|
||||||
%td
|
%td
|
||||||
|
@ -74,7 +73,7 @@
|
||||||
%td{colspan: "6"}=h oa.article.note
|
%td{colspan: "6"}=h oa.article.note
|
||||||
%tr{class: cycle('even', 'odd', name: 'articles')}
|
%tr{class: cycle('even', 'odd', name: 'articles')}
|
||||||
%th{colspan: "5"} Summe
|
%th{colspan: "5"} Summe
|
||||||
%th= number_to_currency(total)
|
%th= number_to_currency(@group_order.price)
|
||||||
%br/
|
%br/
|
||||||
= link_to_top
|
= link_to_top
|
||||||
- else
|
- else
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
= simple_form_for @invite, remote: true do |form|
|
= simple_form_for @invite, remote: true do |form|
|
||||||
.modal-header
|
.modal-header
|
||||||
= button_tag "x", class: 'close', data: {dismiss: 'modal'}
|
= link_to 'x', '#', class: 'close', data: {dismiss: 'modal'}
|
||||||
%h3 Person einladen
|
%h3 Person einladen
|
||||||
.modal-body
|
.modal-body
|
||||||
%p
|
%p
|
||||||
|
@ -13,5 +13,5 @@
|
||||||
= form.hidden_field :group_id
|
= form.hidden_field :group_id
|
||||||
= form.input :email
|
= form.input :email
|
||||||
.modal-footer
|
.modal-footer
|
||||||
= button_tag "Schließen", class: 'btn', data: {dismiss: 'modal'}
|
= link_to 'Schließen', '#', class: 'btn', data: {dismiss: 'modal'}
|
||||||
= form.submit class: 'btn btn-primary'
|
= form.submit class: 'btn btn-primary'
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
.controls
|
.controls
|
||||||
- for setting in User::setting_keys.keys
|
- for setting in User::setting_keys.keys
|
||||||
%label.checkbox{:for => "user[setting_attributes][#{setting}]"}
|
%label.checkbox{:for => "user[setting_attributes][#{setting}]"}
|
||||||
|
= hidden_field_tag "user[setting_attributes][#{setting}]", '0'
|
||||||
= check_box_tag "user[setting_attributes][#{setting}]", '1',
|
= check_box_tag "user[setting_attributes][#{setting}]", '1',
|
||||||
f.object.settings[setting] == '1' || f.object.settings_default(setting)
|
f.object.settings[setting] == '1' || f.object.settings_default(setting)
|
||||||
= User::setting_keys[setting]
|
= User::setting_keys[setting]
|
||||||
|
|
|
@ -117,6 +117,7 @@ Foodsoft::Application.routes.draw do
|
||||||
get :shared
|
get :shared
|
||||||
get :import
|
get :import
|
||||||
post :sync
|
post :sync
|
||||||
|
post :update_synchronized
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue