ramaze.ch.oddb.org 1.0.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.
Files changed (286) hide show
  1. data/History.txt +6 -0
  2. data/LICENSE +339 -0
  3. data/Manifest.txt +285 -0
  4. data/README.txt +45 -0
  5. data/Rakefile +28 -0
  6. data/bin/admin +69 -0
  7. data/bin/exportd +63 -0
  8. data/bin/migrate +461 -0
  9. data/bin/oddbd +62 -0
  10. data/data/fulltext/data/dicts/french/fulltext.aff +1057 -0
  11. data/data/fulltext/data/dicts/french/fulltext.dict +91189 -0
  12. data/data/fulltext/data/dicts/french/fulltext.stop +135 -0
  13. data/data/fulltext/data/dicts/german/fulltext.aff +1233 -0
  14. data/data/fulltext/data/dicts/german/fulltext.dict +287574 -0
  15. data/data/fulltext/data/dicts/german/fulltext.stop +133 -0
  16. data/data/fulltext/data/german_compound/README +15 -0
  17. data/data/fulltext/data/german_compound/compound.pl +63 -0
  18. data/data/fulltext/data/german_compound/german.stop +20 -0
  19. data/data/fulltext/data/ispell-german-compound.tar.gz +0 -0
  20. data/data/fulltext/redist/dict_french/Makefile +12 -0
  21. data/data/fulltext/redist/dict_french/README.french +1 -0
  22. data/data/fulltext/redist/dict_french/dict_french.sql.in +7 -0
  23. data/data/fulltext/redist/dict_french/dict_snowball.c +56 -0
  24. data/data/fulltext/redist/dict_french/french_stem.c +1222 -0
  25. data/data/fulltext/redist/dict_french/french_stem.h +16 -0
  26. data/data/fulltext/redist/dict_french/subinclude.h +2 -0
  27. data/data/fulltext/redist/dict_german/Makefile +12 -0
  28. data/data/fulltext/redist/dict_german/README.german +1 -0
  29. data/data/fulltext/redist/dict_german/dict_german.sql.in +7 -0
  30. data/data/fulltext/redist/dict_german/dict_snowball.c +56 -0
  31. data/data/fulltext/redist/dict_german/german_stem.c +527 -0
  32. data/data/fulltext/redist/dict_german/german_stem.h +16 -0
  33. data/data/fulltext/redist/dict_german/subinclude.h +1 -0
  34. data/data/fulltext/redist/french_stem.c +1222 -0
  35. data/data/fulltext/redist/french_stem.h +16 -0
  36. data/data/fulltext/redist/german_stem.c +527 -0
  37. data/data/fulltext/redist/german_stem.h +16 -0
  38. data/lib/fixes/ruby19.rb +21 -0
  39. data/lib/fixes/selenium.rb +20 -0
  40. data/lib/fixes/singular.rb +8 -0
  41. data/lib/fixes/yaml.rb +13 -0
  42. data/lib/oddb.rb +11 -0
  43. data/lib/oddb/business/company.rb +18 -0
  44. data/lib/oddb/business/invoice.rb +75 -0
  45. data/lib/oddb/business/price.rb +60 -0
  46. data/lib/oddb/config.rb +73 -0
  47. data/lib/oddb/drugs.rb +16 -0
  48. data/lib/oddb/drugs/active_agent.rb +37 -0
  49. data/lib/oddb/drugs/atc.rb +53 -0
  50. data/lib/oddb/drugs/composition.rb +41 -0
  51. data/lib/oddb/drugs/ddd.rb +24 -0
  52. data/lib/oddb/drugs/dose.rb +107 -0
  53. data/lib/oddb/drugs/galenic_form.rb +21 -0
  54. data/lib/oddb/drugs/galenic_group.rb +17 -0
  55. data/lib/oddb/drugs/package.rb +87 -0
  56. data/lib/oddb/drugs/part.rb +56 -0
  57. data/lib/oddb/drugs/product.rb +25 -0
  58. data/lib/oddb/drugs/sequence.rb +61 -0
  59. data/lib/oddb/drugs/substance.rb +31 -0
  60. data/lib/oddb/drugs/substance_group.rb +13 -0
  61. data/lib/oddb/drugs/unit.rb +12 -0
  62. data/lib/oddb/export.rb +4 -0
  63. data/lib/oddb/export/csv.rb +89 -0
  64. data/lib/oddb/export/l10n_sessions.rb +30 -0
  65. data/lib/oddb/export/rss.rb +44 -0
  66. data/lib/oddb/export/server.rb +58 -0
  67. data/lib/oddb/export/xls.rb +119 -0
  68. data/lib/oddb/export/yaml.rb +123 -0
  69. data/lib/oddb/html/state/drugs/admin/package.rb +189 -0
  70. data/lib/oddb/html/state/drugs/admin/product.rb +56 -0
  71. data/lib/oddb/html/state/drugs/admin/sequence.rb +259 -0
  72. data/lib/oddb/html/state/drugs/ajax/explain_ddd_price.rb +19 -0
  73. data/lib/oddb/html/state/drugs/ajax/explain_price.rb +19 -0
  74. data/lib/oddb/html/state/drugs/ajax/global.rb +18 -0
  75. data/lib/oddb/html/state/drugs/ajax/package_infos.rb +19 -0
  76. data/lib/oddb/html/state/drugs/ajax/remote_infos.rb +19 -0
  77. data/lib/oddb/html/state/drugs/atc_browser.rb +39 -0
  78. data/lib/oddb/html/state/drugs/atc_guidelines.rb +21 -0
  79. data/lib/oddb/html/state/drugs/compare.rb +52 -0
  80. data/lib/oddb/html/state/drugs/download_export.rb +18 -0
  81. data/lib/oddb/html/state/drugs/fachinfo.rb +21 -0
  82. data/lib/oddb/html/state/drugs/feedback.rb +94 -0
  83. data/lib/oddb/html/state/drugs/global.rb +266 -0
  84. data/lib/oddb/html/state/drugs/init.rb +18 -0
  85. data/lib/oddb/html/state/drugs/login.rb +17 -0
  86. data/lib/oddb/html/state/drugs/package.rb +32 -0
  87. data/lib/oddb/html/state/drugs/patinfo.rb +21 -0
  88. data/lib/oddb/html/state/drugs/products.rb +51 -0
  89. data/lib/oddb/html/state/drugs/result.rb +125 -0
  90. data/lib/oddb/html/state/global.rb +165 -0
  91. data/lib/oddb/html/state/global_predefine.rb +17 -0
  92. data/lib/oddb/html/state/limit.rb +17 -0
  93. data/lib/oddb/html/state/login.rb +56 -0
  94. data/lib/oddb/html/state/paypal/checkout.rb +130 -0
  95. data/lib/oddb/html/state/paypal/collect.rb +46 -0
  96. data/lib/oddb/html/state/paypal/redirect.rb +18 -0
  97. data/lib/oddb/html/state/register_export.rb +38 -0
  98. data/lib/oddb/html/state/register_poweruser.rb +17 -0
  99. data/lib/oddb/html/state/viral/admin.rb +76 -0
  100. data/lib/oddb/html/state/viral/poweruser.rb +16 -0
  101. data/lib/oddb/html/util/annotated_list.rb +39 -0
  102. data/lib/oddb/html/util/know_it_all.rb +28 -0
  103. data/lib/oddb/html/util/known_user.rb +55 -0
  104. data/lib/oddb/html/util/lookandfeel.rb +554 -0
  105. data/lib/oddb/html/util/need_all_input.rb +29 -0
  106. data/lib/oddb/html/util/session.rb +88 -0
  107. data/lib/oddb/html/util/sort.rb +72 -0
  108. data/lib/oddb/html/util/unsaved_helper.rb +20 -0
  109. data/lib/oddb/html/util/validator.rb +54 -0
  110. data/lib/oddb/html/view/ajax/json.rb +22 -0
  111. data/lib/oddb/html/view/alpha_header.rb +28 -0
  112. data/lib/oddb/html/view/document.rb +126 -0
  113. data/lib/oddb/html/view/drugs/admin/package.rb +237 -0
  114. data/lib/oddb/html/view/drugs/admin/product.rb +104 -0
  115. data/lib/oddb/html/view/drugs/admin/sequence.rb +312 -0
  116. data/lib/oddb/html/view/drugs/ajax/explain_ddd_price.rb +87 -0
  117. data/lib/oddb/html/view/drugs/ajax/explain_price.rb +61 -0
  118. data/lib/oddb/html/view/drugs/ajax/package_infos.rb +105 -0
  119. data/lib/oddb/html/view/drugs/ajax/remote_infos.rb +44 -0
  120. data/lib/oddb/html/view/drugs/atc_browser.rb +68 -0
  121. data/lib/oddb/html/view/drugs/atc_guidelines.rb +94 -0
  122. data/lib/oddb/html/view/drugs/compare.rb +95 -0
  123. data/lib/oddb/html/view/drugs/download_export.rb +28 -0
  124. data/lib/oddb/html/view/drugs/fachinfo.rb +46 -0
  125. data/lib/oddb/html/view/drugs/feedback.rb +231 -0
  126. data/lib/oddb/html/view/drugs/init.rb +51 -0
  127. data/lib/oddb/html/view/drugs/legend.rb +24 -0
  128. data/lib/oddb/html/view/drugs/package.rb +398 -0
  129. data/lib/oddb/html/view/drugs/patinfo.rb +46 -0
  130. data/lib/oddb/html/view/drugs/products.rb +97 -0
  131. data/lib/oddb/html/view/drugs/result.rb +296 -0
  132. data/lib/oddb/html/view/drugs/search.rb +33 -0
  133. data/lib/oddb/html/view/drugs/template.rb +15 -0
  134. data/lib/oddb/html/view/foot.rb +52 -0
  135. data/lib/oddb/html/view/google.rb +23 -0
  136. data/lib/oddb/html/view/google_ads.rb +40 -0
  137. data/lib/oddb/html/view/head.rb +78 -0
  138. data/lib/oddb/html/view/limit.rb +109 -0
  139. data/lib/oddb/html/view/list.rb +59 -0
  140. data/lib/oddb/html/view/login.rb +38 -0
  141. data/lib/oddb/html/view/navigation.rb +67 -0
  142. data/lib/oddb/html/view/offset_header.rb +35 -0
  143. data/lib/oddb/html/view/paypal/collect.rb +84 -0
  144. data/lib/oddb/html/view/paypal/redirect.rb +51 -0
  145. data/lib/oddb/html/view/paypal/register_form.rb +106 -0
  146. data/lib/oddb/html/view/register_export.rb +29 -0
  147. data/lib/oddb/html/view/register_poweruser.rb +29 -0
  148. data/lib/oddb/html/view/rss/feedback.rb +64 -0
  149. data/lib/oddb/html/view/rss_preview.rb +54 -0
  150. data/lib/oddb/html/view/search.rb +104 -0
  151. data/lib/oddb/html/view/snapback.rb +24 -0
  152. data/lib/oddb/html/view/template.rb +56 -0
  153. data/lib/oddb/import/excel.rb +45 -0
  154. data/lib/oddb/import/import.rb +39 -0
  155. data/lib/oddb/import/rtf.rb +410 -0
  156. data/lib/oddb/import/whocc.rb +173 -0
  157. data/lib/oddb/import/xml.rb +15 -0
  158. data/lib/oddb/model.rb +179 -0
  159. data/lib/oddb/persistence/odba.rb +33 -0
  160. data/lib/oddb/persistence/odba/business/company.rb +13 -0
  161. data/lib/oddb/persistence/odba/business/invoice.rb +15 -0
  162. data/lib/oddb/persistence/odba/drugs/atc.rb +15 -0
  163. data/lib/oddb/persistence/odba/drugs/galenic_form.rb +18 -0
  164. data/lib/oddb/persistence/odba/drugs/galenic_group.rb +13 -0
  165. data/lib/oddb/persistence/odba/drugs/package.rb +25 -0
  166. data/lib/oddb/persistence/odba/drugs/product.rb +13 -0
  167. data/lib/oddb/persistence/odba/drugs/sequence.rb +21 -0
  168. data/lib/oddb/persistence/odba/drugs/substance.rb +21 -0
  169. data/lib/oddb/persistence/odba/drugs/substance_group.rb +13 -0
  170. data/lib/oddb/persistence/odba/drugs/unit.rb +13 -0
  171. data/lib/oddb/persistence/odba/export.rb +26 -0
  172. data/lib/oddb/persistence/odba/model.rb +68 -0
  173. data/lib/oddb/persistence/odba/regulatory/authority.rb +13 -0
  174. data/lib/oddb/persistence/odba/regulatory/registration.rb +13 -0
  175. data/lib/oddb/persistence/odba/text/document.rb +11 -0
  176. data/lib/oddb/persistence/odba/util/code.rb +11 -0
  177. data/lib/oddb/persistence/odba/util/m10l_document.rb +13 -0
  178. data/lib/oddb/persistence/og.rb +16 -0
  179. data/lib/oddb/persistence/og/drugs/composition.rb +14 -0
  180. data/lib/oddb/persistence/og/drugs/product.rb +14 -0
  181. data/lib/oddb/persistence/og/drugs/sequence.rb +15 -0
  182. data/lib/oddb/persistence/og/model.rb +25 -0
  183. data/lib/oddb/persistence/og/util/multilingual.rb +13 -0
  184. data/lib/oddb/redist/rtf_tools/reader.rb +139 -0
  185. data/lib/oddb/regulatory/authority.rb +14 -0
  186. data/lib/oddb/regulatory/registration.rb +15 -0
  187. data/lib/oddb/remote/business/company.rb +23 -0
  188. data/lib/oddb/remote/drugs/active_agent.rb +27 -0
  189. data/lib/oddb/remote/drugs/atc.rb +32 -0
  190. data/lib/oddb/remote/drugs/dose.rb +8 -0
  191. data/lib/oddb/remote/drugs/galenic_form.rb +25 -0
  192. data/lib/oddb/remote/drugs/package.rb +126 -0
  193. data/lib/oddb/remote/drugs/part.rb +30 -0
  194. data/lib/oddb/remote/drugs/product.rb +19 -0
  195. data/lib/oddb/remote/drugs/sequence.rb +46 -0
  196. data/lib/oddb/remote/drugs/substance.rb +20 -0
  197. data/lib/oddb/remote/drugs/unit.rb +19 -0
  198. data/lib/oddb/remote/object.rb +36 -0
  199. data/lib/oddb/remote/text/document.rb +20 -0
  200. data/lib/oddb/remote/util/m10l_document.rb +22 -0
  201. data/lib/oddb/text/chapter.rb +27 -0
  202. data/lib/oddb/text/document.rb +43 -0
  203. data/lib/oddb/text/format.rb +37 -0
  204. data/lib/oddb/text/paragraph.rb +58 -0
  205. data/lib/oddb/text/picture.rb +93 -0
  206. data/lib/oddb/text/table.rb +68 -0
  207. data/lib/oddb/util.rb +8 -0
  208. data/lib/oddb/util/annotated_list.rb +37 -0
  209. data/lib/oddb/util/code.rb +69 -0
  210. data/lib/oddb/util/comparison.rb +36 -0
  211. data/lib/oddb/util/exporter.rb +8 -0
  212. data/lib/oddb/util/feedback.rb +23 -0
  213. data/lib/oddb/util/ipn.rb +48 -0
  214. data/lib/oddb/util/m10l_document.rb +38 -0
  215. data/lib/oddb/util/mail.rb +73 -0
  216. data/lib/oddb/util/money.rb +60 -0
  217. data/lib/oddb/util/multilingual.rb +70 -0
  218. data/lib/oddb/util/quanty.rb +4 -0
  219. data/lib/oddb/util/quanty/fact.rb +229 -0
  220. data/lib/oddb/util/quanty/main.rb +160 -0
  221. data/lib/oddb/util/quanty/parse.rb +853 -0
  222. data/lib/oddb/util/quanty/units.dump +0 -0
  223. data/lib/oddb/util/server.rb +117 -0
  224. data/lib/oddb/util/updater.rb +41 -0
  225. data/lib/oddb/util/ydim.rb +110 -0
  226. data/lib/oddb/util/yus.rb +46 -0
  227. data/test/business/test_company.rb +29 -0
  228. data/test/business/test_price.rb +46 -0
  229. data/test/drugs/test_active_agent.rb +53 -0
  230. data/test/drugs/test_atc.rb +54 -0
  231. data/test/drugs/test_composition.rb +88 -0
  232. data/test/drugs/test_ddd.rb +22 -0
  233. data/test/drugs/test_dose.rb +190 -0
  234. data/test/drugs/test_galenic_form.rb +41 -0
  235. data/test/drugs/test_package.rb +173 -0
  236. data/test/drugs/test_part.rb +32 -0
  237. data/test/drugs/test_product.rb +31 -0
  238. data/test/drugs/test_sequence.rb +140 -0
  239. data/test/drugs/test_substance.rb +51 -0
  240. data/test/drugs/test_substance_group.rb +27 -0
  241. data/test/export/test_rss.rb +94 -0
  242. data/test/export/test_server.rb +117 -0
  243. data/test/export/test_xls.rb +152 -0
  244. data/test/export/test_yaml.rb +120 -0
  245. data/test/import/data/html/whocc/A.html +56 -0
  246. data/test/import/data/html/whocc/A03.html +48 -0
  247. data/test/import/data/html/whocc/A03AB.html +48 -0
  248. data/test/import/data/html/whocc/A06AA.html +47 -0
  249. data/test/import/data/html/whocc/C03.html +47 -0
  250. data/test/import/data/html/whocc/login.html +77 -0
  251. data/test/import/data/xml/ATC_2006.xml +47 -0
  252. data/test/import/data/xml/ATC_2006_ddd.xml +35 -0
  253. data/test/import/test_excel.rb +34 -0
  254. data/test/import/test_rtf.rb +40 -0
  255. data/test/import/test_whocc.rb +315 -0
  256. data/test/remote/drugs/test_active_agent.rb +36 -0
  257. data/test/selenium/selenium-server.jar +0 -0
  258. data/test/selenium/test_atc_browser.rb +122 -0
  259. data/test/selenium/test_atc_guidelines.rb +96 -0
  260. data/test/selenium/test_collect.rb +138 -0
  261. data/test/selenium/test_compare.rb +206 -0
  262. data/test/selenium/test_fachinfo.rb +130 -0
  263. data/test/selenium/test_feedback.rb +196 -0
  264. data/test/selenium/test_init.rb +52 -0
  265. data/test/selenium/test_limit.rb +305 -0
  266. data/test/selenium/test_login.rb +67 -0
  267. data/test/selenium/test_package.rb +512 -0
  268. data/test/selenium/test_patinfo.rb +131 -0
  269. data/test/selenium/test_product.rb +80 -0
  270. data/test/selenium/test_products.rb +142 -0
  271. data/test/selenium/test_search.rb +715 -0
  272. data/test/selenium/test_sequence.rb +543 -0
  273. data/test/selenium/unit.rb +185 -0
  274. data/test/stub/http_server.rb +169 -0
  275. data/test/stub/model.rb +173 -0
  276. data/test/suite.rb +15 -0
  277. data/test/test_model.rb +83 -0
  278. data/test/util/test_code.rb +74 -0
  279. data/test/util/test_ipn.rb +117 -0
  280. data/test/util/test_mail.rb +86 -0
  281. data/test/util/test_multilingual.rb +97 -0
  282. data/test/util/test_server.rb +48 -0
  283. data/test/util/test_updater.rb +353 -0
  284. data/test/util/test_ydim.rb +115 -0
  285. data/test/util/test_yus.rb +79 -0
  286. metadata +418 -0
