sbf 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +3 -0
- data/Rakefile +21 -0
- data/app/assets/javascripts/application.js +15 -0
- data/app/assets/javascripts/map.js +665 -0
- data/app/assets/javascripts/onemap.js +1928 -0
- data/app/assets/javascripts/units.js.coffee +3 -0
- data/app/assets/stylesheets/application.css +13 -0
- data/app/assets/stylesheets/rails_admin/custom/theming.css.scss +13 -0
- data/app/assets/stylesheets/scaffolds.css.scss +69 -0
- data/app/assets/stylesheets/units.css.scss +3 -0
- data/app/controllers/application_controller.rb +5 -0
- data/app/controllers/buses_controller.rb +5 -0
- data/app/controllers/units_controller.rb +74 -0
- data/app/helpers/application_helper.rb +2 -0
- data/app/helpers/units_helper.rb +2 -0
- data/app/models/ability.rb +39 -0
- data/app/models/block.rb +163 -0
- data/app/models/estate.rb +70 -0
- data/app/models/quota.rb +80 -0
- data/app/models/settings.rb +4 -0
- data/app/models/unit.rb +121 -0
- data/app/views/blocks/_map.html.erb +37 -0
- data/app/views/kaminari/twitter-bootstrap/_first_page.html.haml +8 -0
- data/app/views/kaminari/twitter-bootstrap/_last_page.html.haml +8 -0
- data/app/views/kaminari/twitter-bootstrap/_paginator.html.haml +19 -0
- data/app/views/layouts/application.html.erb +14 -0
- data/app/views/layouts/rails_admin/application.html.haml +31 -0
- data/app/views/units/_form.html.erb +37 -0
- data/app/views/units/edit.html.erb +6 -0
- data/app/views/units/index.html.erb +30 -0
- data/app/views/units/index.json.jbuilder +4 -0
- data/app/views/units/new.html.erb +5 -0
- data/app/views/units/show.html.erb +29 -0
- data/app/views/units/show.json.jbuilder +1 -0
- data/config/initializers/rails_admin.rb +203 -0
- data/config/routes.rb +3 -0
- data/db/migrate/20130721172422_create_blocks.rb +17 -0
- data/db/migrate/20130721173925_create_units.rb +16 -0
- data/db/migrate/20130721205526_create_estates.rb +12 -0
- data/db/migrate/20130722004104_add_estate_id_to_block.rb +5 -0
- data/db/migrate/20130722004318_update_estate_id_for_blocks.rb +13 -0
- data/db/migrate/20130722010900_remove_estate_from_blocks.rb +5 -0
- data/db/migrate/20130722105351_fix_numeric_columns.rb +39 -0
- data/db/migrate/20130910145656_create_quota.rb +16 -0
- data/db/migrate/20130910151554_populate_quota_table.rb +35 -0
- data/db/migrate/20130912181314_remove_ethnic_quota_from_blocks.rb +5 -0
- data/db/schema.rb +68 -0
- data/lib/kml/busstops-kml-105.kml +156 -0
- data/lib/kml/busstops-kml-106.kml +368 -0
- data/lib/kml/busstops-kml-108.kml +156 -0
- data/lib/kml/busstops-kml-135.kml +181 -0
- data/lib/kml/busstops-kml-136.kml +792 -0
- data/lib/kml/busstops-kml-137.kml +675 -0
- data/lib/kml/busstops-kml-138.kml +634 -0
- data/lib/kml/busstops-kml-139.kml +323 -0
- data/lib/kml/busstops-kml-140.kml +156 -0
- data/lib/kml/busstops-kml-165.kml +207 -0
- data/lib/kml/busstops-kml-166.kml +622 -0
- data/lib/kml/busstops-kml-167.kml +554 -0
- data/lib/kml/busstops-kml-168.kml +840 -0
- data/lib/kml/busstops-kml-169.kml +1401 -0
- data/lib/kml/busstops-kml-170.kml +1171 -0
- data/lib/kml/busstops-kml-171.kml +225 -0
- data/lib/kml/busstops-kml-187.kml +225 -0
- data/lib/kml/busstops-kml-188.kml +179 -0
- data/lib/kml/busstops-kml-196.kml +646 -0
- data/lib/kml/busstops-kml-197.kml +662 -0
- data/lib/kml/busstops-kml-198.kml +1005 -0
- data/lib/kml/busstops-kml-199.kml +1052 -0
- data/lib/kml/busstops-kml-200.kml +1331 -0
- data/lib/kml/busstops-kml-201.kml +1351 -0
- data/lib/kml/busstops-kml-218.kml +248 -0
- data/lib/kml/busstops-kml-219.kml +179 -0
- data/lib/kml/busstops-kml-220.kml +248 -0
- data/lib/kml/busstops-kml-221.kml +225 -0
- data/lib/kml/busstops-kml-225.kml +179 -0
- data/lib/kml/busstops-kml-226.kml +363 -0
- data/lib/kml/busstops-kml-227.kml +849 -0
- data/lib/kml/busstops-kml-228.kml +1015 -0
- data/lib/kml/busstops-kml-229.kml +759 -0
- data/lib/kml/busstops-kml-230.kml +557 -0
- data/lib/kml/busstops-kml-231.kml +998 -0
- data/lib/kml/busstops-kml-232.kml +2153 -0
- data/lib/kml/busstops-kml-233.kml +498 -0
- data/lib/kml/busstops-kml-234.kml +502 -0
- data/lib/kml/busstops-kml-235.kml +249 -0
- data/lib/kml/busstops-kml-249.kml +248 -0
- data/lib/kml/busstops-kml-250.kml +179 -0
- data/lib/kml/busstops-kml-251.kml +455 -0
- data/lib/kml/busstops-kml-252.kml +409 -0
- data/lib/kml/busstops-kml-253.kml +570 -0
- data/lib/kml/busstops-kml-254.kml +202 -0
- data/lib/kml/busstops-kml-256.kml +363 -0
- data/lib/kml/busstops-kml-257.kml +536 -0
- data/lib/kml/busstops-kml-258.kml +515 -0
- data/lib/kml/busstops-kml-259.kml +774 -0
- data/lib/kml/busstops-kml-260.kml +536 -0
- data/lib/kml/busstops-kml-261.kml +738 -0
- data/lib/kml/busstops-kml-262.kml +783 -0
- data/lib/kml/busstops-kml-263.kml +1044 -0
- data/lib/kml/busstops-kml-264.kml +543 -0
- data/lib/kml/busstops-kml-265.kml +624 -0
- data/lib/kml/busstops-kml-266.kml +934 -0
- data/lib/kml/busstops-kml-267.kml +883 -0
- data/lib/kml/busstops-kml-268.kml +187 -0
- data/lib/kml/busstops-kml-280.kml +271 -0
- data/lib/kml/busstops-kml-281.kml +248 -0
- data/lib/kml/busstops-kml-282.kml +639 -0
- data/lib/kml/busstops-kml-283.kml +501 -0
- data/lib/kml/busstops-kml-284.kml +432 -0
- data/lib/kml/busstops-kml-285.kml +432 -0
- data/lib/kml/busstops-kml-286.kml +363 -0
- data/lib/kml/busstops-kml-287.kml +272 -0
- data/lib/kml/busstops-kml-288.kml +792 -0
- data/lib/kml/busstops-kml-289.kml +801 -0
- data/lib/kml/busstops-kml-290.kml +673 -0
- data/lib/kml/busstops-kml-291.kml +474 -0
- data/lib/kml/busstops-kml-292.kml +256 -0
- data/lib/kml/busstops-kml-293.kml +748 -0
- data/lib/kml/busstops-kml-294.kml +999 -0
- data/lib/kml/busstops-kml-295.kml +769 -0
- data/lib/kml/busstops-kml-296.kml +1051 -0
- data/lib/kml/busstops-kml-297.kml +904 -0
- data/lib/kml/busstops-kml-298.kml +731 -0
- data/lib/kml/busstops-kml-299.kml +644 -0
- data/lib/kml/busstops-kml-300.kml +274 -0
- data/lib/kml/busstops-kml-302.kml +156 -0
- data/lib/kml/busstops-kml-311.kml +179 -0
- data/lib/kml/busstops-kml-312.kml +455 -0
- data/lib/kml/busstops-kml-313.kml +639 -0
- data/lib/kml/busstops-kml-314.kml +639 -0
- data/lib/kml/busstops-kml-315.kml +708 -0
- data/lib/kml/busstops-kml-316.kml +394 -0
- data/lib/kml/busstops-kml-317.kml +363 -0
- data/lib/kml/busstops-kml-318.kml +830 -0
- data/lib/kml/busstops-kml-319.kml +370 -0
- data/lib/kml/busstops-kml-320.kml +560 -0
- data/lib/kml/busstops-kml-321.kml +432 -0
- data/lib/kml/busstops-kml-322.kml +365 -0
- data/lib/kml/busstops-kml-323.kml +529 -0
- data/lib/kml/busstops-kml-324.kml +549 -0
- data/lib/kml/busstops-kml-325.kml +717 -0
- data/lib/kml/busstops-kml-326.kml +645 -0
- data/lib/kml/busstops-kml-327.kml +908 -0
- data/lib/kml/busstops-kml-328.kml +467 -0
- data/lib/kml/busstops-kml-329.kml +876 -0
- data/lib/kml/busstops-kml-330.kml +795 -0
- data/lib/kml/busstops-kml-331.kml +442 -0
- data/lib/kml/busstops-kml-342.kml +271 -0
- data/lib/kml/busstops-kml-343.kml +547 -0
- data/lib/kml/busstops-kml-344.kml +317 -0
- data/lib/kml/busstops-kml-345.kml +557 -0
- data/lib/kml/busstops-kml-346.kml +777 -0
- data/lib/kml/busstops-kml-347.kml +777 -0
- data/lib/kml/busstops-kml-348.kml +762 -0
- data/lib/kml/busstops-kml-349.kml +668 -0
- data/lib/kml/busstops-kml-350.kml +366 -0
- data/lib/kml/busstops-kml-351.kml +301 -0
- data/lib/kml/busstops-kml-352.kml +367 -0
- data/lib/kml/busstops-kml-353.kml +271 -0
- data/lib/kml/busstops-kml-354.kml +225 -0
- data/lib/kml/busstops-kml-355.kml +611 -0
- data/lib/kml/busstops-kml-356.kml +842 -0
- data/lib/kml/busstops-kml-357.kml +838 -0
- data/lib/kml/busstops-kml-358.kml +808 -0
- data/lib/kml/busstops-kml-359.kml +786 -0
- data/lib/kml/busstops-kml-360.kml +680 -0
- data/lib/kml/busstops-kml-361.kml +785 -0
- data/lib/kml/busstops-kml-362.kml +815 -0
- data/lib/kml/busstops-kml-363.kml +389 -0
- data/lib/kml/busstops-kml-374.kml +432 -0
- data/lib/kml/busstops-kml-376.kml +205 -0
- data/lib/kml/busstops-kml-377.kml +889 -0
- data/lib/kml/busstops-kml-378.kml +936 -0
- data/lib/kml/busstops-kml-379.kml +577 -0
- data/lib/kml/busstops-kml-380.kml +794 -0
- data/lib/kml/busstops-kml-381.kml +619 -0
- data/lib/kml/busstops-kml-382.kml +716 -0
- data/lib/kml/busstops-kml-383.kml +204 -0
- data/lib/kml/busstops-kml-385.kml +271 -0
- data/lib/kml/busstops-kml-386.kml +795 -0
- data/lib/kml/busstops-kml-387.kml +875 -0
- data/lib/kml/busstops-kml-388.kml +598 -0
- data/lib/kml/busstops-kml-389.kml +648 -0
- data/lib/kml/busstops-kml-390.kml +297 -0
- data/lib/kml/busstops-kml-391.kml +519 -0
- data/lib/kml/busstops-kml-392.kml +426 -0
- data/lib/kml/busstops-kml-393.kml +959 -0
- data/lib/kml/busstops-kml-394.kml +250 -0
- data/lib/kml/busstops-kml-395.kml +187 -0
- data/lib/kml/busstops-kml-405.kml +248 -0
- data/lib/kml/busstops-kml-407.kml +277 -0
- data/lib/kml/busstops-kml-408.kml +670 -0
- data/lib/kml/busstops-kml-409.kml +1094 -0
- data/lib/kml/busstops-kml-410.kml +1009 -0
- data/lib/kml/busstops-kml-411.kml +880 -0
- data/lib/kml/busstops-kml-412.kml +988 -0
- data/lib/kml/busstops-kml-413.kml +396 -0
- data/lib/kml/busstops-kml-417.kml +615 -0
- data/lib/kml/busstops-kml-418.kml +869 -0
- data/lib/kml/busstops-kml-419.kml +1174 -0
- data/lib/kml/busstops-kml-420.kml +463 -0
- data/lib/kml/busstops-kml-421.kml +253 -0
- data/lib/kml/busstops-kml-422.kml +180 -0
- data/lib/kml/busstops-kml-423.kml +865 -0
- data/lib/kml/busstops-kml-424.kml +664 -0
- data/lib/kml/busstops-kml-425.kml +457 -0
- data/lib/kml/busstops-kml-426.kml +179 -0
- data/lib/kml/busstops-kml-438.kml +157 -0
- data/lib/kml/busstops-kml-439.kml +388 -0
- data/lib/kml/busstops-kml-440.kml +248 -0
- data/lib/kml/busstops-kml-441.kml +409 -0
- data/lib/kml/busstops-kml-442.kml +411 -0
- data/lib/kml/busstops-kml-443.kml +795 -0
- data/lib/kml/busstops-kml-444.kml +321 -0
- data/lib/kml/busstops-kml-447.kml +226 -0
- data/lib/kml/busstops-kml-448.kml +668 -0
- data/lib/kml/busstops-kml-449.kml +508 -0
- data/lib/kml/busstops-kml-450.kml +796 -0
- data/lib/kml/busstops-kml-451.kml +783 -0
- data/lib/kml/busstops-kml-452.kml +157 -0
- data/lib/kml/busstops-kml-454.kml +670 -0
- data/lib/kml/busstops-kml-455.kml +1211 -0
- data/lib/kml/busstops-kml-456.kml +496 -0
- data/lib/kml/busstops-kml-457.kml +220 -0
- data/lib/kml/busstops-kml-470.kml +248 -0
- data/lib/kml/busstops-kml-473.kml +434 -0
- data/lib/kml/busstops-kml-474.kml +433 -0
- data/lib/kml/busstops-kml-475.kml +405 -0
- data/lib/kml/busstops-kml-478.kml +271 -0
- data/lib/kml/busstops-kml-479.kml +780 -0
- data/lib/kml/busstops-kml-480.kml +604 -0
- data/lib/kml/busstops-kml-481.kml +676 -0
- data/lib/kml/busstops-kml-482.kml +603 -0
- data/lib/kml/busstops-kml-483.kml +501 -0
- data/lib/kml/busstops-kml-484.kml +179 -0
- data/lib/kml/busstops-kml-485.kml +317 -0
- data/lib/kml/busstops-kml-486.kml +460 -0
- data/lib/kml/busstops-kml-487.kml +887 -0
- data/lib/kml/busstops-kml-488.kml +210 -0
- data/lib/kml/busstops-kml-501.kml +455 -0
- data/lib/kml/busstops-kml-502.kml +317 -0
- data/lib/kml/busstops-kml-503.kml +317 -0
- data/lib/kml/busstops-kml-504.kml +411 -0
- data/lib/kml/busstops-kml-505.kml +461 -0
- data/lib/kml/busstops-kml-506.kml +544 -0
- data/lib/kml/busstops-kml-509.kml +256 -0
- data/lib/kml/busstops-kml-510.kml +869 -0
- data/lib/kml/busstops-kml-511.kml +1146 -0
- data/lib/kml/busstops-kml-512.kml +963 -0
- data/lib/kml/busstops-kml-513.kml +1307 -0
- data/lib/kml/busstops-kml-514.kml +437 -0
- data/lib/kml/busstops-kml-515.kml +363 -0
- data/lib/kml/busstops-kml-516.kml +599 -0
- data/lib/kml/busstops-kml-517.kml +1078 -0
- data/lib/kml/busstops-kml-518.kml +709 -0
- data/lib/kml/busstops-kml-519.kml +179 -0
- data/lib/kml/busstops-kml-520.kml +225 -0
- data/lib/kml/busstops-kml-532.kml +363 -0
- data/lib/kml/busstops-kml-534.kml +179 -0
- data/lib/kml/busstops-kml-535.kml +989 -0
- data/lib/kml/busstops-kml-536.kml +1196 -0
- data/lib/kml/busstops-kml-537.kml +631 -0
- data/lib/kml/busstops-kml-540.kml +346 -0
- data/lib/kml/busstops-kml-541.kml +984 -0
- data/lib/kml/busstops-kml-542.kml +256 -0
- data/lib/kml/busstops-kml-543.kml +496 -0
- data/lib/kml/busstops-kml-544.kml +855 -0
- data/lib/kml/busstops-kml-545.kml +612 -0
- data/lib/kml/busstops-kml-546.kml +225 -0
- data/lib/kml/busstops-kml-547.kml +645 -0
- data/lib/kml/busstops-kml-548.kml +363 -0
- data/lib/kml/busstops-kml-549.kml +386 -0
- data/lib/kml/busstops-kml-550.kml +225 -0
- data/lib/kml/busstops-kml-551.kml +271 -0
- data/lib/kml/busstops-kml-566.kml +436 -0
- data/lib/kml/busstops-kml-567.kml +461 -0
- data/lib/kml/busstops-kml-568.kml +253 -0
- data/lib/kml/busstops-kml-571.kml +241 -0
- data/lib/kml/busstops-kml-572.kml +630 -0
- data/lib/kml/busstops-kml-573.kml +430 -0
- data/lib/kml/busstops-kml-574.kml +625 -0
- data/lib/kml/busstops-kml-575.kml +1110 -0
- data/lib/kml/busstops-kml-576.kml +1082 -0
- data/lib/kml/busstops-kml-577.kml +205 -0
- data/lib/kml/busstops-kml-581.kml +735 -0
- data/lib/kml/busstops-kml-582.kml +248 -0
- data/lib/kml/busstops-kml-594.kml +179 -0
- data/lib/kml/busstops-kml-595.kml +179 -0
- data/lib/kml/busstops-kml-597.kml +436 -0
- data/lib/kml/busstops-kml-598.kml +458 -0
- data/lib/kml/busstops-kml-601.kml +179 -0
- data/lib/kml/busstops-kml-602.kml +389 -0
- data/lib/kml/busstops-kml-603.kml +157 -0
- data/lib/kml/busstops-kml-605.kml +456 -0
- data/lib/kml/busstops-kml-606.kml +298 -0
- data/lib/kml/busstops-kml-607.kml +792 -0
- data/lib/kml/busstops-kml-608.kml +463 -0
- data/lib/kml/busstops-kml-626.kml +248 -0
- data/lib/kml/busstops-kml-628.kml +157 -0
- data/lib/kml/busstops-kml-629.kml +501 -0
- data/lib/kml/busstops-kml-630.kml +340 -0
- data/lib/kml/busstops-kml-631.kml +249 -0
- data/lib/kml/busstops-kml-632.kml +202 -0
- data/lib/kml/busstops-kml-633.kml +319 -0
- data/lib/kml/busstops-kml-635.kml +225 -0
- data/lib/kml/busstops-kml-636.kml +317 -0
- data/lib/kml/busstops-kml-638.kml +667 -0
- data/lib/kml/busstops-kml-656.kml +156 -0
- data/lib/kml/busstops-kml-657.kml +271 -0
- data/lib/kml/busstops-kml-660.kml +432 -0
- data/lib/kml/busstops-kml-662.kml +227 -0
- data/lib/kml/busstops-kml-663.kml +271 -0
- data/lib/kml/busstops-kml-664.kml +202 -0
- data/lib/kml/busstops-kml-665.kml +718 -0
- data/lib/kml/busstops-kml-666.kml +179 -0
- data/lib/kml/busstops-kml-667.kml +206 -0
- data/lib/kml/busstops-kml-669.kml +225 -0
- data/lib/kml/busstops-kml-688.kml +271 -0
- data/lib/kml/busstops-kml-690.kml +179 -0
- data/lib/kml/busstops-kml-691.kml +496 -0
- data/lib/kml/busstops-kml-692.kml +179 -0
- data/lib/kml/busstops-kml-693.kml +271 -0
- data/lib/kml/busstops-kml-695.kml +363 -0
- data/lib/kml/busstops-kml-696.kml +842 -0
- data/lib/kml/busstops-kml-697.kml +265 -0
- data/lib/kml/busstops-kml-698.kml +179 -0
- data/lib/kml/busstops-kml-700.kml +156 -0
- data/lib/kml/busstops-kml-719.kml +294 -0
- data/lib/kml/busstops-kml-721.kml +319 -0
- data/lib/kml/busstops-kml-722.kml +460 -0
- data/lib/kml/busstops-kml-723.kml +843 -0
- data/lib/kml/busstops-kml-724.kml +989 -0
- data/lib/kml/busstops-kml-725.kml +297 -0
- data/lib/kml/busstops-kml-726.kml +447 -0
- data/lib/kml/busstops-kml-727.kml +942 -0
- data/lib/kml/busstops-kml-728.kml +179 -0
- data/lib/kml/busstops-kml-75.kml +156 -0
- data/lib/kml/busstops-kml-750.kml +271 -0
- data/lib/kml/busstops-kml-751.kml +225 -0
- data/lib/kml/busstops-kml-752.kml +271 -0
- data/lib/kml/busstops-kml-753.kml +180 -0
- data/lib/kml/busstops-kml-754.kml +887 -0
- data/lib/kml/busstops-kml-755.kml +1067 -0
- data/lib/kml/busstops-kml-756.kml +609 -0
- data/lib/kml/busstops-kml-757.kml +448 -0
- data/lib/kml/busstops-kml-758.kml +391 -0
- data/lib/kml/busstops-kml-785.kml +341 -0
- data/lib/kml/busstops-kml-786.kml +365 -0
- data/lib/kml/busstops-kml-787.kml +662 -0
- data/lib/kml/busstops-kml-788.kml +1180 -0
- data/lib/kml/busstops-kml-789.kml +180 -0
- data/lib/kml/busstops-kml-816.kml +179 -0
- data/lib/kml/busstops-kml-817.kml +179 -0
- data/lib/kml/busstops-kml-818.kml +478 -0
- data/lib/kml/busstops-kml-819.kml +604 -0
- data/lib/kml/busstops-kml-820.kml +318 -0
- data/lib/kml/busstops-kml-849.kml +503 -0
- data/lib/kml/busstops-kml-850.kml +157 -0
- data/lib/kml/busstops-kml-877.kml +156 -0
- data/lib/kml/busstops-kml-908.kml +156 -0
- data/lib/kml/busstops-kml-969.kml +156 -0
- data/lib/sbf.rb +6 -0
- data/lib/sbf/engine.rb +19 -0
- data/lib/sbf/version.rb +3 -0
- data/lib/tasks/sbf_tasks.rake +4 -0
- metadata +467 -0
@@ -0,0 +1 @@
|
|
1
|
+
json.extract! @unit, :no, :price, :area, :flat_type, :block_id, :created_at, :updated_at
|
@@ -0,0 +1,203 @@
|
|
1
|
+
# RailsAdmin config file. Generated on July 22, 2013 15:10
|
2
|
+
# See github.com/sferik/rails_admin for more informations
|
3
|
+
|
4
|
+
RailsAdmin.config do |config|
|
5
|
+
|
6
|
+
################ Global configuration ################
|
7
|
+
|
8
|
+
# Set the admin name here (optional second array element will appear in red). For example:
|
9
|
+
# config.main_app_name = ['Sbf2013', 'Admin']
|
10
|
+
# or for a more dynamic name:
|
11
|
+
# config.main_app_name = Proc.new { |controller| [Rails.application.engine_name.titleize, controller.params['action'].titleize] }
|
12
|
+
config.main_app_name = ['SBF', Rails.application.class.parent_name.split(/SBF/i).last.titleize]
|
13
|
+
# RailsAdmin may need a way to know who the current user is]
|
14
|
+
config.current_user_method {} # auto-generated
|
15
|
+
config.authenticate_with {}
|
16
|
+
config.authorize_with :cancan
|
17
|
+
|
18
|
+
# If you want to track changes on your models:
|
19
|
+
# config.audit_with :history, 'User'
|
20
|
+
|
21
|
+
# Or with a PaperTrail: (you need to install it first)
|
22
|
+
# config.audit_with :paper_trail, 'User'
|
23
|
+
|
24
|
+
# Display empty fields in show views:
|
25
|
+
config.compact_show_view = false
|
26
|
+
|
27
|
+
# Number of default rows per-page:
|
28
|
+
config.default_items_per_page = 50
|
29
|
+
|
30
|
+
# Exclude specific models (keep the others):
|
31
|
+
# config.excluded_models = ['Block', 'Estate', 'Unit']
|
32
|
+
|
33
|
+
# Include specific models (exclude the others):
|
34
|
+
# config.included_models = ['Block', 'Estate', 'Unit']
|
35
|
+
|
36
|
+
# Label methods for model instances:
|
37
|
+
# config.label_methods << :description # Default is [:name, :title]
|
38
|
+
|
39
|
+
# config.actions do
|
40
|
+
# index
|
41
|
+
# show
|
42
|
+
# update
|
43
|
+
# dashboard
|
44
|
+
# end
|
45
|
+
|
46
|
+
################ Model configuration ################
|
47
|
+
|
48
|
+
# Each model configuration can alternatively:
|
49
|
+
# - stay here in a `config.model 'ModelName' do ... end` block
|
50
|
+
# - go in the model definition file in a `rails_admin do ... end` block
|
51
|
+
|
52
|
+
# This is your choice to make:
|
53
|
+
# - This initializer is loaded once at startup (modifications will show up when restarting the application) but all RailsAdmin configuration would stay in one place.
|
54
|
+
# - Models are reloaded at each request in development mode (when modified), which may smooth your RailsAdmin development workflow.
|
55
|
+
|
56
|
+
|
57
|
+
# Now you probably need to tour the wiki a bit: https://github.com/sferik/rails_admin/wiki
|
58
|
+
# Anyway, here is how RailsAdmin saw your application's models when you ran the initializer:
|
59
|
+
|
60
|
+
|
61
|
+
|
62
|
+
### Block ###
|
63
|
+
|
64
|
+
# config.model 'Block' do
|
65
|
+
|
66
|
+
# # You can copy this to a 'rails_admin do ... end' block inside your block.rb model definition
|
67
|
+
|
68
|
+
# # Found associations:
|
69
|
+
|
70
|
+
# configure :estate, :belongs_to_association
|
71
|
+
# configure :units, :has_many_association
|
72
|
+
|
73
|
+
# # Found columns:
|
74
|
+
|
75
|
+
# configure :id, :integer
|
76
|
+
# configure :no, :string
|
77
|
+
# configure :street, :string
|
78
|
+
# configure :probable_date, :string
|
79
|
+
# configure :delivery_date, :string
|
80
|
+
# configure :lease_start, :string
|
81
|
+
# configure :ethnic_quota, :string
|
82
|
+
# configure :created_at, :datetime
|
83
|
+
# configure :updated_at, :datetime
|
84
|
+
# configure :estate_id, :integer # Hidden
|
85
|
+
|
86
|
+
# # Cross-section configuration:
|
87
|
+
|
88
|
+
# # object_label_method :name # Name of the method called for pretty printing an *instance* of ModelName
|
89
|
+
# # label 'My model' # Name of ModelName (smartly defaults to ActiveRecord's I18n API)
|
90
|
+
# # label_plural 'My models' # Same, plural
|
91
|
+
# # weight 0 # Navigation priority. Bigger is higher.
|
92
|
+
# # parent OtherModel # Set parent model for navigation. MyModel will be nested below. OtherModel will be on first position of the dropdown
|
93
|
+
# # navigation_label # Sets dropdown entry's name in navigation. Only for parents!
|
94
|
+
|
95
|
+
# # Section specific configuration:
|
96
|
+
|
97
|
+
# list do
|
98
|
+
# # filters [:id, :name] # Array of field names which filters should be shown by default in the table header
|
99
|
+
# # items_per_page 100 # Override default_items_per_page
|
100
|
+
# # sort_by :id # Sort column (default is primary key)
|
101
|
+
# # sort_reverse true # Sort direction (default is true for primary key, last created first)
|
102
|
+
# end
|
103
|
+
# show do; end
|
104
|
+
# edit do; end
|
105
|
+
# export do; end
|
106
|
+
# # also see the create, update, modal and nested sections, which override edit in specific cases (resp. when creating, updating, modifying from another model in a popup modal or modifying from another model nested form)
|
107
|
+
# # you can override a cross-section field configuration in any section with the same syntax `configure :field_name do ... end`
|
108
|
+
# # using `field` instead of `configure` will exclude all other fields and force the ordering
|
109
|
+
# end
|
110
|
+
|
111
|
+
|
112
|
+
### Estate ###
|
113
|
+
|
114
|
+
# config.model 'Estate' do
|
115
|
+
|
116
|
+
# # You can copy this to a 'rails_admin do ... end' block inside your estate.rb model definition
|
117
|
+
|
118
|
+
# # Found associations:
|
119
|
+
|
120
|
+
# configure :blocks, :has_many_association
|
121
|
+
# configure :units, :has_many_association
|
122
|
+
|
123
|
+
# # Found columns:
|
124
|
+
|
125
|
+
# configure :id, :integer
|
126
|
+
# configure :name, :string
|
127
|
+
# configure :total, :integer
|
128
|
+
# configure :created_at, :datetime
|
129
|
+
# configure :updated_at, :datetime
|
130
|
+
|
131
|
+
# # Cross-section configuration:
|
132
|
+
|
133
|
+
# # object_label_method :name # Name of the method called for pretty printing an *instance* of ModelName
|
134
|
+
# # label 'My model' # Name of ModelName (smartly defaults to ActiveRecord's I18n API)
|
135
|
+
# # label_plural 'My models' # Same, plural
|
136
|
+
# # weight 0 # Navigation priority. Bigger is higher.
|
137
|
+
# # parent OtherModel # Set parent model for navigation. MyModel will be nested below. OtherModel will be on first position of the dropdown
|
138
|
+
# # navigation_label # Sets dropdown entry's name in navigation. Only for parents!
|
139
|
+
|
140
|
+
# # Section specific configuration:
|
141
|
+
|
142
|
+
# list do
|
143
|
+
# # filters [:id, :name] # Array of field names which filters should be shown by default in the table header
|
144
|
+
# # items_per_page 100 # Override default_items_per_page
|
145
|
+
# # sort_by :id # Sort column (default is primary key)
|
146
|
+
# # sort_reverse true # Sort direction (default is true for primary key, last created first)
|
147
|
+
# end
|
148
|
+
# show do; end
|
149
|
+
# edit do; end
|
150
|
+
# export do; end
|
151
|
+
# # also see the create, update, modal and nested sections, which override edit in specific cases (resp. when creating, updating, modifying from another model in a popup modal or modifying from another model nested form)
|
152
|
+
# # you can override a cross-section field configuration in any section with the same syntax `configure :field_name do ... end`
|
153
|
+
# # using `field` instead of `configure` will exclude all other fields and force the ordering
|
154
|
+
# end
|
155
|
+
|
156
|
+
|
157
|
+
### Unit ###
|
158
|
+
|
159
|
+
# config.model 'Unit' do
|
160
|
+
|
161
|
+
# # You can copy this to a 'rails_admin do ... end' block inside your unit.rb model definition
|
162
|
+
|
163
|
+
# # Found associations:
|
164
|
+
|
165
|
+
# configure :block, :belongs_to_association
|
166
|
+
|
167
|
+
# # Found columns:
|
168
|
+
|
169
|
+
# configure :id, :integer
|
170
|
+
# configure :no, :string
|
171
|
+
# configure :price, :string
|
172
|
+
# configure :area, :string
|
173
|
+
# configure :flat_type, :string
|
174
|
+
# configure :block_id, :integer # Hidden
|
175
|
+
# configure :created_at, :datetime
|
176
|
+
# configure :updated_at, :datetime
|
177
|
+
|
178
|
+
# # Cross-section configuration:
|
179
|
+
|
180
|
+
# # object_label_method :name # Name of the method called for pretty printing an *instance* of ModelName
|
181
|
+
# # label 'My model' # Name of ModelName (smartly defaults to ActiveRecord's I18n API)
|
182
|
+
# # label_plural 'My models' # Same, plural
|
183
|
+
# # weight 0 # Navigation priority. Bigger is higher.
|
184
|
+
# # parent OtherModel # Set parent model for navigation. MyModel will be nested below. OtherModel will be on first position of the dropdown
|
185
|
+
# # navigation_label # Sets dropdown entry's name in navigation. Only for parents!
|
186
|
+
|
187
|
+
# # Section specific configuration:
|
188
|
+
|
189
|
+
# list do
|
190
|
+
# # filters [:id, :name] # Array of field names which filters should be shown by default in the table header
|
191
|
+
# # items_per_page 100 # Override default_items_per_page
|
192
|
+
# # sort_by :id # Sort column (default is primary key)
|
193
|
+
# # sort_reverse true # Sort direction (default is true for primary key, last created first)
|
194
|
+
# end
|
195
|
+
# show do; end
|
196
|
+
# edit do; end
|
197
|
+
# export do; end
|
198
|
+
# # also see the create, update, modal and nested sections, which override edit in specific cases (resp. when creating, updating, modifying from another model in a popup modal or modifying from another model nested form)
|
199
|
+
# # you can override a cross-section field configuration in any section with the same syntax `configure :field_name do ... end`
|
200
|
+
# # using `field` instead of `configure` will exclude all other fields and force the ordering
|
201
|
+
# end
|
202
|
+
|
203
|
+
end
|
data/config/routes.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
class CreateBlocks < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :blocks do |t|
|
4
|
+
t.string :no, null: false
|
5
|
+
t.string :street, null: false
|
6
|
+
t.string :estate, null: false
|
7
|
+
t.string :probable_date
|
8
|
+
t.string :delivery_date, null: false
|
9
|
+
t.string :lease_start, null: false
|
10
|
+
t.string :ethnic_quota, null: false
|
11
|
+
|
12
|
+
t.timestamps
|
13
|
+
end
|
14
|
+
|
15
|
+
add_index :blocks, [:no, :street], unique: true
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class CreateUnits < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :units do |t|
|
4
|
+
t.string :no, null: false
|
5
|
+
t.string :price, null: false
|
6
|
+
t.string :area, null: false
|
7
|
+
t.string :flat_type, null: false
|
8
|
+
t.references :block, index: true, null: false
|
9
|
+
|
10
|
+
t.timestamps
|
11
|
+
end
|
12
|
+
|
13
|
+
add_index :units, [:no, :block_id], unique: true
|
14
|
+
add_index :units, :flat_type
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class UpdateEstateIdForBlocks < ActiveRecord::Migration
|
2
|
+
def up
|
3
|
+
Estate.all.each do |e|
|
4
|
+
Block.where(estate: e.name).each { |r| r.update_attribute(:estate_id, e.id) }
|
5
|
+
end
|
6
|
+
end
|
7
|
+
|
8
|
+
def down
|
9
|
+
Estate.all.each do |e|
|
10
|
+
Block.where(estate_id: e.id).each { |r| r.update_attribute(:estate, e.name) }
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
class FixNumericColumns < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
reversible do |dir|
|
4
|
+
dir.up do
|
5
|
+
rename_column :units, :price, :price_str
|
6
|
+
rename_column :units, :area, :area_str
|
7
|
+
add_column :units, :price, :integer, null: false
|
8
|
+
add_column :units, :area, :integer, null: false
|
9
|
+
|
10
|
+
Unit.all.each do |u|
|
11
|
+
u.update_attributes({
|
12
|
+
price: u.price_str.gsub(/\D/,'').to_i,
|
13
|
+
area: u.area_str.gsub(/\D/,'').to_i
|
14
|
+
}, :without_protection => true)
|
15
|
+
end
|
16
|
+
|
17
|
+
remove_column :units, :price_str, :string
|
18
|
+
remove_column :units, :area_str, :string
|
19
|
+
end
|
20
|
+
|
21
|
+
dir.down do
|
22
|
+
add_column :units, :price_str, :string, null: false
|
23
|
+
add_column :units, :area_str, :string, null: false
|
24
|
+
|
25
|
+
Unit.all.each do |u|
|
26
|
+
u.update_attributes({
|
27
|
+
price_str: u.price.to_s,
|
28
|
+
area_str: u.area.to_s
|
29
|
+
}, :without_protection => true)
|
30
|
+
end
|
31
|
+
|
32
|
+
remove_column :units, :price, :integer
|
33
|
+
remove_column :units, :area, :integer
|
34
|
+
rename_column :units, :price_str, :price
|
35
|
+
rename_column :units, :area_str, :area
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class CreateQuota < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :quota do |t|
|
4
|
+
t.string :flat_type, null: false
|
5
|
+
t.integer :malay, null: false
|
6
|
+
t.integer :chinese, null: false
|
7
|
+
t.integer :others, null: false
|
8
|
+
t.references :block, index: true, null: false
|
9
|
+
|
10
|
+
t.timestamps
|
11
|
+
end
|
12
|
+
|
13
|
+
add_index :quota, [:flat_type, :block_id], unique: true
|
14
|
+
add_reference :units, :quota, index: true, null: false
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
class PopulateQuotaTable < ActiveRecord::Migration
|
2
|
+
def up
|
3
|
+
quota_fields = ['malay','chinese','others','flat_type','block_id']
|
4
|
+
|
5
|
+
def parse_quota(quota_str)
|
6
|
+
r = quota_str.match /(\d+)\D+(\d+)\D+(\d+)/
|
7
|
+
r[1..3].map(&:to_i)
|
8
|
+
end
|
9
|
+
|
10
|
+
# for checking the affected blocks and flat types:
|
11
|
+
# r3 = Block.joins(:units).joins(:estate)
|
12
|
+
# .select([:flat_type,'blocks.no',:street,:name,'count(distinct flat_type) as total'])
|
13
|
+
# .group(['blocks.no',:street,:name])
|
14
|
+
# .having('count(distinct flat_type) > 1')
|
15
|
+
# .order(['estates.name','units.flat_type','blocks.no',:street])
|
16
|
+
|
17
|
+
blocks = Block.joins(:units).select('*') #.select('blocks.id',:street,'blocks.no',:flat_type,:ethnic_quota).distinct
|
18
|
+
blocks.each do |block|
|
19
|
+
next if Quota.where(flat_type: block.flat_type, block_id: block.block_id).first
|
20
|
+
|
21
|
+
quota_info = parse_quota(block.ethnic_quota) << block.flat_type << block.block_id
|
22
|
+
quota_hash = Hash[quota_fields.zip(quota_info)]
|
23
|
+
|
24
|
+
puts quota_hash
|
25
|
+
|
26
|
+
quota = Quota.where(quota_hash).first_or_create
|
27
|
+
units = Unit.where(block_id: block.block_id, flat_type: block.flat_type)
|
28
|
+
units.update_all(['quota_id = ?', quota.id])
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def down
|
33
|
+
|
34
|
+
end
|
35
|
+
end
|
data/db/schema.rb
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
# This file is auto-generated from the current state of the database. Instead
|
3
|
+
# of editing this file, please use the migrations feature of Active Record to
|
4
|
+
# incrementally modify your database, and then regenerate this schema definition.
|
5
|
+
#
|
6
|
+
# Note that this schema.rb definition is the authoritative source for your
|
7
|
+
# database schema. If you need to create the application database on another
|
8
|
+
# system, you should be using db:schema:load, not running all the migrations
|
9
|
+
# from scratch. The latter is a flawed and unsustainable approach (the more migrations
|
10
|
+
# you'll amass, the slower it'll run and the greater likelihood for issues).
|
11
|
+
#
|
12
|
+
# It's strongly recommended that you check this file into your version control system.
|
13
|
+
|
14
|
+
ActiveRecord::Schema.define(version: 20130912181314) do
|
15
|
+
|
16
|
+
create_table "blocks", force: true do |t|
|
17
|
+
t.string "no", null: false
|
18
|
+
t.string "street", null: false
|
19
|
+
t.string "probable_date"
|
20
|
+
t.string "delivery_date", null: false
|
21
|
+
t.string "lease_start", null: false
|
22
|
+
t.datetime "created_at"
|
23
|
+
t.datetime "updated_at"
|
24
|
+
t.integer "estate_id", null: false
|
25
|
+
end
|
26
|
+
|
27
|
+
add_index "blocks", ["estate_id"], name: "index_blocks_on_estate_id", using: :btree
|
28
|
+
add_index "blocks", ["no", "street"], name: "index_blocks_on_no_and_street", unique: true, using: :btree
|
29
|
+
|
30
|
+
create_table "estates", force: true do |t|
|
31
|
+
t.string "name", null: false
|
32
|
+
t.integer "total", null: false
|
33
|
+
t.datetime "created_at"
|
34
|
+
t.datetime "updated_at"
|
35
|
+
end
|
36
|
+
|
37
|
+
add_index "estates", ["name"], name: "index_estates_on_name", unique: true, using: :btree
|
38
|
+
|
39
|
+
create_table "quota", force: true do |t|
|
40
|
+
t.string "flat_type", null: false
|
41
|
+
t.integer "malay", null: false
|
42
|
+
t.integer "chinese", null: false
|
43
|
+
t.integer "others", null: false
|
44
|
+
t.integer "block_id", null: false
|
45
|
+
t.datetime "created_at"
|
46
|
+
t.datetime "updated_at"
|
47
|
+
end
|
48
|
+
|
49
|
+
add_index "quota", ["block_id"], name: "index_quota_on_block_id", using: :btree
|
50
|
+
add_index "quota", ["flat_type", "block_id"], name: "index_quota_on_flat_type_and_block_id", unique: true, using: :btree
|
51
|
+
|
52
|
+
create_table "units", force: true do |t|
|
53
|
+
t.string "no", null: false
|
54
|
+
t.string "flat_type", null: false
|
55
|
+
t.integer "block_id", null: false
|
56
|
+
t.datetime "created_at"
|
57
|
+
t.datetime "updated_at"
|
58
|
+
t.integer "price", null: false
|
59
|
+
t.integer "area", null: false
|
60
|
+
t.integer "quota_id", null: false
|
61
|
+
end
|
62
|
+
|
63
|
+
add_index "units", ["block_id"], name: "index_units_on_block_id", using: :btree
|
64
|
+
add_index "units", ["flat_type"], name: "index_units_on_flat_type", using: :btree
|
65
|
+
add_index "units", ["no", "block_id"], name: "index_units_on_no_and_block_id", unique: true, using: :btree
|
66
|
+
add_index "units", ["quota_id"], name: "index_units_on_quota_id", using: :btree
|
67
|
+
|
68
|
+
end
|