Skip to content

Commit

Permalink
Consider out_of_trade. Prioritize differently for desitin
Browse files Browse the repository at this point in the history
  • Loading branch information
ngiger committed May 12, 2015
1 parent d8e21e8 commit d27d603
Show file tree
Hide file tree
Showing 2 changed files with 268 additions and 145 deletions.
178 changes: 108 additions & 70 deletions src/util/resultsort.rb
@@ -1,85 +1,123 @@
#!/usr/bin/env ruby
# encoding: utf-8
# ODDB::ResultSort -- oddb.org -- 28.02.2012 -- mhatakeyama@ywesee.com
# ODDB::ResultSort -- oddb.org -- 10.09.2003 -- mhuggler@ywesee.com

module ODDB
module ResultStateSort
def sort
get_sortby!
module ResultStateSort
def sort
get_sortby!
if @model
@model.each { |atc|
@model.each { |atc|
atc.packages.sort! { |a, b| compare_entries(a, b) }
atc.packages.reverse! if(@sort_reverse)
}
end
self
end
end
module ResultSort
def sort_result(packages, session)
begin
packages.sort_by { |package|
priorize_desitin = false
package_from_desitin = (package.company and /desitin/i.match(package.company.to_s) != nil)
priorize_desitin = true if package_from_desitin and session and session.lookandfeel.enabled?(:evidentia, false)
priorize_desitin = true if package_from_desitin and session and
session.user and not session.user.is_a?(ODDB::UnknownUser) and
/@desitin/i.match(session.user.name.to_s)
name_to_use = (priorize_desitin && generic_type_weight(package) == 5)? ' '+package.name_base.to_s : package.name_base.to_s
name_to_use = name_to_use.gsub(/\d.*/, '')
[
package.expired? ? 1 : -1,
generic_type_weight(package),
name_to_use,
package.galenic_forms.collect { |gf| galform_str(gf, session) },
dose_value(package.dose),
package.comparable_size,
]
}
rescue StandardError => e
puts e.class
puts e.message
puts e.backtrace
packages
end
end
def dose_value(dose)
dose || Dose.new(0)
end
def package_count
@packages.size
end
def galform_str(galform, session)
if(galform.odba_instance.nil?)
''
self
end
end
module ResultSort
IsOriginal = 1
IsGenerikum = 2
IsNotClassified = 3
IsNotRefDataListed = 4

# zeno defined the sort order on May 11 2015 as follow
# 1. Original (SL)
# 2. Generikum (SL)
# 3. Nicht klassifiziert (SL)
# 4. Bei Refdata nicht gelistet.
#
# Innerhalb dieser Reihenfolge (Gruppe) ist wie folgt sortiert:
#
# Alphabetisch aufsteigend nach Galenik, Stärke, Packung.
#
# Bei Desitin (evidentia und Desitin Power-User Login) müssen die
# Produkte unter 3 vor 2 kommen (siehe oben).

def sort_result(packages, session)
begin
packages = packages.uniq.sort_by! { |package|
classify_package(package, session)
if @package_from_desitin and @priorize_desitin
if @priority == IsNotClassified
@priority = IsGenerikum - 0.1 # must come before IsGenerikum
end
end
[
package.expired? ? 1 : -1,
@priority,
@name_to_use,
package.galenic_forms.collect { |gf| galform_str(gf, session) },
dose_value(package.dose),
package.comparable_size,
]
}
if false # only for debug purposes
id = 0
packages.each{
|package|
id += 1
classify_package(package, session)
puts "id #{id}: #{package.barcode} priorize #{@priorize_desitin} '#{package.name_base.to_s}' > #{@priority} #{@name_to_use.inspect} out_of_trade #{package.out_of_trade.inspect} type #{package.generic_type.inspect} sl #{package.sl_generic_type.inspect}"
}
end
packages
rescue StandardError => e
puts e.class
puts e.message
puts e.backtrace
packages
end
end
def dose_value(dose)
dose || Dose.new(0)
end
def package_count
@packages.size
end
def galform_str(galform, session)
if(galform.odba_instance.nil?)
''
elsif galform.respond_to?(session.language.to_sym)
galform.send(session.language)
galform.send(session.language)
else
''
end
end
def generic_type_weight(package)
type = package.generic_type
type = package.sl_generic_type.to_sym if package and package.generic_type and package.sl_generic_type and package.generic_type.to_sym == :unknown
case type ? type.to_sym : nil
when :original
0
when :generic
5
when :comarketing
10
when :complementary
15
else
20
end
# the following was madly inefficient!
end
end
private
def classify_package(package, session)
@package_from_desitin = (package.company and /desitin/i.match(package.company.to_s) != nil)
@priorize_desitin = false
@priorize_desitin = true if @package_from_desitin and session and session.lookandfeel.enabled?(:evidentia, false)
@priorize_desitin = true if @package_from_desitin and session and
session.user and not session.user.is_a?(ODDB::UnknownUser) and
/@desitin/i.match(session.user.name.to_s)
@priority = classified_group(package)
@name_to_use = (@priorize_desitin ? ' '+package.name_base.clone.to_s : package.name_base.clone.to_s).sub(/\s+\d+.+/, '')
end

def classified_group(package)
return IsNotRefDataListed if package.out_of_trade
if package.sl_generic_type
if package.sl_generic_type.eql?(:original)
return IsOriginal
elsif package.sl_generic_type.eql?(:generic)
return IsGenerikum
end
end
if package.generic_type
if package.generic_type.eql?(:original)
return IsOriginal
elsif package.generic_type.eql?(:generic)
return IsGenerikum
end
end
return IsNotClassified
# the following was madly inefficient!
=begin
types = session.valid_values(:generic_type)
index = types.index(package.generic_type.to_s).to_i
10 - (index*2)
types = session.valid_values(:generic_type)
index = types.index(package.generic_type.to_s).to_i
10 - (index*2)
=end
end
end
end
end
end

0 comments on commit d27d603

Please sign in to comment.