@@ -0,0 +1,189 @@
1
+ #!/usr/bin/env ruby
2
+ # Html::State::Drugs::Admin::Package -- de.oddb.org -- 29.10.2007 -- hwyss@ywesee.com
3
+
4
+ require 'oddb/html/state/drugs/package'
5
+ require 'oddb/html/view/drugs/admin/package'
6
+ require 'oddb/util/code'
7
+
8
+ module ODDB
9
+ module Html
10
+ module State
11
+ module Drugs
12
+ module Admin
13
+ class AjaxParts < Global
14
+ VOLATILE = true
15
+ VIEW = View::Drugs::Admin::Parts
16
+ end
17
+ class Package < Drugs::Package
18
+ VIEW = View::Drugs::Admin::Package
19
+ def ajax_create_part
20
+ check_model
21
+ parts = @model.parts.dup
22
+ if(!error?)
23
+ part = ODDB::Drugs::Part.new
24
+ part.package = Util::UnsavedHelper.new(@model)
25
+ parts.push part
26
+ end
27
+ AjaxParts.new @session, parts
28
+ end
29
+ def ajax_delete_part
30
+ check_model
31
+ keys = [:code_cid, :part]
32
+ input = user_input(keys, keys)
33
+ agents = []
34
+ if(!error? \
35
+ && (part = @model.parts.at(input[:part].to_i)))
36
+ part.delete
37
+ end
38
+ AjaxParts.new(@session, @model.parts)
39
+ end
40
+ def check_model
41
+ if(@model.code(:cid, ODDB.config.country).to_s != @session.user_input(:code_cid))
42
+ @errors.store :code_cid, create_error(:e_state_expired, :code_cid, nil)
43
+ end
44
+ end
45
+ def delete
46
+ check_model
47
+ unless error?
48
+ seq = @model.sequence
49
+ if(seq.is_a? Util::UnsavedHelper)
50
+ seq = seq.delegate
51
+ end
52
+ @model.delete
53
+ Sequence.new(@session, seq)
54
+ end
55
+ end
56
+ def update
57
+ mandatory = [ :name, :code_cid ]
58
+ keys = [ :price_exfactory, :price_public, :price_festbetrag,
59
+ :code_festbetragsstufe, :code_festbetragsgruppe,
60
+ :code_zuzahlungsbefreit, :code_prescription, :unit, :sequence,
61
+ :size, :multi, :composition, :quantity ]
62
+ input = user_input(mandatory + keys, mandatory)
63
+ others = ODDB::Drugs::Package.search_by_code(:type => 'cid',
64
+ :value => input[:code_cid],
65
+ :country => ODDB.config.country)
66
+ others.delete(@model)
67
+ unless others.empty?
68
+ value = sprintf "'%i' (%s)", input[:code_cid],
69
+ others.collect { |pac| pac.name.de }.join(', ')
70
+ @errors.store(:code_cid,
71
+ create_error(:e_duplicate_cid, :code_cid, value))
72
+ end
73
+ _update input
74
+ end
75
+ def _update input
76
+ email = @session.user.email
77
+ input.each { |key, value|
78
+ unless(@errors[key])
79
+ set = case key
80
+ when :name
81
+ @model.name.de = value unless(@model.name.de == value)
82
+ when :price_public, :price_festbetrag, :price_exfactory
83
+ update_price(/price_(.*)/.match(key.to_s)[1].to_sym, value.to_f)
84
+ when :code_cid, :code_festbetragsgruppe, :code_festbetragsstufe
85
+ update_code(/code_(.*)/.match(key.to_s)[1].to_sym, value)
86
+ when :code_zuzahlungsbefreit, :code_prescription
87
+ update_code(/code_(.*)/.match(key.to_s)[1].to_sym, !!value)
88
+ when :size
89
+ update_parts(input)
90
+ end
91
+ unless(set.nil?)
92
+ @model.data_origins.store key, email
93
+ end
94
+ end
95
+ }
96
+ if((uid = input[:sequence]) \
97
+ && (seq = ODDB::Drugs::Sequence.find_by_uid(uid)) \
98
+ && @model.sequence != seq)
99
+ @model.sequence = seq
100
+ @model.parts.each_with_index { |part, idx|
101
+ part.composition = seq.compositions[idx]
102
+ part.save
103
+ }
104
+ elsif((seq = @model.sequence) && seq.is_a?(Util::UnsavedHelper))
105
+ @model.sequence = seq.delegate
106
+ end
107
+ @model.save
108
+ self
109
+ end
110
+ def package
111
+ if((code = @session.user_input(:cid)) && @model.code(:cid, ODDB.config.country) == code)
112
+ self
113
+ else
114
+ super
115
+ end
116
+ end
117
+ private
118
+ def update_code(type, value)
119
+ if(code = @model.code(type))
120
+ code.value = value unless(code == value)
121
+ else
122
+ @model.add_code ODDB::Util::Code.new(type, value, ODDB.config.country)
123
+ end
124
+ end
125
+ def update_parts(input)
126
+ if(sizes = input[:size])
127
+ sizes.each { |idx, size|
128
+ part = @model.parts.at(idx.to_i)
129
+ part ||= ODDB::Drugs::Part.new
130
+ current = {}
131
+ [:multi, :size, :unit, :quantity, :composition].each { |key|
132
+ values = (input[key] ||= {})
133
+ if((val = values[idx]) && !val.empty?)
134
+ current.store(key, val)
135
+ end
136
+ }
137
+ part.multi = current[:multi] && current[:multi].to_i
138
+ part.size = current[:size]
139
+ if(unitname = current[:unit])
140
+ if(unit = ODDB::Drugs::Unit.find_by_name(unitname))
141
+ part.unit = unit
142
+ else
143
+ key = :"unit[#{idx}]"
144
+ @errors.store key, create_error(:e_unknown_unit, key, unitname)
145
+ end
146
+ else
147
+ part.unit = nil
148
+ end
149
+ if(str = current[:quantity])
150
+ part.quantity = ODDB::Drugs::Dose.new(*str.split(/\s*(?=[^\d.,])/, 2))
151
+ else
152
+ part.quantity = nil
153
+ end
154
+ if(comp = current[:composition])
155
+ part.composition = @model.compositions.at(comp.to_i)
156
+ end
157
+ part.package = @model unless(part.package == @model)
158
+ part.save
159
+ }
160
+ end
161
+ end
162
+ def update_price(type, amount)
163
+ if price = @model.price(type, ODDB.config.country)
164
+ if amount > 0
165
+ price.value = amount unless(price == amount)
166
+ else
167
+ @model.remove_price price
168
+ end
169
+ elsif amount > 0
170
+ @model.add_price ODDB::Business::Price.new(type, ODDB.config.country, amount)
171
+ end
172
+ end
173
+ end
174
+ class NewPackage < Package
175
+ def direct_event
176
+ # disable redirector
177
+ end
178
+ def _update input
179
+ unless @errors[:code_cid]
180
+ super
181
+ Package.new(@session, @model)
182
+ end
183
+ end
184
+ end
185
+ end
186
+ end
187
+ end
188
+ end
189
+ end
@@ -0,0 +1,56 @@
1
+ #!/usr/bin/env ruby
2
+ # Html::State::Drugs::Admin::Product -- de.oddb.org -- 04.04.2008 -- hwyss@ywesee.com
3
+
4
+ require 'oddb/html/view/drugs/admin/product'
5
+ require 'oddb/html/state/drugs/global'
6
+
7
+ module ODDB
8
+ module Html
9
+ module State
10
+ module Drugs
11
+ module Admin
12
+ class Product < Global
13
+ VIEW = View::Drugs::Admin::Product
14
+ def check_model
15
+ if(@model.uid.to_s != @session.user_input(:uid))
16
+ @errors.store :uid, create_error(:e_state_expired, :uid, nil)
17
+ end
18
+ end
19
+ def direct_event
20
+ direct_event = [:product]
21
+ if(uid = @model.uid)
22
+ direct_event.push([:uid, uid])
23
+ end
24
+ direct_event
25
+ end
26
+ def update
27
+ value = user_input :company
28
+ error_check_and_store(:company, value, [:company])
29
+ unless error?
30
+ set = if(company = ODDB::Business::Company.find_by_name(value))
31
+ @model.company = company
32
+ else
33
+ @errors.store :company, create_error(:e_unknown_company,
34
+ :company, value)
35
+ nil
36
+ end
37
+ unless(set.nil?)
38
+ @model.data_origins.store :company, @session.user.email
39
+ @model.save
40
+ end
41
+ end
42
+ self
43
+ end
44
+ def product
45
+ if((uid = @session.user_input(:uid)) && @model.uid.to_s == uid)
46
+ self
47
+ else
48
+ super
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,259 @@
1
+ #!/usr/bin/env ruby
2
+ # Html::State::Drugs::Admin::Sequence -- de.oddb.org -- 04.04.2008 -- hwyss@ywesee.com
3
+
4
+ require 'oddb/html/view/drugs/admin/sequence'
5
+ require 'oddb/html/state/drugs/global'
6
+
7
+ module ODDB
8
+ module Html
9
+ module State
10
+ module Drugs
11
+ module Admin
12
+ class AjaxActiveAgents < Global
13
+ VOLATILE = true
14
+ VIEW = View::Drugs::Admin::ActiveAgents
15
+ end
16
+ class AjaxCompositions < Global
17
+ VOLATILE = true
18
+ VIEW = View::Drugs::Admin::Compositions
19
+ end
20
+ class Sequence < Global
21
+ VIEW = View::Drugs::Admin::Sequence
22
+ def ajax_create_active_agent
23
+ check_model
24
+ keys = [:uid, :composition]
25
+ input = user_input(keys, keys)
26
+ agents = []
27
+ if(!error? \
28
+ && (composition = @model.compositions.at(input[:composition].to_i)))
29
+ agents = composition.active_agents
30
+ end
31
+ AjaxActiveAgents.new(@session, agents.dup.push(nil))
32
+ end
33
+ def ajax_create_composition
34
+ check_model
35
+ comps = @model.compositions.dup
36
+ if(!error?)
37
+ comp = ODDB::Drugs::Composition.new
38
+ comp.active_agents.push nil
39
+ comps.push comp
40
+ end
41
+ AjaxCompositions.new @session, comps
42
+ end
43
+ def ajax_delete_active_agent
44
+ check_model
45
+ keys = [:uid, :active_agent, :composition]
46
+ input = user_input(keys, keys)
47
+ agents = []
48
+ if(!error? \
49
+ && (composition = @model.compositions.at(input[:composition].to_i)))
50
+ if(agent = composition.active_agents.at(input[:active_agent].to_i))
51
+ agent.delete
52
+ composition.remove_active_agent(agent)
53
+ composition.save
54
+ end
55
+ agents = composition.active_agents
56
+ end
57
+ AjaxActiveAgents.new(@session, agents)
58
+ end
59
+ def ajax_delete_composition
60
+ check_model
61
+ keys = [:uid, :composition]
62
+ input = user_input(keys, keys)
63
+ agents = []
64
+ if(!error? \
65
+ && (composition = @model.compositions.at(input[:composition].to_i)))
66
+ composition.delete
67
+ end
68
+ AjaxCompositions.new(@session, @model.compositions)
69
+ end
70
+ def check_model
71
+ if(@model.uid.to_s != @session.user_input(:uid))
72
+ @errors.store :uid, create_error(:e_state_expired, :uid, nil)
73
+ end
74
+ end
75
+ def delete
76
+ check_model
77
+ unless error?
78
+ prod = @model.product
79
+ if(prod.is_a? Util::UnsavedHelper)
80
+ prod = prod.delegate
81
+ end
82
+ @model.delete
83
+ Product.new(@session, prod)
84
+ end
85
+ end
86
+ def direct_event
87
+ direct_event = [:sequence]
88
+ if(uid = @model.uid)
89
+ direct_event.push([:uid, uid])
90
+ end
91
+ direct_event
92
+ end
93
+ =begin ## temporarily disabled: this should be recoded to work with swiss infos
94
+ # in 2.0
95
+ def _import_rtf(key, seq, url)
96
+ if(url && !url.empty?)
97
+ seq.send "#{key}_url=", url
98
+ imp = Import::PharmNet::Import.new
99
+ document = imp.import_rtf(key, WWW::Mechanize.new, url, seq.product.name.de,
100
+ :reparse => true, :reload => true)
101
+ parent = seq.send(key)
102
+ parent.de = document
103
+ parent.save
104
+ end
105
+ rescue StandardError
106
+ end
107
+ =end
108
+ def update
109
+ check_model
110
+ mandatory = [ :atc ]
111
+ keys = [ :atc_name, :registration, :fachinfo_url, :patinfo_url,
112
+ :galenic_form, :substance, :dose ]
113
+ input = user_input(mandatory + keys, mandatory)
114
+ unless /^EU/.match input[:registration].to_s
115
+ others = ODDB::Drugs::Sequence.search_by_code(:type => 'registration',
116
+ :value => input[:registration],
117
+ :country => 'EU')
118
+ others.delete(@model)
119
+ unless others.empty?
120
+ value = sprintf "'%s' (%s)", input[:registration],
121
+ others.collect { |seq|
122
+ seq.name.de || seq.product.name.de }.join(', ')
123
+ @errors.store(:registration,
124
+ create_error(:e_duplicate_registration, :registration, value))
125
+ end
126
+ end
127
+ _update input
128
+ end
129
+ def _update input
130
+ email = @session.user.email
131
+ if((prod = @model.product) && prod.is_a?(Util::UnsavedHelper))
132
+ @model.product = prod.delegate
133
+ end
134
+ input.each { |key, value|
135
+ unless(@errors[key])
136
+ set = case key
137
+ when :atc
138
+ if(value.empty?)
139
+ warn "empty atc"
140
+ elsif(atc = ODDB::Drugs::Atc.find_by_code(value))
141
+ @model.atc = atc
142
+ elsif((name = input[:atc_name]) && !name.empty?)
143
+ atc = ODDB::Drugs::Atc.new value
144
+ atc.name.de = name
145
+ atc.save
146
+ @model.atc = atc
147
+ else
148
+ @errors.store :atc, create_error(:e_unknown_atc, :atc, value)
149
+ nil
150
+ end
151
+ =begin ## temporarily disabled: this should be recoded to work with swiss infos
152
+ # in 2.0
153
+ when :fachinfo_url
154
+ unless value == @model.fachinfo_url
155
+ _import_rtf(:fachinfo, @model, value)
156
+ end
157
+ when :patinfo_url
158
+ unless value == @model.patinfo_url
159
+ _import_rtf(:patinfo, @model, value)
160
+ end
161
+ =end
162
+ when :registration
163
+ if(value.empty?)
164
+ @model.remove_code(@model.registration)
165
+ elsif(code = @model.registration)
166
+ code.value = value unless code == value
167
+ else
168
+ @model.add_code ODDB::Util::Code.new(:registration, value, 'EU')
169
+ end
170
+ when :substance
171
+ update_compositions(input)
172
+ end
173
+ unless(set.nil?)
174
+ @model.data_origins.store key, email
175
+ end
176
+ end
177
+ }
178
+ @model.save
179
+ self
180
+ end
181
+ def sequence
182
+ if((uid = @session.user_input(:uid)) && @model.uid.to_s == uid)
183
+ self
184
+ else
185
+ super
186
+ end
187
+ end
188
+ private
189
+ def update_compositions(input)
190
+ saved = nil
191
+ if(substances = input[:substance])
192
+ substances.each { |cmp_idx, substances|
193
+ doses = input[:dose][cmp_idx]
194
+ gfstr = input[:galenic_form][cmp_idx]
195
+ cmp_idx = cmp_idx.to_i
196
+ comp = @model.compositions.at(cmp_idx)
197
+ if(comp.nil?)
198
+ comp = ODDB::Drugs::Composition.new
199
+ comp.sequence = @model
200
+ end
201
+ if gfstr.to_s.empty?
202
+ comp.galenic_form = nil
203
+ elsif gform = ODDB::Drugs::GalenicForm.find_by_description(gfstr)
204
+ comp.galenic_form = gform
205
+ else
206
+ key = :"galenic_form[#{cmp_idx}]"
207
+ @errors.store key, create_error(:e_unknown_galenic_form, key, gfstr)
208
+ end
209
+ substances.each { |sub_idx, sub|
210
+ parts = doses[sub_idx].split(/\s*(?=[^\d.,])/, 2)
211
+ sub_idx = sub_idx.to_i
212
+ if(substance = ODDB::Drugs::Substance.find_by_name(sub))
213
+ changed = false
214
+ dose = ODDB::Drugs::Dose.new(*parts) unless parts.empty?
215
+ agent = comp.active_agents.at(sub_idx)
216
+ if(agent.nil?)
217
+ agent = ODDB::Drugs::ActiveAgent.new substance, dose
218
+ agent.composition = comp
219
+ changed = true
220
+ end
221
+ if(agent.substance != substance)
222
+ agent.substance = substance
223
+ changed = true
224
+ end
225
+ if(agent.dose != dose)
226
+ agent.dose = dose
227
+ changed = true
228
+ end
229
+ if changed
230
+ saved = true
231
+ agent.save
232
+ end
233
+ else
234
+ key = :"substance[#{cmp_idx}][#{sub_idx}]"
235
+ @errors.store key, create_error(:e_unknown_substance, key, sub)
236
+ end
237
+ }
238
+ comp.save
239
+ }
240
+ end
241
+ saved
242
+ end
243
+ end
244
+ class NewSequence < Sequence
245
+ def direct_event
246
+ # disable redirector
247
+ end
248
+ def _update input
249
+ unless @errors[:registration]
250
+ super
251
+ Sequence.new(@session, @model)
252
+ end
253
+ end
254
+ end
255
+ end
256
+ end
257
+ end
258
+ end
259
+ end