Merge pull request #256 from wvengen/feature-partial_shared_sync
Small change to allow non-shared articles with shared suppliers
This commit is contained in:
commit
2de4a2a3a0
6 changed files with 16 additions and 2 deletions
|
@ -227,6 +227,7 @@ class ArticlesController < ApplicationController
|
||||||
if @updated_articles.empty? && @outlisted_articles.empty?
|
if @updated_articles.empty? && @outlisted_articles.empty?
|
||||||
redirect_to supplier_articles_path(@supplier), :notice => I18n.t('articles.controller.sync.notice')
|
redirect_to supplier_articles_path(@supplier), :notice => I18n.t('articles.controller.sync.notice')
|
||||||
end
|
end
|
||||||
|
@ignored_article_count = @supplier.articles.where(order_number: [nil, '']).count
|
||||||
end
|
end
|
||||||
|
|
||||||
# Updates, deletes articles when sync form is submitted
|
# Updates, deletes articles when sync form is submitted
|
||||||
|
|
|
@ -61,7 +61,7 @@ class Article < ActiveRecord::Base
|
||||||
# false will returned and self.shared_updated_on will be updated
|
# false will returned and self.shared_updated_on will be updated
|
||||||
def shared_article_changed?
|
def shared_article_changed?
|
||||||
# skip early if the timestamp hasn't changed
|
# skip early if the timestamp hasn't changed
|
||||||
unless self.shared_updated_on == self.shared_article.updated_on
|
unless self.shared_article.nil? or self.shared_updated_on == self.shared_article.updated_on
|
||||||
|
|
||||||
# try to convert units
|
# try to convert units
|
||||||
# convert supplier's price and unit_quantity into fc-size
|
# convert supplier's price and unit_quantity into fc-size
|
||||||
|
@ -106,6 +106,7 @@ class Article < ActiveRecord::Base
|
||||||
|
|
||||||
# to get the correspondent shared article
|
# to get the correspondent shared article
|
||||||
def shared_article
|
def shared_article
|
||||||
|
self.order_number.blank? and return nil
|
||||||
@shared_article ||= self.supplier.shared_supplier.shared_articles.find_by_number(self.order_number) rescue nil
|
@shared_article ||= self.supplier.shared_supplier.shared_articles.find_by_number(self.order_number) rescue nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -57,7 +57,9 @@ class Supplier < ActiveRecord::Base
|
||||||
}
|
}
|
||||||
updated_articles << [article, unequal_attributes]
|
updated_articles << [article, unequal_attributes]
|
||||||
end
|
end
|
||||||
else
|
# Articles with no order number can be used to put non-shared articles
|
||||||
|
# in a shared supplier, with sync keeping them.
|
||||||
|
elsif not article.order_number.blank?
|
||||||
# article isn't in external database anymore
|
# article isn't in external database anymore
|
||||||
outlisted_articles << article
|
outlisted_articles << article
|
||||||
end
|
end
|
||||||
|
|
|
@ -14,6 +14,8 @@
|
||||||
.alert= t '.outlist.alert_used', article: article.name
|
.alert= t '.outlist.alert_used', article: article.name
|
||||||
- else
|
- else
|
||||||
%i= t '.outlist.body_skip'
|
%i= t '.outlist.body_skip'
|
||||||
|
- if @ignored_article_count > 0
|
||||||
|
%i= t '.outlist.body_ignored', count: @ignored_article_count
|
||||||
%hr/
|
%hr/
|
||||||
%h2= t '.update.title'
|
%h2= t '.update.title'
|
||||||
%p
|
%p
|
||||||
|
|
|
@ -377,6 +377,9 @@ en:
|
||||||
outlist:
|
outlist:
|
||||||
alert_used: Warning, %{article} is used in an open order. Please remove it from the order first.
|
alert_used: Warning, %{article} is used in an open order. Please remove it from the order first.
|
||||||
body: ! 'The following articles were removed from the list and will be <b>deleted</b>:'
|
body: ! 'The following articles were removed from the list and will be <b>deleted</b>:'
|
||||||
|
body_ignored:
|
||||||
|
one: One article without order number was skipped.
|
||||||
|
other: ! '%{count} articles without order number were skipped.'
|
||||||
body_skip: No articles to delete.
|
body_skip: No articles to delete.
|
||||||
title: Remove from list ...
|
title: Remove from list ...
|
||||||
price_short: Price
|
price_short: Price
|
||||||
|
|
|
@ -105,5 +105,10 @@ describe Article do
|
||||||
expect(article.unit_quantity).to eq 5
|
expect(article.unit_quantity).to eq 5
|
||||||
expect(article.price).to be_within(1e-3).of(shared_article.price/5)
|
expect(article.price).to be_within(1e-3).of(shared_article.price/5)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'does not synchronise when it has no order number' do
|
||||||
|
article.update_attributes :order_number => nil
|
||||||
|
expect(supplier.sync_all).to eq [[], []]
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue