de.oddb 2.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 (431) hide show
  1. data/Guide.txt +3 -0
  2. data/History.txt +5 -0
  3. data/LICENCE.txt +339 -0
  4. data/Manifest.txt +430 -0
  5. data/README +423 -0
  6. data/README.txt +25 -0
  7. data/Rakefile +28 -0
  8. data/bin/admin +71 -0
  9. data/bin/exportd +44 -0
  10. data/bin/oddbd +33 -0
  11. data/data/fulltext/data/dicts/french/fulltext.aff +1057 -0
  12. data/data/fulltext/data/dicts/french/fulltext.dict +91189 -0
  13. data/data/fulltext/data/dicts/french/fulltext.stop +135 -0
  14. data/data/fulltext/data/dicts/german/fulltext.aff +1233 -0
  15. data/data/fulltext/data/dicts/german/fulltext.dict +287574 -0
  16. data/data/fulltext/data/dicts/german/fulltext.stop +133 -0
  17. data/data/fulltext/data/german_compound/README +15 -0
  18. data/data/fulltext/data/german_compound/compound.pl +63 -0
  19. data/data/fulltext/data/german_compound/german.stop +20 -0
  20. data/data/fulltext/data/ispell-german-compound.tar.gz +0 -0
  21. data/data/fulltext/redist/dict_french/Makefile +12 -0
  22. data/data/fulltext/redist/dict_french/README.french +1 -0
  23. data/data/fulltext/redist/dict_french/dict_french.sql.in +7 -0
  24. data/data/fulltext/redist/dict_french/dict_snowball.c +56 -0
  25. data/data/fulltext/redist/dict_french/french_stem.c +1222 -0
  26. data/data/fulltext/redist/dict_french/french_stem.h +16 -0
  27. data/data/fulltext/redist/dict_french/subinclude.h +2 -0
  28. data/data/fulltext/redist/dict_german/Makefile +12 -0
  29. data/data/fulltext/redist/dict_german/README.german +1 -0
  30. data/data/fulltext/redist/dict_german/dict_german.sql.in +7 -0
  31. data/data/fulltext/redist/dict_german/dict_snowball.c +56 -0
  32. data/data/fulltext/redist/dict_german/german_stem.c +527 -0
  33. data/data/fulltext/redist/dict_german/german_stem.h +16 -0
  34. data/data/fulltext/redist/dict_german/subinclude.h +1 -0
  35. data/data/fulltext/redist/french_stem.c +1222 -0
  36. data/data/fulltext/redist/french_stem.h +16 -0
  37. data/data/fulltext/redist/german_stem.c +527 -0
  38. data/data/fulltext/redist/german_stem.h +16 -0
  39. data/jobs/export_chde_xls +20 -0
  40. data/jobs/export_csv +20 -0
  41. data/jobs/export_fachinfo_yaml +20 -0
  42. data/jobs/export_patinfo_yaml +20 -0
  43. data/jobs/export_yaml +20 -0
  44. data/jobs/import_dimdi +15 -0
  45. data/jobs/import_gkv +19 -0
  46. data/jobs/import_pharma24 +15 -0
  47. data/jobs/import_pharmnet +30 -0
  48. data/jobs/import_whocc +18 -0
  49. data/lib/fixes/singular.rb +9 -0
  50. data/lib/fixes/yaml.rb +13 -0
  51. data/lib/oddb.rb +13 -0
  52. data/lib/oddb/business/company.rb +18 -0
  53. data/lib/oddb/business/grant_download.rb +27 -0
  54. data/lib/oddb/business/invoice.rb +75 -0
  55. data/lib/oddb/config.rb +112 -0
  56. data/lib/oddb/currency.rb +6 -0
  57. data/lib/oddb/drugs.rb +16 -0
  58. data/lib/oddb/drugs/active_agent.rb +37 -0
  59. data/lib/oddb/drugs/atc.rb +53 -0
  60. data/lib/oddb/drugs/composition.rb +41 -0
  61. data/lib/oddb/drugs/ddd.rb +24 -0
  62. data/lib/oddb/drugs/dose.rb +107 -0
  63. data/lib/oddb/drugs/galenic_form.rb +21 -0
  64. data/lib/oddb/drugs/galenic_group.rb +17 -0
  65. data/lib/oddb/drugs/package.rb +111 -0
  66. data/lib/oddb/drugs/part.rb +55 -0
  67. data/lib/oddb/drugs/product.rb +25 -0
  68. data/lib/oddb/drugs/sequence.rb +68 -0
  69. data/lib/oddb/drugs/substance.rb +31 -0
  70. data/lib/oddb/drugs/substance_group.rb +13 -0
  71. data/lib/oddb/drugs/unit.rb +12 -0
  72. data/lib/oddb/export.rb +4 -0
  73. data/lib/oddb/export/csv.rb +94 -0
  74. data/lib/oddb/export/l10n_sessions.rb +30 -0
  75. data/lib/oddb/export/rss.rb +44 -0
  76. data/lib/oddb/export/server.rb +137 -0
  77. data/lib/oddb/export/xls.rb +127 -0
  78. data/lib/oddb/export/yaml.rb +212 -0
  79. data/lib/oddb/html/state/download.rb +13 -0
  80. data/lib/oddb/html/state/drugs/admin/package.rb +190 -0
  81. data/lib/oddb/html/state/drugs/admin/product.rb +56 -0
  82. data/lib/oddb/html/state/drugs/admin/sequence.rb +253 -0
  83. data/lib/oddb/html/state/drugs/ajax/explain_ddd_price.rb +19 -0
  84. data/lib/oddb/html/state/drugs/ajax/explain_price.rb +19 -0
  85. data/lib/oddb/html/state/drugs/ajax/global.rb +18 -0
  86. data/lib/oddb/html/state/drugs/ajax/package_infos.rb +19 -0
  87. data/lib/oddb/html/state/drugs/ajax/remote_infos.rb +19 -0
  88. data/lib/oddb/html/state/drugs/atc_browser.rb +39 -0
  89. data/lib/oddb/html/state/drugs/atc_guidelines.rb +21 -0
  90. data/lib/oddb/html/state/drugs/compare.rb +52 -0
  91. data/lib/oddb/html/state/drugs/download_export.rb +18 -0
  92. data/lib/oddb/html/state/drugs/downloads.rb +42 -0
  93. data/lib/oddb/html/state/drugs/fachinfo.rb +21 -0
  94. data/lib/oddb/html/state/drugs/feedback.rb +91 -0
  95. data/lib/oddb/html/state/drugs/global.rb +270 -0
  96. data/lib/oddb/html/state/drugs/init.rb +18 -0
  97. data/lib/oddb/html/state/drugs/login.rb +17 -0
  98. data/lib/oddb/html/state/drugs/package.rb +32 -0
  99. data/lib/oddb/html/state/drugs/patinfo.rb +21 -0
  100. data/lib/oddb/html/state/drugs/products.rb +51 -0
  101. data/lib/oddb/html/state/drugs/result.rb +125 -0
  102. data/lib/oddb/html/state/global.rb +206 -0
  103. data/lib/oddb/html/state/global_predefine.rb +17 -0
  104. data/lib/oddb/html/state/limit.rb +17 -0
  105. data/lib/oddb/html/state/login.rb +56 -0
  106. data/lib/oddb/html/state/paypal/checkout.rb +97 -0
  107. data/lib/oddb/html/state/paypal/collect.rb +19 -0
  108. data/lib/oddb/html/state/paypal/download.rb +61 -0
  109. data/lib/oddb/html/state/paypal/redirect.rb +18 -0
  110. data/lib/oddb/html/state/register_download.rb +24 -0
  111. data/lib/oddb/html/state/register_export.rb +38 -0
  112. data/lib/oddb/html/state/register_poweruser.rb +17 -0
  113. data/lib/oddb/html/state/viral/admin.rb +79 -0
  114. data/lib/oddb/html/state/viral/poweruser.rb +16 -0
  115. data/lib/oddb/html/util/annotated_list.rb +39 -0
  116. data/lib/oddb/html/util/know_it_all.rb +28 -0
  117. data/lib/oddb/html/util/known_user.rb +55 -0
  118. data/lib/oddb/html/util/lookandfeel.rb +698 -0
  119. data/lib/oddb/html/util/need_all_input.rb +29 -0
  120. data/lib/oddb/html/util/session.rb +84 -0
  121. data/lib/oddb/html/util/sort.rb +72 -0
  122. data/lib/oddb/html/util/unsaved_helper.rb +20 -0
  123. data/lib/oddb/html/util/validator.rb +59 -0
  124. data/lib/oddb/html/view/ajax/json.rb +22 -0
  125. data/lib/oddb/html/view/alpha_header.rb +28 -0
  126. data/lib/oddb/html/view/document.rb +117 -0
  127. data/lib/oddb/html/view/download.rb +33 -0
  128. data/lib/oddb/html/view/drugs/admin/package.rb +245 -0
  129. data/lib/oddb/html/view/drugs/admin/product.rb +104 -0
  130. data/lib/oddb/html/view/drugs/admin/sequence.rb +305 -0
  131. data/lib/oddb/html/view/drugs/ajax/explain_ddd_price.rb +87 -0
  132. data/lib/oddb/html/view/drugs/ajax/explain_price.rb +61 -0
  133. data/lib/oddb/html/view/drugs/ajax/package_infos.rb +105 -0
  134. data/lib/oddb/html/view/drugs/ajax/remote_infos.rb +44 -0
  135. data/lib/oddb/html/view/drugs/atc_browser.rb +68 -0
  136. data/lib/oddb/html/view/drugs/atc_guidelines.rb +94 -0
  137. data/lib/oddb/html/view/drugs/compare.rb +95 -0
  138. data/lib/oddb/html/view/drugs/download_export.rb +28 -0
  139. data/lib/oddb/html/view/drugs/downloads.rb +128 -0
  140. data/lib/oddb/html/view/drugs/fachinfo.rb +46 -0
  141. data/lib/oddb/html/view/drugs/feedback.rb +235 -0
  142. data/lib/oddb/html/view/drugs/init.rb +51 -0
  143. data/lib/oddb/html/view/drugs/legend.rb +24 -0
  144. data/lib/oddb/html/view/drugs/package.rb +403 -0
  145. data/lib/oddb/html/view/drugs/patinfo.rb +46 -0
  146. data/lib/oddb/html/view/drugs/products.rb +97 -0
  147. data/lib/oddb/html/view/drugs/result.rb +296 -0
  148. data/lib/oddb/html/view/drugs/search.rb +33 -0
  149. data/lib/oddb/html/view/drugs/template.rb +15 -0
  150. data/lib/oddb/html/view/foot.rb +52 -0
  151. data/lib/oddb/html/view/google.rb +23 -0
  152. data/lib/oddb/html/view/google_ads.rb +40 -0
  153. data/lib/oddb/html/view/head.rb +78 -0
  154. data/lib/oddb/html/view/limit.rb +109 -0
  155. data/lib/oddb/html/view/list.rb +59 -0
  156. data/lib/oddb/html/view/login.rb +38 -0
  157. data/lib/oddb/html/view/navigation.rb +67 -0
  158. data/lib/oddb/html/view/offset_header.rb +35 -0
  159. data/lib/oddb/html/view/paypal/collect.rb +95 -0
  160. data/lib/oddb/html/view/paypal/redirect.rb +51 -0
  161. data/lib/oddb/html/view/paypal/register_form.rb +149 -0
  162. data/lib/oddb/html/view/register_download.rb +29 -0
  163. data/lib/oddb/html/view/register_export.rb +29 -0
  164. data/lib/oddb/html/view/register_poweruser.rb +29 -0
  165. data/lib/oddb/html/view/rss/feedback.rb +64 -0
  166. data/lib/oddb/html/view/rss_preview.rb +61 -0
  167. data/lib/oddb/html/view/search.rb +104 -0
  168. data/lib/oddb/html/view/snapback.rb +24 -0
  169. data/lib/oddb/html/view/template.rb +56 -0
  170. data/lib/oddb/import/dimdi.rb +583 -0
  171. data/lib/oddb/import/excel.rb +45 -0
  172. data/lib/oddb/import/gkv.rb +463 -0
  173. data/lib/oddb/import/importer.rb +36 -0
  174. data/lib/oddb/import/pharma24.rb +211 -0
  175. data/lib/oddb/import/pharmnet.rb +1186 -0
  176. data/lib/oddb/import/rtf.rb +409 -0
  177. data/lib/oddb/import/whocc.rb +148 -0
  178. data/lib/oddb/import/xml.rb +15 -0
  179. data/lib/oddb/model.rb +179 -0
  180. data/lib/oddb/persistence.rb +22 -0
  181. data/lib/oddb/persistence/odba.rb +32 -0
  182. data/lib/oddb/persistence/odba/business/company.rb +13 -0
  183. data/lib/oddb/persistence/odba/business/grant_download.rb +14 -0
  184. data/lib/oddb/persistence/odba/business/invoice.rb +15 -0
  185. data/lib/oddb/persistence/odba/drugs/atc.rb +15 -0
  186. data/lib/oddb/persistence/odba/drugs/galenic_form.rb +18 -0
  187. data/lib/oddb/persistence/odba/drugs/galenic_group.rb +13 -0
  188. data/lib/oddb/persistence/odba/drugs/package.rb +25 -0
  189. data/lib/oddb/persistence/odba/drugs/product.rb +13 -0
  190. data/lib/oddb/persistence/odba/drugs/sequence.rb +21 -0
  191. data/lib/oddb/persistence/odba/drugs/substance.rb +21 -0
  192. data/lib/oddb/persistence/odba/drugs/substance_group.rb +13 -0
  193. data/lib/oddb/persistence/odba/drugs/unit.rb +13 -0
  194. data/lib/oddb/persistence/odba/export.rb +26 -0
  195. data/lib/oddb/persistence/odba/model.rb +68 -0
  196. data/lib/oddb/persistence/odba/text/document.rb +11 -0
  197. data/lib/oddb/persistence/odba/util/code.rb +11 -0
  198. data/lib/oddb/persistence/odba/util/m10l_document.rb +13 -0
  199. data/lib/oddb/persistence/og.rb +16 -0
  200. data/lib/oddb/persistence/og/drugs/composition.rb +14 -0
  201. data/lib/oddb/persistence/og/drugs/product.rb +14 -0
  202. data/lib/oddb/persistence/og/drugs/sequence.rb +15 -0
  203. data/lib/oddb/persistence/og/model.rb +25 -0
  204. data/lib/oddb/persistence/og/util/multilingual.rb +13 -0
  205. data/lib/oddb/redist/rtf_tools/reader.rb +139 -0
  206. data/lib/oddb/remote/business/company.rb +17 -0
  207. data/lib/oddb/remote/drugs/active_agent.rb +27 -0
  208. data/lib/oddb/remote/drugs/atc.rb +31 -0
  209. data/lib/oddb/remote/drugs/dose.rb +8 -0
  210. data/lib/oddb/remote/drugs/galenic_form.rb +24 -0
  211. data/lib/oddb/remote/drugs/package.rb +128 -0
  212. data/lib/oddb/remote/drugs/part.rb +30 -0
  213. data/lib/oddb/remote/drugs/substance.rb +20 -0
  214. data/lib/oddb/remote/drugs/unit.rb +20 -0
  215. data/lib/oddb/remote/object.rb +36 -0
  216. data/lib/oddb/text/chapter.rb +23 -0
  217. data/lib/oddb/text/document.rb +42 -0
  218. data/lib/oddb/text/format.rb +37 -0
  219. data/lib/oddb/text/paragraph.rb +53 -0
  220. data/lib/oddb/text/picture.rb +89 -0
  221. data/lib/oddb/text/table.rb +68 -0
  222. data/lib/oddb/util.rb +9 -0
  223. data/lib/oddb/util/annotated_list.rb +37 -0
  224. data/lib/oddb/util/code.rb +69 -0
  225. data/lib/oddb/util/comparison.rb +36 -0
  226. data/lib/oddb/util/download.rb +17 -0
  227. data/lib/oddb/util/exporter.rb +8 -0
  228. data/lib/oddb/util/feedback.rb +23 -0
  229. data/lib/oddb/util/ipn.rb +53 -0
  230. data/lib/oddb/util/job.rb +23 -0
  231. data/lib/oddb/util/logger.rb +20 -0
  232. data/lib/oddb/util/m10l_document.rb +41 -0
  233. data/lib/oddb/util/mail.rb +87 -0
  234. data/lib/oddb/util/money.rb +64 -0
  235. data/lib/oddb/util/multilingual.rb +70 -0
  236. data/lib/oddb/util/quanty.rb +3 -0
  237. data/lib/oddb/util/quanty/fact.rb +242 -0
  238. data/lib/oddb/util/quanty/main.rb +164 -0
  239. data/lib/oddb/util/quanty/parse.rb +872 -0
  240. data/lib/oddb/util/quanty/units.dump +0 -0
  241. data/lib/oddb/util/server.rb +150 -0
  242. data/lib/oddb/util/smtp_tls.rb +58 -0
  243. data/lib/oddb/util/updater.rb +161 -0
  244. data/lib/oddb/util/ydim.rb +110 -0
  245. data/lib/oddb/util/yus.rb +46 -0
  246. data/test/business/test_company.rb +29 -0
  247. data/test/business/test_grant_download.rb +29 -0
  248. data/test/drugs/test_active_agent.rb +53 -0
  249. data/test/drugs/test_atc.rb +54 -0
  250. data/test/drugs/test_composition.rb +88 -0
  251. data/test/drugs/test_ddd.rb +22 -0
  252. data/test/drugs/test_dose.rb +189 -0
  253. data/test/drugs/test_galenic_form.rb +41 -0
  254. data/test/drugs/test_package.rb +172 -0
  255. data/test/drugs/test_part.rb +32 -0
  256. data/test/drugs/test_product.rb +31 -0
  257. data/test/drugs/test_sequence.rb +140 -0
  258. data/test/drugs/test_substance.rb +51 -0
  259. data/test/drugs/test_substance_group.rb +27 -0
  260. data/test/export/test_rss.rb +86 -0
  261. data/test/export/test_server.rb +163 -0
  262. data/test/export/test_xls.rb +146 -0
  263. data/test/export/test_yaml.rb +120 -0
  264. data/test/import/data/csv/products.csv +11 -0
  265. data/test/import/data/html/dimdi_index.html +400 -0
  266. data/test/import/data/html/gkv/Befreiungsliste_Arzneimittel_Versicherte.gkvnet +508 -0
  267. data/test/import/data/html/pharma24/1337397.html +754 -0
  268. data/test/import/data/html/pharma24/842756.html +570 -0
  269. data/test/import/data/html/pharma24/ac-page-10.html +2999 -0
  270. data/test/import/data/html/pharma24/ac-page-11.html +2999 -0
  271. data/test/import/data/html/pharma24/ac-page-12.html +2999 -0
  272. data/test/import/data/html/pharma24/ac-page-13.html +2999 -0
  273. data/test/import/data/html/pharma24/ac-page-14.html +2999 -0
  274. data/test/import/data/html/pharma24/ac-page-15.html +3011 -0
  275. data/test/import/data/html/pharma24/ac-page-16.html +3050 -0
  276. data/test/import/data/html/pharma24/ac-page-17.html +3285 -0
  277. data/test/import/data/html/pharma24/ac-page-18.html +3109 -0
  278. data/test/import/data/html/pharma24/ac-page-19.html +3126 -0
  279. data/test/import/data/html/pharma24/ac-page-2.html +3005 -0
  280. data/test/import/data/html/pharma24/ac-page-20.html +3007 -0
  281. data/test/import/data/html/pharma24/ac-page-21.html +2999 -0
  282. data/test/import/data/html/pharma24/ac-page-22.html +2999 -0
  283. data/test/import/data/html/pharma24/ac-page-23.html +3055 -0
  284. data/test/import/data/html/pharma24/ac-page-24.html +2999 -0
  285. data/test/import/data/html/pharma24/ac-page-25.html +3004 -0
  286. data/test/import/data/html/pharma24/ac-page-26.html +2999 -0
  287. data/test/import/data/html/pharma24/ac-page-27.html +3167 -0
  288. data/test/import/data/html/pharma24/ac-page-28.html +3236 -0
  289. data/test/import/data/html/pharma24/ac-page-29.html +3110 -0
  290. data/test/import/data/html/pharma24/ac-page-3.html +2999 -0
  291. data/test/import/data/html/pharma24/ac-page-30.html +2999 -0
  292. data/test/import/data/html/pharma24/ac-page-31.html +2999 -0
  293. data/test/import/data/html/pharma24/ac-page-32.html +2999 -0
  294. data/test/import/data/html/pharma24/ac-page-33.html +3001 -0
  295. data/test/import/data/html/pharma24/ac-page-34.html +2999 -0
  296. data/test/import/data/html/pharma24/ac-page-35.html +2999 -0
  297. data/test/import/data/html/pharma24/ac-page-36.html +2999 -0
  298. data/test/import/data/html/pharma24/ac-page-37.html +2999 -0
  299. data/test/import/data/html/pharma24/ac-page-38.html +3003 -0
  300. data/test/import/data/html/pharma24/ac-page-39.html +2999 -0
  301. data/test/import/data/html/pharma24/ac-page-4.html +2999 -0
  302. data/test/import/data/html/pharma24/ac-page-40.html +2999 -0
  303. data/test/import/data/html/pharma24/ac-page-41.html +2999 -0
  304. data/test/import/data/html/pharma24/ac-page-42.html +2999 -0
  305. data/test/import/data/html/pharma24/ac-page-43.html +2999 -0
  306. data/test/import/data/html/pharma24/ac-page-44.html +2999 -0
  307. data/test/import/data/html/pharma24/ac-page-45.html +2999 -0
  308. data/test/import/data/html/pharma24/ac-page-46.html +2999 -0
  309. data/test/import/data/html/pharma24/ac-page-47.html +2999 -0
  310. data/test/import/data/html/pharma24/ac-page-48.html +2999 -0
  311. data/test/import/data/html/pharma24/ac-page-49.html +2999 -0
  312. data/test/import/data/html/pharma24/ac-page-5.html +3168 -0
  313. data/test/import/data/html/pharma24/ac-page-50.html +2999 -0
  314. data/test/import/data/html/pharma24/ac-page-51.html +2999 -0
  315. data/test/import/data/html/pharma24/ac-page-52.html +3003 -0
  316. data/test/import/data/html/pharma24/ac-page-53.html +2999 -0
  317. data/test/import/data/html/pharma24/ac-page-54.html +3095 -0
  318. data/test/import/data/html/pharma24/ac-page-55.html +3041 -0
  319. data/test/import/data/html/pharma24/ac-page-56.html +2999 -0
  320. data/test/import/data/html/pharma24/ac-page-57.html +3001 -0
  321. data/test/import/data/html/pharma24/ac-page-58.html +3001 -0
  322. data/test/import/data/html/pharma24/ac-page-59.html +2999 -0
  323. data/test/import/data/html/pharma24/ac-page-6.html +3072 -0
  324. data/test/import/data/html/pharma24/ac-page-60.html +3001 -0
  325. data/test/import/data/html/pharma24/ac-page-61.html +3005 -0
  326. data/test/import/data/html/pharma24/ac-page-62.html +2999 -0
  327. data/test/import/data/html/pharma24/ac-page-63.html +3007 -0
  328. data/test/import/data/html/pharma24/ac-page-64.html +3007 -0
  329. data/test/import/data/html/pharma24/ac-page-65.html +2999 -0
  330. data/test/import/data/html/pharma24/ac-page-66.html +3011 -0
  331. data/test/import/data/html/pharma24/ac-page-67.html +3026 -0
  332. data/test/import/data/html/pharma24/ac-page-68.html +2999 -0
  333. data/test/import/data/html/pharma24/ac-page-69.html +3010 -0
  334. data/test/import/data/html/pharma24/ac-page-7.html +2999 -0
  335. data/test/import/data/html/pharma24/ac-page-70.html +3192 -0
  336. data/test/import/data/html/pharma24/ac-page-71.html +3133 -0
  337. data/test/import/data/html/pharma24/ac-page-72.html +2999 -0
  338. data/test/import/data/html/pharma24/ac-page-73.html +3227 -0
  339. data/test/import/data/html/pharma24/ac-page-74.html +3241 -0
  340. data/test/import/data/html/pharma24/ac-page-75.html +3227 -0
  341. data/test/import/data/html/pharma24/ac-page-76.html +3244 -0
  342. data/test/import/data/html/pharma24/ac-page-77.html +1164 -0
  343. data/test/import/data/html/pharma24/ac-page-8.html +2999 -0
  344. data/test/import/data/html/pharma24/ac-page-9.html +2999 -0
  345. data/test/import/data/html/pharma24/ac.html +2999 -0
  346. data/test/import/data/html/pharmnet/display.html +662 -0
  347. data/test/import/data/html/pharmnet/display1.html +625 -0
  348. data/test/import/data/html/pharmnet/display2.html +625 -0
  349. data/test/import/data/html/pharmnet/display3.html +625 -0
  350. data/test/import/data/html/pharmnet/display_tramal.html +634 -0
  351. data/test/import/data/html/pharmnet/empty_result.html +395 -0
  352. data/test/import/data/html/pharmnet/gate.html +246 -0
  353. data/test/import/data/html/pharmnet/index.html +258 -0
  354. data/test/import/data/html/pharmnet/paged_result_1.html +401 -0
  355. data/test/import/data/html/pharmnet/paged_result_2.html +401 -0
  356. data/test/import/data/html/pharmnet/result.html +401 -0
  357. data/test/import/data/html/pharmnet/search.html +865 -0
  358. data/test/import/data/html/pharmnet/search_filtered.html +182 -0
  359. data/test/import/data/html/whocc/A.html +56 -0
  360. data/test/import/data/html/whocc/A03.html +48 -0
  361. data/test/import/data/html/whocc/A03AB.html +48 -0
  362. data/test/import/data/html/whocc/A06AA.html +47 -0
  363. data/test/import/data/html/whocc/C03.html +47 -0
  364. data/test/import/data/html/whocc/login.html +77 -0
  365. data/test/import/data/mail/csv.mail +81 -0
  366. data/test/import/data/rtf/pharmnet/aarane.pi.rtf +648 -0
  367. data/test/import/data/rtf/pharmnet/ace_hemmer_ratio.pi.rtf +324 -0
  368. data/test/import/data/rtf/pharmnet/ace_hemmer_ratio.rtf +4816 -0
  369. data/test/import/data/rtf/pharmnet/acemetacin.pi.rtf +388 -0
  370. data/test/import/data/rtf/pharmnet/acemit.pi.rtf +240 -0
  371. data/test/import/data/rtf/pharmnet/acerbon.pi.rtf +1257 -0
  372. data/test/import/data/rtf/pharmnet/acetylcystein.pi.rtf +323 -0
  373. data/test/import/data/rtf/pharmnet/aciclo.pi.rtf +287 -0
  374. data/test/import/data/rtf/pharmnet/aciclovir.pi.rtf +236 -0
  375. data/test/import/data/rtf/pharmnet/actrapid.pi.rtf +322 -0
  376. data/test/import/data/rtf/pharmnet/amlodipin.pi.rtf +452 -0
  377. data/test/import/data/rtf/pharmnet/amlodipin.rtf +473 -0
  378. data/test/import/data/rtf/pharmnet/aspirin.pi.rtf +313 -0
  379. data/test/import/data/rtf/pharmnet/aspirin.rtf +781 -0
  380. data/test/import/data/rtf/pharmnet/baymycard.pi.rtf +447 -0
  381. data/test/import/data/rtf/pharmnet/omeprazol.pi.rtf +510 -0
  382. data/test/import/data/rtf/pharmnet/omeprazol.rtf +9216 -0
  383. data/test/import/data/rtf/pharmnet/paroxetin.pi.rtf +678 -0
  384. data/test/import/data/rtf/pharmnet/selegilin.pi.rtf +312 -0
  385. data/test/import/data/rtf/pharmnet/selegilin.rtf +683 -0
  386. data/test/import/data/rtf/pharmnet/valium.pi.rtf +387 -0
  387. data/test/import/data/txt/gkv/gkv_p1.txt +17 -0
  388. data/test/import/data/xls/darform_010706.xls +0 -0
  389. data/test/import/data/xls/fb010706.xls +0 -0
  390. data/test/import/data/xls/liste_zuzahlungsbefreite_arzneimittel_suchfunktion.xls +0 -0
  391. data/test/import/data/xls/wirkkurz_010406.xls +0 -0
  392. data/test/import/data/xml/ATC_2006.xml +47 -0
  393. data/test/import/data/xml/ATC_2006_ddd.xml +35 -0
  394. data/test/import/test_dimdi.rb +323 -0
  395. data/test/import/test_excel.rb +31 -0
  396. data/test/import/test_gkv.rb +260 -0
  397. data/test/import/test_pharma24.rb +112 -0
  398. data/test/import/test_pharmnet.rb +980 -0
  399. data/test/import/test_rtf.rb +37 -0
  400. data/test/import/test_whocc.rb +314 -0
  401. data/test/remote/drugs/test_active_agent.rb +36 -0
  402. data/test/selenium/selenium-server.jar +0 -0
  403. data/test/selenium/test_atc_browser.rb +121 -0
  404. data/test/selenium/test_atc_guidelines.rb +95 -0
  405. data/test/selenium/test_collect.rb +137 -0
  406. data/test/selenium/test_compare.rb +294 -0
  407. data/test/selenium/test_fachinfo.rb +128 -0
  408. data/test/selenium/test_feedback.rb +192 -0
  409. data/test/selenium/test_init.rb +64 -0
  410. data/test/selenium/test_limit.rb +304 -0
  411. data/test/selenium/test_login.rb +67 -0
  412. data/test/selenium/test_package.rb +516 -0
  413. data/test/selenium/test_patinfo.rb +128 -0
  414. data/test/selenium/test_product.rb +80 -0
  415. data/test/selenium/test_products.rb +141 -0
  416. data/test/selenium/test_search.rb +933 -0
  417. data/test/selenium/test_sequence.rb +513 -0
  418. data/test/selenium/unit.rb +190 -0
  419. data/test/stub/http_server.rb +144 -0
  420. data/test/stub/model.rb +173 -0
  421. data/test/suite.rb +15 -0
  422. data/test/test_model.rb +83 -0
  423. data/test/util/test_code.rb +74 -0
  424. data/test/util/test_ipn.rb +117 -0
  425. data/test/util/test_mail.rb +85 -0
  426. data/test/util/test_multilingual.rb +97 -0
  427. data/test/util/test_server.rb +94 -0
  428. data/test/util/test_updater.rb +130 -0
  429. data/test/util/test_ydim.rb +115 -0
  430. data/test/util/test_yus.rb +79 -0
  431. metadata +568 -0
@@ -0,0 +1,245 @@
1
+ #!/usr/bin/env ruby
2
+ # Html::View::Drugs::Admin::Package -- de.oddb.org -- 29.10.2007 -- hwyss@ywesee.com
3
+
4
+ require 'htmlgrid/errormessage'
5
+ require 'htmlgrid/inputcheckbox'
6
+ require 'htmlgrid/select'
7
+ require 'oddb/html/view/drugs/package'
8
+
9
+ module ODDB
10
+ module Html
11
+ module View
12
+ module Drugs
13
+ module Admin
14
+ class CompositionSelect < HtmlGrid::AbstractSelect
15
+ def selection(context)
16
+ lang = @session.language
17
+ @selected ||= (comp = @model.composition) && comp.to_s(lang)
18
+ res = []
19
+ @model.sequence.compositions.each_with_index { |composition, idx|
20
+ comp = composition.to_s(lang)
21
+ attribs = { "value" => idx }
22
+ attribs.store("selected", 1) if(comp == selected)
23
+ res << context.option(attribs) { comp }
24
+ }
25
+ res
26
+ end
27
+ end
28
+ class SequenceSelect < HtmlGrid::AbstractSelect
29
+ def compositions(model)
30
+ lang = @session.language
31
+ res = model.compositions.collect { |comp|
32
+ comp.active_agents.collect { |act|
33
+ [act.substance.name.send(lang), act.dose].join(' ')
34
+ }.join(', ')
35
+ }.join(' + ')
36
+ if(res.length > 72)
37
+ res[0,69] << '...'
38
+ else
39
+ res
40
+ end
41
+ end
42
+ def selection(context)
43
+ lang = @session.language
44
+ @selected ||= (seq = @model.sequence) && seq.uid
45
+ res = []
46
+ @model.product.sequences.each_with_index { |sequence, idx|
47
+ uid = sequence.uid
48
+ attribs = { "value" => uid }
49
+ attribs.store("selected", 1) if(uid == selected)
50
+ res << context.option(attribs) { compositions(sequence) }
51
+ }
52
+ res
53
+ end
54
+ end
55
+ class Parts < List
56
+ class << self
57
+ def input_text(*keys)
58
+ keys.each { |key|
59
+ define_method(key) { |model|
60
+ input = HtmlGrid::Input.new(name(key), model, @session, self)
61
+ input.value = model.send(key) if model
62
+ input
63
+ }
64
+ }
65
+ end
66
+ end
67
+ COMPONENTS = {
68
+ [0,0] => :delete,
69
+ [1,0] => :multi,
70
+ [2,0] => "x",
71
+ [3,0] => :size,
72
+ [4,0] => :unit,
73
+ [5,0] => "à",
74
+ [6,0] => :quantity,
75
+ [7,0] => :composition,
76
+ }
77
+ COMPONENT_CSS_MAP = {
78
+ [1,0,3] => "short right",
79
+ [6,0] => "short right",
80
+ }
81
+ CSS_ID = 'parts'
82
+ DEFAULT_CLASS = HtmlGrid::InputText
83
+ EMPTY_LIST = true
84
+ OMIT_HEADER = true
85
+ input_text :multi, :size, :unit, :quantity
86
+ def add(model)
87
+ if(@model.empty? || @model.last.saved?)
88
+ link = HtmlGrid::Link.new(:plus, model, @session, self)
89
+ link.set_attribute('title', @lookandfeel.lookup(:create_part))
90
+ link.css_class = 'create square'
91
+ args = [ :code_cid, @session.state.model.code(:cid) ]
92
+ url = @session.lookandfeel.event_url(:ajax_create_part, args)
93
+ link.onclick = "replace_element('#{css_id}', '#{url}');"
94
+ link
95
+ end
96
+ end
97
+ def compose_footer(offset)
98
+ if(@model.empty? || @model.last.saved?)
99
+ @grid.add add(@model), *offset
100
+ end
101
+ end
102
+ def composition(model)
103
+ CompositionSelect.new(name("composition"), model, @session, self)
104
+ end
105
+ def delete(model)
106
+ if(@model.size > 1)
107
+ link = HtmlGrid::Link.new(:minus, model, @session, self)
108
+ link.set_attribute('title', @lookandfeel.lookup(:delete))
109
+ link.css_class = 'delete square'
110
+ args = [ :code_cid, @session.state.model.code(:cid), :part, @list_index ]
111
+ url = @session.lookandfeel.event_url(:ajax_delete_part, args)
112
+ link.onclick = "replace_element('#{css_id}', '#{url}');"
113
+ link
114
+ end
115
+ end
116
+ def name(part)
117
+ "#{part}[#@list_index]"
118
+ end
119
+ def unsaved(model)
120
+ @lookandfeel.lookup(:unsaved) unless model.saved?
121
+ end
122
+ end
123
+ class PackageInnerForm < Drugs::PackageInnerComposite
124
+ class << self
125
+ def input_text(*keys)
126
+ keys.each { |key|
127
+ define_method(key) { |model|
128
+ input = HtmlGrid::InputText.new(key, model, @session, self)
129
+ value = super
130
+ if(value.is_a? HtmlGrid::Component)
131
+ input.value = value.value
132
+ else
133
+ input.value = value
134
+ end
135
+ if input.value.to_s.empty?
136
+ input.value = @session.user_input key
137
+ end
138
+ input
139
+ }
140
+ }
141
+ end
142
+ end
143
+ include HtmlGrid::ErrorMessage
144
+ COMPONENTS = {
145
+ [0,0] => :name,
146
+ ## google's third parameter ensures that its link is written before
147
+ # the name - this allows a float: right in css to work correctly
148
+ [1,0,0] => :google,
149
+ [2,0] => :code_cid,
150
+ [0,1] => :company,
151
+ [2,1] => :atc,
152
+ [0,2] => :price_exfactory,
153
+ [2,2] => :price_public,
154
+ [2,3] => :price_festbetrag,
155
+ [0,4] => :code_festbetragsstufe,
156
+ [2,4] => :code_festbetragsgruppe,
157
+ [0,5] => :code_zuzahlungsbefreit,
158
+ [2,5] => :sequence,
159
+ [0,6] => :code_prescription,
160
+ [1,7,0] => :submit,
161
+ [1,7,1] => :delete,
162
+ }
163
+ SYMBOL_MAP = {
164
+ :name => HtmlGrid::InputText,
165
+ }
166
+ input_text :code_cid, :price_public, :price_festbetrag, :code_festbetragsstufe,
167
+ :code_festbetragsgruppe, :equivalence_factor, :price_exfactory
168
+ def init
169
+ super
170
+ error_message
171
+ end
172
+ def code_boolean(model, key)
173
+ box = HtmlGrid::InputCheckbox.new("code_#{key}", model, @session, self)
174
+ box.set_attribute('checked', (code = model.code(key)) && code.value)
175
+ box
176
+ end
177
+ def delete(model)
178
+ button = HtmlGrid::Button.new(:delete, model, @session, self)
179
+ script = "this.form.event.value = 'delete'; this.form.submit();"
180
+ if(model.saved?)
181
+ confirm = @lookandfeel.lookup(:delete_package_confirm)
182
+ script = "if(confirm('#{confirm}')) { #{script} };"
183
+ end
184
+ button.onclick = script
185
+ button
186
+ end
187
+ def sequence(model)
188
+ if model.product
189
+ SequenceSelect.new("sequence", model, @session, self)
190
+ end
191
+ end
192
+ end
193
+ class PackageForm < HtmlGrid::DivComposite
194
+ include HtmlGrid::FormMethods
195
+ EVENT = :update
196
+ COMPONENTS = {
197
+ [0,0] => PackageInnerForm,
198
+ [0,1] => :parts,
199
+ [0,2] => :parts_form
200
+ }
201
+ CSS_MAP = { 1 => 'divider' }
202
+ def parts(model)
203
+ key = model.parts.size > 1 ? :parts : :package_and_substances
204
+ @lookandfeel.lookup(key)
205
+ end
206
+ def parts_form(model)
207
+ Parts.new(model.parts, @session, self)
208
+ end
209
+ end
210
+ class PackageComposite < Drugs::PackageComposite
211
+ COMPONENTS = {
212
+ [0,0] => :snapback,
213
+ [0,1] => InlineSearch,
214
+ [0,2] => :name,
215
+ [0,3] => PackageForm,
216
+ }
217
+ CSS_MAP = { 0 => 'before-searchbar' }
218
+ def breadcrumbs(model)
219
+ div = @lookandfeel.lookup(:breadcrumb_divider)
220
+ steps = []
221
+ if sequence = model.sequence
222
+ seq = HtmlGrid::Link.new(:sequence, model, @session, self)
223
+ seq.href = @lookandfeel._event_url(:sequence, :uid => sequence.uid)
224
+ steps = [ seq, div ]
225
+ end
226
+ if product = model.product
227
+ prd = HtmlGrid::Link.new(:product, model, @session, self)
228
+ prd.href = @lookandfeel._event_url(:product, :uid => product.uid)
229
+ steps = [ prd, div ].concat steps
230
+ end
231
+ steps.concat super
232
+ end
233
+ def partline(part, idx)
234
+ # here in the Admin-Section we want the parts displayed differently, through Parts
235
+ end
236
+ end
237
+ class Package < Drugs::Package
238
+ CONTENT = PackageComposite
239
+ JAVASCRIPTS = ['admin']
240
+ end
241
+ end
242
+ end
243
+ end
244
+ end
245
+ end
@@ -0,0 +1,104 @@
1
+ #!/usr/bin/env ruby
2
+ # Html::View::Drugs::Admin::Package -- de.oddb.org -- 04.04.2008 -- hwyss@ywesee.com
3
+
4
+ require 'htmlgrid/errormessage'
5
+ require 'htmlgrid/form'
6
+ require 'oddb/html/view/drugs/template'
7
+ require 'oddb/html/view/list'
8
+
9
+ module ODDB
10
+ module Html
11
+ module View
12
+ module Drugs
13
+ module Admin
14
+ class Sequences < View::List
15
+ include HtmlGrid::FormMethods
16
+ COMPONENTS = {
17
+ [0,0] => :uid,
18
+ [1,0] => :compositions,
19
+ }
20
+ EVENT = :new_sequence
21
+ OMIT_HEADER = true
22
+ def compositions(model)
23
+ lang = @session.language
24
+ model.compositions.collect { |comp|
25
+ comp.active_agents.collect { |act|
26
+ [act.substance.name.send(lang), act.dose].join(' ')
27
+ }.join(', ')
28
+ }.join(' + ')
29
+ end
30
+ def compose_footer(offset)
31
+ @grid.add submit(@model), *offset
32
+ end
33
+ def hidden_fields(context)
34
+ super << context.hidden("uid", @container.model.uid)
35
+ end
36
+ def uid(model)
37
+ link = HtmlGrid::Link.new(:uid, model, @session, self)
38
+ link.href = @lookandfeel._event_url(:sequence, :uid => model.uid)
39
+ link.value = model.uid
40
+ link
41
+ end
42
+ end
43
+ class ProductForm < HtmlGrid::Form
44
+ include HtmlGrid::ErrorMessage
45
+ COMPONENTS = {
46
+ [0,0] => :name,
47
+ [0,1] => :company,
48
+ [1,2] => :submit,
49
+ }
50
+ EVENT = :update
51
+ LABELS = true
52
+ LEGACY_INTERFACE = false
53
+ SYMBOL_MAP = {
54
+ # Product@name is used to identify imported Products
55
+ # and should therefore not be modified
56
+ :name => HtmlGrid::Value,
57
+ }
58
+ def init
59
+ super
60
+ error_message
61
+ end
62
+ def hidden_fields(context)
63
+ super << context.hidden("uid", @model.uid)
64
+ end
65
+ end
66
+ class ProductComposite < HtmlGrid::DivComposite
67
+ include Snapback
68
+ COMPONENTS = {
69
+ [0,0] => :snapback,
70
+ [0,1] => InlineSearch,
71
+ [0,2] => :name,
72
+ [0,3] => ProductForm,
73
+ [0,4] => "sequences",
74
+ [0,5] => :sequences,
75
+ }
76
+ CSS_ID_MAP = [ 'snapback', 'result-search', 'title' ]
77
+ CSS_MAP = { 0 => 'before-searchbar', 4 => 'divider' }
78
+ def name(model)
79
+ name = [model.name]
80
+ if(company = model.company)
81
+ name.push(' - ', company.name)
82
+ end
83
+ name
84
+ end
85
+ def sequences(model)
86
+ Sequences.new(model.sequences, @session, self)
87
+ end
88
+ def snapback(model)
89
+ [ super, @lookandfeel.lookup(:breadcrumb_divider),
90
+ @lookandfeel.lookup(:product_details_for,
91
+ model.name.send(@session.language)) ]
92
+ end
93
+ end
94
+ class Product < Template
95
+ CONTENT = ProductComposite
96
+ def _title
97
+ super.push(@model.uid)
98
+ end
99
+ end
100
+ end
101
+ end
102
+ end
103
+ end
104
+ end
@@ -0,0 +1,305 @@
1
+ #!/usr/bin/env ruby
2
+ # Html::View::Drugs::Admin::Package -- de.oddb.org -- 04.04.2008 -- hwyss@ywesee.com
3
+
4
+ require 'htmlgrid/errormessage'
5
+ require 'htmlgrid/button'
6
+ require 'htmlgrid/divlist'
7
+ require 'htmlgrid/form'
8
+ require 'oddb/html/view/drugs/template'
9
+ require 'oddb/html/view/drugs/package'
10
+ require 'oddb/html/view/list'
11
+
12
+ module ODDB
13
+ module Html
14
+ module View
15
+ module Drugs
16
+ module Admin
17
+ class ActiveAgents < View::List
18
+ COMPONENTS = {
19
+ [0,0] => :delete,
20
+ [1,0] => :substance,
21
+ [2,0,0] => :dose,
22
+ [2,0,1] => :unsaved,
23
+ }
24
+ COMPONENT_CSS_MAP = { [2,0] => 'short right' }
25
+ DEFAULT_CLASS = HtmlGrid::InputText
26
+ EMPTY_LIST = true
27
+ STRIPED_BG = false
28
+ def add(model)
29
+ link = HtmlGrid::Link.new(:plus, model, @session, self)
30
+ link.set_attribute('title', @lookandfeel.lookup(:create_active_agent))
31
+ link.css_class = 'create square'
32
+ args = [ :uid, @session.state.model.uid, :composition, composition ]
33
+ url = @session.lookandfeel.event_url(:ajax_create_active_agent, args)
34
+ link.onclick = "replace_element('#{css_id}', '#{url}');"
35
+ link
36
+ end
37
+ def compose_footer(offset)
38
+ if(@model.empty? || @model.last)
39
+ @grid.add add(@model), *offset
40
+ offset[0] += 1
41
+ @grid.add delete_composition(@model), *offset
42
+ @grid.add_style 'right', *offset
43
+ @grid.set_colspan offset.at(0), offset.at(1)
44
+ end
45
+ end
46
+ def compose_header(offset)
47
+ comp = if act = @model.first
48
+ act.composition
49
+ end
50
+ input = galenic_form(comp)
51
+ label = HtmlGrid::SimpleLabel.new(:galenic_form, input, @session, self)
52
+ pos = *offset.dup
53
+ pos[0] += 1
54
+ @grid.add [label, input], *pos
55
+ pos.push 2
56
+ @grid.set_colspan *pos
57
+ offset[1] += 1
58
+ offset
59
+ end
60
+ def composition
61
+ @container ? @container.list_index : @session.user_input(:composition)
62
+ end
63
+ def css_id
64
+ @css_id ||= "active-agents-#{composition}"
65
+ end
66
+ def delete(model)
67
+ unless(@model.first.nil?)
68
+ link = HtmlGrid::Link.new(:minus, model, @session, self)
69
+ link.set_attribute('title', @lookandfeel.lookup(:delete))
70
+ link.css_class = 'delete square'
71
+ args = [ :uid, @session.state.model.uid, :composition, composition,
72
+ :active_agent, @list_index ]
73
+ url = @session.lookandfeel.event_url(:ajax_delete_active_agent, args)
74
+ link.onclick = "replace_element('#{css_id}', '#{url}');"
75
+ link
76
+ end
77
+ end
78
+ def delete_composition(model)
79
+ link = HtmlGrid::Link.new(:delete_composition, model, @session, self)
80
+ link.css_class = 'ajax'
81
+ args = [ :uid, @session.state.model.uid, :composition, composition ]
82
+ url = @session.lookandfeel.event_url(:ajax_delete_composition, args)
83
+ link.onclick = "replace_element('composition-list', '#{url}');"
84
+ link
85
+ end
86
+ def dose(model)
87
+ input = HtmlGrid::InputText.new(name("dose"), model, @session, self)
88
+ input.value = model.dose.to_s if model
89
+ input
90
+ end
91
+ def galenic_form(model)
92
+ input = HtmlGrid::InputText.new("galenic_form[#{composition}]",
93
+ model, @session, self)
94
+ if model && gf = model.galenic_form
95
+ input.value = gf.description.send @session.language
96
+ end
97
+ input
98
+ end
99
+ def name(part)
100
+ "#{part}[#{composition}][#@list_index]"
101
+ end
102
+ def substance(model)
103
+ input = HtmlGrid::InputText.new(name("substance"), model, @session, self)
104
+ input.value = model.substance.name.send(@session.language) if model
105
+ input
106
+ end
107
+ def unsaved(model)
108
+ @lookandfeel.lookup(:unsaved) if model.nil?
109
+ end
110
+ end
111
+ class CompositionList < HtmlGrid::DivList
112
+ COMPONENTS = { [0,0] => :composition }
113
+ OFFSET_STEP = [1,0]
114
+ OMIT_HEADER = true
115
+ attr_reader :list_index
116
+ def add(model)
117
+ link = HtmlGrid::Link.new(:create_composition, model, @session, self)
118
+ link.css_class = 'ajax'
119
+ args = [ :uid, @session.state.model.uid ]
120
+ url = @session.lookandfeel.event_url(:ajax_create_composition, args)
121
+ link.onclick = "replace_element('composition-list', '#{url}');"
122
+ link
123
+ end
124
+ def compose
125
+ super
126
+ comp = @model.last
127
+ @grid.push [add(@model)] if comp.nil? || !comp.active_agents.compact.empty?
128
+ end
129
+ def composition(model)
130
+ ActiveAgents.new(model.active_agents, @session, self)
131
+ end
132
+ end
133
+ class Compositions < HtmlGrid::DivComposite
134
+ COMPONENTS = { [0,0] => CompositionList }
135
+ CSS_ID = 'composition-list'
136
+ end
137
+ class Packages < View::List
138
+ include HtmlGrid::FormMethods
139
+ include PackageMethods
140
+ COMPONENTS = {
141
+ [0,0] => :pzn,
142
+ [1,0] => :name,
143
+ [2,0] => :size,
144
+ }
145
+ EVENT = :new_package
146
+ OMIT_HEADER = true
147
+ def compose_footer(offset)
148
+ @grid.add submit(@model), *offset
149
+ end
150
+ def hidden_fields(context)
151
+ super << context.hidden("uid", @container.model.uid)
152
+ end
153
+ def pzn(model)
154
+ code = model.code(:cid)
155
+ link = HtmlGrid::Link.new(:cid, model, @session, self)
156
+ link.href = @lookandfeel._event_url(:package, :pzn => code)
157
+ link.value = code
158
+ link
159
+ end
160
+ end
161
+ class SequenceInnerForm < HtmlGrid::Composite
162
+ include HtmlGrid::ErrorMessage
163
+ COLSPAN_MAP = {
164
+ [1,3] => 3,
165
+ [1,4] => 3,
166
+ }
167
+ COMPONENTS = {
168
+ [0,0] => :atc,
169
+ [2,0] => :show_atc_name,
170
+ [0,1] => :registration,
171
+ [1,2,0] => :fachinfo_link,
172
+ [1,2,1] => :patinfo_link,
173
+ [0,3] => :fachinfo_url,
174
+ [0,4] => :patinfo_url,
175
+ [1,5,0] => :submit,
176
+ [1,5,1] => :delete,
177
+ }
178
+ COMPONENT_CSS_MAP = {
179
+ [1,3] => 'url',
180
+ [1,4] => 'url',
181
+ }
182
+ LABELS = true
183
+ LEGACY_INTERFACE = false
184
+ def init
185
+ if(@session.errors.any? { |err| err.message == "e_unknown_atc" })
186
+ components.store([2,0], :atc_name)
187
+ end
188
+ super
189
+ error_message
190
+ end
191
+ def atc_name(model)
192
+ HtmlGrid::InputText.new(:atc_name, model, @session, self)
193
+ end
194
+ def delete(model)
195
+ button = HtmlGrid::Button.new(:delete, model, @session, self)
196
+ script = "this.form.event.value = 'delete'; this.form.submit();"
197
+ if(model.saved?)
198
+ confirm = @lookandfeel.lookup(:delete_sequence_confirm)
199
+ script = "if(confirm('#{confirm}')) { #{script} };"
200
+ end
201
+ button.onclick = script
202
+ button
203
+ end
204
+ def fachinfo_link(model)
205
+ url = if model.respond_to?(:fachinfo) \
206
+ && model.fachinfo.send(@session.language)
207
+ @lookandfeel._event_url(:fachinfo, [:uid, model.uid])
208
+ elsif model.respond_to?(:fachinfo_url)
209
+ model.fachinfo_url
210
+ end
211
+ if url
212
+ link = HtmlGrid::Link.new(:square_fachinfo, model, @session, self)
213
+ link.css_class = 'square fachinfo'
214
+ link.href = url
215
+ link
216
+ end
217
+ end
218
+ def patinfo_link(model)
219
+ url = if model.respond_to?(:patinfo) && model.patinfo.send(@session.language)
220
+ @lookandfeel._event_url(:patinfo, [:uid, model.uid])
221
+ elsif model.respond_to?(:patinfo_url)
222
+ model.patinfo_url
223
+ end
224
+ if url
225
+ link = HtmlGrid::Link.new(:square_patinfo, model, @session, self)
226
+ link.css_class = 'square patinfo'
227
+ link.href = url
228
+ link
229
+ end
230
+ end
231
+ def show_atc_name(model)
232
+ if(atc = model.atc)
233
+ value = HtmlGrid::Value.new(:atc_name, atc, @session, self)
234
+ value.value = atc.name.de
235
+ value
236
+ end
237
+ end
238
+ end
239
+ class SequenceForm < HtmlGrid::DivForm
240
+ COMPONENTS = {
241
+ [0,0] => SequenceInnerForm,
242
+ [0,1] => "compositions",
243
+ [0,2] => :compositions,
244
+ }
245
+ CSS_ID_MAP = { 2 => 'compositions' }
246
+ CSS_MAP = { 1 => 'divider' }
247
+ EVENT = :update
248
+ def compositions(model)
249
+ Compositions.new(model.compositions, @session, self)
250
+ end
251
+ def hidden_fields(context)
252
+ super << context.hidden("uid", @model.uid)
253
+ end
254
+ end
255
+ class SequenceComposite < HtmlGrid::DivComposite
256
+ include Snapback
257
+ COMPONENTS = {
258
+ [0,0] => :snapback,
259
+ [0,1] => InlineSearch,
260
+ [0,2] => :name,
261
+ [0,3] => SequenceForm,
262
+ [0,4] => "packages_admin",
263
+ [0,5] => :packages,
264
+ }
265
+ CSS_ID_MAP = [ 'snapback', 'result-search', 'title' ]
266
+ CSS_MAP = { 0 => 'before-searchbar', 4 => 'divider' }
267
+ def name(model)
268
+ lang = @session.language
269
+ name = [model.cascading_name(lang)]
270
+ if(company = model.company)
271
+ name.push(' - ', company.name.send(lang))
272
+ end
273
+ name
274
+ end
275
+ def packages(model)
276
+ Packages.new(model.packages, @session, self) if(@model.saved?)
277
+ end
278
+ def snapback(model)
279
+ div = @lookandfeel.lookup(:breadcrumb_divider)
280
+ steps = [ super ]
281
+ if product = model.product
282
+ prd = HtmlGrid::Link.new(:product, model, @session, self)
283
+ prd.href = @lookandfeel._event_url(:product, :uid => product.uid)
284
+ steps.push div, prd
285
+ end
286
+ steps.push div, @lookandfeel.lookup(:sequence_details_for,
287
+ model.cascading_name(@session.language))
288
+ end
289
+ end
290
+ class Sequence < Template
291
+ CONTENT = SequenceComposite
292
+ JAVASCRIPTS = ['admin']
293
+ def _title
294
+ if @model.saved?
295
+ super.push(@model.uid)
296
+ else
297
+ super.push(@lookandfeel.lookup(:new_sequence))
298
+ end
299
+ end
300
+ end
301
+ end
302
+ end
303
+ end
304
+ end
305
+ end