pshq_engine 0.0.1

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 (261) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +7 -0
  3. data/.travis.yml +3 -0
  4. data/Gemfile +4 -0
  5. data/README.md +39 -0
  6. data/Rakefile +1 -0
  7. data/app/models/.keep +0 -0
  8. data/app/models/ability.rb +76 -0
  9. data/app/models/alert.rb +56 -0
  10. data/app/models/asset.rb +485 -0
  11. data/app/models/asset_assignment.rb +13 -0
  12. data/app/models/asset_image.rb +9 -0
  13. data/app/models/asset_repair_request.rb +167 -0
  14. data/app/models/asset_scan.rb +87 -0
  15. data/app/models/asset_ticket.rb +3 -0
  16. data/app/models/cancellation.rb +64 -0
  17. data/app/models/candidate.rb +127 -0
  18. data/app/models/certification.rb +4 -0
  19. data/app/models/concerns/.keep +0 -0
  20. data/app/models/depreciation_setting.rb +10 -0
  21. data/app/models/dispatch.rb +3 -0
  22. data/app/models/employee.rb +22 -0
  23. data/app/models/feedback.rb +24 -0
  24. data/app/models/history_email.rb +221 -0
  25. data/app/models/importfile.rb +6 -0
  26. data/app/models/job.rb +37 -0
  27. data/app/models/jobs_users.rb +18 -0
  28. data/app/models/lateness.rb +35 -0
  29. data/app/models/location.rb +4 -0
  30. data/app/models/manufacturer.rb +4 -0
  31. data/app/models/member.rb +65 -0
  32. data/app/models/member_device.rb +4 -0
  33. data/app/models/message.rb +33 -0
  34. data/app/models/note.rb +20 -0
  35. data/app/models/notification.rb +73 -0
  36. data/app/models/notification_user.rb +4 -0
  37. data/app/models/o_auth/base.rb +27 -0
  38. data/app/models/o_auth/facebook.rb +21 -0
  39. data/app/models/o_auth/google.rb +18 -0
  40. data/app/models/organization.rb +189 -0
  41. data/app/models/plan.rb +4 -0
  42. data/app/models/project.rb +5 -0
  43. data/app/models/project_payment.rb +4 -0
  44. data/app/models/recurring_time_off.rb +4 -0
  45. data/app/models/response.rb +23 -0
  46. data/app/models/role.rb +22 -0
  47. data/app/models/schedule.rb +228 -0
  48. data/app/models/setting.rb +25 -0
  49. data/app/models/shift.rb +364 -0
  50. data/app/models/shift_off.rb +4 -0
  51. data/app/models/shift_trade.rb +43 -0
  52. data/app/models/subdomain.rb +5 -0
  53. data/app/models/swap.rb +82 -0
  54. data/app/models/task.rb +26 -0
  55. data/app/models/template.rb +59 -0
  56. data/app/models/template_asset.rb +3 -0
  57. data/app/models/timeoff.rb +101 -0
  58. data/app/models/token.rb +22 -0
  59. data/app/models/transaction.rb +2 -0
  60. data/app/models/unavailable.rb +37 -0
  61. data/app/models/user.rb +392 -0
  62. data/app/models/user_notification_setting.rb +178 -0
  63. data/app/models/user_vacation_info.rb +22 -0
  64. data/app/models/vacation.rb +24 -0
  65. data/app/models/vendor.rb +130 -0
  66. data/app/models/vendor_rating.rb +7 -0
  67. data/bin/console +14 -0
  68. data/bin/setup +7 -0
  69. data/db/migrate/20140211085026_devise_create_users.rb +58 -0
  70. data/db/migrate/20140211093822_rolify_create_roles.rb +19 -0
  71. data/db/migrate/20140211124352_create_subdomains.rb +9 -0
  72. data/db/migrate/20140211175737_devise_invitable_add_to_users.rb +24 -0
  73. data/db/migrate/20140222020040_create_schedules.rb +13 -0
  74. data/db/migrate/20140222020246_create_jobs.rb +11 -0
  75. data/db/migrate/20140222020348_create_shifts.rb +17 -0
  76. data/db/migrate/20140222020425_create_organizations.rb +19 -0
  77. data/db/migrate/20140226070901_create_plans.rb +11 -0
  78. data/db/migrate/20140302152936_create_feedbacks.rb +12 -0
  79. data/db/migrate/20140302153059_create_swaps.rb +16 -0
  80. data/db/migrate/20140302153215_create_timeoffs.rb +19 -0
  81. data/db/migrate/20140302153302_create_cancellations.rb +13 -0
  82. data/db/migrate/20140306014858_create_candidates.rb +15 -0
  83. data/db/migrate/20140314041018_create_shift_trades.rb +15 -0
  84. data/db/migrate/20140314041210_create_notes.rb +11 -0
  85. data/db/migrate/20140314041313_create_latenesses.rb +11 -0
  86. data/db/migrate/20140314041351_create_vacations.rb +11 -0
  87. data/db/migrate/20140314041440_create_user_vacation_infos.rb +11 -0
  88. data/db/migrate/20140318072438_create_jobs_users.rb +10 -0
  89. data/db/migrate/20140325151307_create_tasks.rb +16 -0
  90. data/db/migrate/20140406040247_create_mailboxer.mailboxer_engine.rb +66 -0
  91. data/db/migrate/20140406040248_add_conversation_optout.mailboxer_engine.rb +15 -0
  92. data/db/migrate/20141015085628_create_alerts.rb +14 -0
  93. data/db/migrate/20141023104634_add_disabled_to_users.rb +5 -0
  94. data/db/migrate/20141024094518_add_is_viewed_to_schedules.rb +5 -0
  95. data/db/migrate/20141027091531_add_customer_id_to_users.rb +5 -0
  96. data/db/migrate/20141029124637_create_unavailables.rb +11 -0
  97. data/db/migrate/20141029151702_create_certifications.rb +10 -0
  98. data/db/migrate/20141105091745_add_reminder_time_to_shifts.rb +5 -0
  99. data/db/migrate/20141106054916_create_certifications_users.rb +10 -0
  100. data/db/migrate/20141106100123_add_birth_date_to_users.rb +5 -0
  101. data/db/migrate/20141106134815_add_allow_rolling_v_hrs_to_organizations.rb +5 -0
  102. data/db/migrate/20141107155319_create_recurring_time_offs.rb +12 -0
  103. data/db/migrate/20141111084845_add_termination_date_to_users.rb +5 -0
  104. data/db/migrate/20141111103759_add_requested_weekly_hours_to_users.rb +5 -0
  105. data/db/migrate/20141113094547_add_api_token_to_users.rb +5 -0
  106. data/db/migrate/20150105143729_create_templates.rb +9 -0
  107. data/db/migrate/20150105164236_add_coloumn_is_template.rb +5 -0
  108. data/db/migrate/20150106121306_add_org_id.rb +5 -0
  109. data/db/migrate/20150126070904_add_job_id_to_shifts.rb +6 -0
  110. data/db/migrate/20150203112955_add_time_zone_to_org.rb +5 -0
  111. data/db/migrate/20150204160711_add_show_owner_to_org.rb +5 -0
  112. data/db/migrate/20150210165627_add_training_hours_to_shift.rb +9 -0
  113. data/db/migrate/20150217131509_add_total_hours_to_schedules.rb +5 -0
  114. data/db/migrate/20150218094709_add_show_disable_users.rb +5 -0
  115. data/db/migrate/20150225134050_add_notes_to_cancellation.rb +9 -0
  116. data/db/migrate/20150226125524_add_unexcused_absence_note_to_cancellation.rb +9 -0
  117. data/db/migrate/20150226125811_add_cancel_shift_to_shifts.rb +9 -0
  118. data/db/migrate/20150302100542_add_picture_to_user.rb +9 -0
  119. data/db/migrate/20150304082219_add_priorty_to_user.rb +9 -0
  120. data/db/migrate/20150304094605_add_time_format_to_organization.rb +8 -0
  121. data/db/migrate/20150304142621_create_shift_offs.rb +15 -0
  122. data/db/migrate/20150306120726_add_shiftoff_to_shifts.rb +9 -0
  123. data/db/migrate/20150310103643_add_email_and_number_to_user.rb +11 -0
  124. data/db/migrate/20150311110055_add_one_sided_to_candidate.rb +9 -0
  125. data/db/migrate/20150318083934_add_notes_to_shift_trade.rb +9 -0
  126. data/db/migrate/20150408180855_add_column_status_to_unavailability.rb +8 -0
  127. data/db/migrate/20150409140324_create_assets.rb +35 -0
  128. data/db/migrate/20150409142753_create_vendors.rb +14 -0
  129. data/db/migrate/20150409144023_create_employees.rb +13 -0
  130. data/db/migrate/20150409144751_create_assign_assets.rb +16 -0
  131. data/db/migrate/20150409150449_create_asset_repair_requests.rb +19 -0
  132. data/db/migrate/20150409151023_create_dispatches.rb +13 -0
  133. data/db/migrate/20150409151329_create_vendor_ratings.rb +11 -0
  134. data/db/migrate/20150409151546_create_template_assets.rb +11 -0
  135. data/db/migrate/20150413101913_create_index_organization.rb +7 -0
  136. data/db/migrate/20150414153330_change_vendors.rb +16 -0
  137. data/db/migrate/20150420112003_add_name_to_users.rb +5 -0
  138. data/db/migrate/20150421074542_add_comment_to_ratings.rb +5 -0
  139. data/db/migrate/20150421131331_add_retire_column_to_assets.rb +5 -0
  140. data/db/migrate/20150422135600_add_attachment_avatar_to_assets.rb +11 -0
  141. data/db/migrate/20150422143242_create_importfiles.rb +8 -0
  142. data/db/migrate/20150422143301_add_attachment_avatar_to_importfiles.rb +11 -0
  143. data/db/migrate/20150423080234_change_retire_column.rb +5 -0
  144. data/db/migrate/20150423170953_add_attachment_avatar_to_vendors.rb +11 -0
  145. data/db/migrate/20150423225459_add_lockable.rb +7 -0
  146. data/db/migrate/20150427171842_create_asset_scans.rb +15 -0
  147. data/db/migrate/20150429211309_add_attachment_logo_to_organizations.rb +11 -0
  148. data/db/migrate/20150430074555_change_assets_table.rb +8 -0
  149. data/db/migrate/20150430235920_add_unique_email_index_to_users.rb +5 -0
  150. data/db/migrate/20150505104834_add_columntouser.rb +8 -0
  151. data/db/migrate/20150505140926_add_maintenance_cost_to_assets.rb +6 -0
  152. data/db/migrate/20150505142413_create_asset_images.rb +8 -0
  153. data/db/migrate/20150505152604_create_pg_search_documents.rb +17 -0
  154. data/db/migrate/20150506090012_change_employee.rb +12 -0
  155. data/db/migrate/20150506110441_add_status_to_asset_repair_requests.rb +6 -0
  156. data/db/migrate/20150507080738_change_phone_in_employees.rb +6 -0
  157. data/db/migrate/20150507101306_create_manufacturers.rb +12 -0
  158. data/db/migrate/20150507101446_remove.rb +9 -0
  159. data/db/migrate/20150507102211_add_index_manufacturer.rb +5 -0
  160. data/db/migrate/20150507104605_add_website_manufacturer.rb +5 -0
  161. data/db/migrate/20150507115535_change_refrence_manucaturer.rb +6 -0
  162. data/db/migrate/20150507150848_create_notifications.rb +9 -0
  163. data/db/migrate/20150507150855_create_notification_users.rb +10 -0
  164. data/db/migrate/20150508094912_add_landline_to_organization.rb +5 -0
  165. data/db/migrate/20150508143536_add_source_to_notifications.rb +7 -0
  166. data/db/migrate/20150508145048_add_postal_to_profile.rb +5 -0
  167. data/db/migrate/20150508162219_add_summary_to_notifications.rb +5 -0
  168. data/db/migrate/20150509220624_remove_responded_from_notifications.rb +5 -0
  169. data/db/migrate/20150509220625_add_responded_to_notifications.rb +5 -0
  170. data/db/migrate/20150509225608_change_columns_asset_repair_requests.rb +11 -0
  171. data/db/migrate/20150511105420_remove_avatar_asset.rb +6 -0
  172. data/db/migrate/20150514105700_add_unique_asset_id_to_asset.rb +5 -0
  173. data/db/migrate/20150515110042_add_deleted_at_in_assets.rb +6 -0
  174. data/db/migrate/20150515111410_add_deleted_at_vendors.rb +6 -0
  175. data/db/migrate/20150515113054_add_deleted_at_in_employee.rb +6 -0
  176. data/db/migrate/20150515142228_create_locations.rb +16 -0
  177. data/db/migrate/20150515142242_add_locations_to_assets.rb +5 -0
  178. data/db/migrate/20150515142536_add_organization_to_locations.rb +5 -0
  179. data/db/migrate/20150518123010_change_assign_asset.rb +9 -0
  180. data/db/migrate/20150518140153_add_asset_id_in_asset_assign.rb +5 -0
  181. data/db/migrate/20150518144758_rename_assign_assets.rb +8 -0
  182. data/db/migrate/20150518145248_rename_asset_assignment.rb +8 -0
  183. data/db/migrate/20150519140425_change_empid_to_string.rb +6 -0
  184. data/db/migrate/20150521085132_change_uique_asset_id_to_string.rb +6 -0
  185. data/db/migrate/20150525095045_add_status_to_organizations.rb +5 -0
  186. data/db/migrate/20150525123202_create_transactions.rb +20 -0
  187. data/db/migrate/20150526124755_create_settings.rb +16 -0
  188. data/db/migrate/20150603163451_add_cost_comment_collected_by_to_asset_repair_request.rb +7 -0
  189. data/db/migrate/20150605144111_collected.rb +5 -0
  190. data/db/migrate/20150609111725_add_column_notification.rb +5 -0
  191. data/db/migrate/20150609170014_create_user_notification_settings.rb +13 -0
  192. data/db/migrate/20150609175555_add_city_to_locations.rb +4 -0
  193. data/db/migrate/20150612190052_addcity.rb +5 -0
  194. data/db/migrate/20150614215015_create_members.rb +27 -0
  195. data/db/migrate/20150616070816_add_organization_to_schedules.rb +9 -0
  196. data/db/migrate/20150616114344_change_timestape_to_date.rb +4 -0
  197. data/db/migrate/20150619085555_add_index_repair_scan_to_repair.rb +6 -0
  198. data/db/migrate/20150623120915_create_depreciation_settings.rb +9 -0
  199. data/db/migrate/20150624060402_add_depriciation_ref_to_assets.rb +5 -0
  200. data/db/migrate/20150624085501_add_organization_ref_dep.rb +5 -0
  201. data/db/migrate/20150624114339_add_user_to_vacation_info.rb +9 -0
  202. data/db/migrate/20150624131422_change_dep_seeting.rb +6 -0
  203. data/db/migrate/20150625090838_add_dep_cost_col_in_assets.rb +5 -0
  204. data/db/migrate/20150626123545_add_vendor_id_to_asset.rb +5 -0
  205. data/db/migrate/20150629095216_add_depreciated_cost_asset.rb +5 -0
  206. data/db/migrate/20150629124325_add_allow_vendor_additon_to_setings.rb +7 -0
  207. data/db/migrate/20150630080925_add_approve_to_vendor.rb +5 -0
  208. data/db/migrate/20150630112252_add_referrenc_dereciation_to_asset.rb +5 -0
  209. data/db/migrate/20150630124838_add_ref_dep_organization.rb +5 -0
  210. data/db/migrate/20150707102850_add_column_sittings_to_delete_ticket.rb +6 -0
  211. data/db/migrate/20150710150314_add_org_ref_to_subdomain.rb +5 -0
  212. data/db/migrate/20150713204553_add_hire_dateto_member.rb +9 -0
  213. data/db/migrate/20150714004440_add_organization_to_notes.rb +9 -0
  214. data/db/migrate/20150714100444_add_time_format_to_member.rb +9 -0
  215. data/db/migrate/20150714202050_create_asset_tickets.rb +11 -0
  216. data/db/migrate/20150722151752_add_invitation_counts_to_user.rb +10 -0
  217. data/db/migrate/20150723141352_add_invitation_created_at_to_member.rb +10 -0
  218. data/db/migrate/20150724105130_create_projects.rb +8 -0
  219. data/db/migrate/20150724105257_create_project_payments.rb +13 -0
  220. data/db/migrate/20150724220844_add_user_index_to_asset.rb +6 -0
  221. data/db/migrate/20150727085046_add_projects_to_organization.rb +11 -0
  222. data/db/migrate/20150727122551_add_coloumn_to_vendors.rb +5 -0
  223. data/db/migrate/20150727211029_add_column_code_to_asset.rb +5 -0
  224. data/db/migrate/20150728101649_add_disabled_to_member.rb +9 -0
  225. data/db/migrate/20150731095354_add_column_repair_date_to_asset.rb +6 -0
  226. data/db/migrate/20150731104152_add_column_repair_reminder_setting.rb +5 -0
  227. data/db/migrate/20150806085559_create_member_devices.rb +10 -0
  228. data/db/migrate/20150807133155_add_view_to_alert.rb +9 -0
  229. data/db/migrate/20150808151840_app_col_in_member_device.rb +5 -0
  230. data/db/migrate/20150808180234_add_deleted_at_toalerts.rb +7 -0
  231. data/db/migrate/20150810110136_add_address_in_4_feilds_vendor.rb +12 -0
  232. data/db/migrate/20150810172933_change_column_type_in_vendors.rb +6 -0
  233. data/db/migrate/20150811061019_change_column_in_vendors.rb +5 -0
  234. data/db/migrate/20150811133002_change_shift_off_time.rb +5 -0
  235. data/db/migrate/20150811135657_change_column_type_timestamp_to_date.rb +7 -0
  236. data/db/migrate/20150818131207_create_history_emails.rb +10 -0
  237. data/db/migrate/20150820115042_change_schedule_total_hours.rb +6 -0
  238. data/db/migrate/20150820120309_add_column_email_remove.rb +5 -0
  239. data/db/migrate/20150820121702_add_column_email_organization.rb +5 -0
  240. data/db/migrate/20150824085019_add_column_asset_purchase_vendor.rb +5 -0
  241. data/db/migrate/20150826122944_add_column_exipry_notification.rb +5 -0
  242. data/db/migrate/20150827113937_create_members_roles.rb +9 -0
  243. data/db/migrate/20150828145913_add_locable_to_member.rb +7 -0
  244. data/db/migrate/20150903155708_add_vendor_feilds_to_user.rb +8 -0
  245. data/db/migrate/20150903200953_add_shift_to_candidate.rb +9 -0
  246. data/db/migrate/20150904082434_add_one_sided_to_trade_shift.rb +9 -0
  247. data/db/migrate/20150904134529_add_column_in_setting_user_dispatch.rb +5 -0
  248. data/db/migrate/20150907082501_add_website_for_vendor.rb +6 -0
  249. data/db/migrate/20150907141100_add_dollar_limit_to_user.rb +5 -0
  250. data/db/migrate/20150907193030_add_estimate_in_repair.rb +8 -0
  251. data/db/migrate/20150908123735_add_vendor_aproval_in_repair.rb +10 -0
  252. data/db/migrate/20150909112005_add_column_amount_into_plan.rb +5 -0
  253. data/db/migrate/20150916131512_add_plan_name_to_project_payment.rb +9 -0
  254. data/db/schema.rb +909 -0
  255. data/db/seeds.rb +23 -0
  256. data/lib/assets/.keep +0 -0
  257. data/lib/pshq_engine/version.rb +3 -0
  258. data/lib/pshq_engine.rb +5 -0
  259. data/lib/tasks/.keep +0 -0
  260. data/pshq_engine.gemspec +26 -0
  261. metadata +330 -0
@@ -0,0 +1,189 @@
1
+ class Organization < ActiveRecord::Base
2
+ resourcify
3
+
4
+ # acts_as_paranoid
5
+ self.per_page = 24
6
+ require 'will_paginate/array'
7
+ has_many :employees
8
+ has_many :locations
9
+ has_many :assets
10
+ has_many :vendors
11
+ has_one :subdomain
12
+ has_one :plan
13
+ has_many :importfiles
14
+ has_many :asset_scans
15
+ has_many :asset_assignments
16
+ has_many :notifications, :as => :source
17
+ has_one :setting
18
+ has_many :user_notification_settings
19
+ has_many :depreciation_settings
20
+ has_many :cancellations, :through => :users
21
+ has_many :feedbacks, :through => :users
22
+ has_many :jobs, :dependent => :destroy
23
+ has_many :certifications, :dependent => :destroy
24
+ has_many :alerts, :dependent => :destroy
25
+ has_many :messages, :dependent => :destroy
26
+ has_many :shifts, :through => :users
27
+ has_many :shift_trades
28
+ has_many :shift_offs
29
+ has_many :swaps, :through => :users
30
+ has_many :tasks, :dependent => :destroy
31
+ has_many :timeoffs, :through => :users
32
+ has_many :schedules, :dependent => :destroy
33
+ has_many :notes
34
+ has_many :vacations, :dependent => :destroy
35
+ has_many :candidates
36
+ has_many :templates
37
+
38
+ has_many :member
39
+ accepts_nested_attributes_for :member
40
+ has_many :users, :through => :member
41
+
42
+ validates :name , :city , :state, :address ,:postal_code, :presence => true
43
+ # validates :name, :uniqueness => true
44
+
45
+
46
+ has_many :project_payments
47
+ has_many :projects, :through =>:project_payments
48
+
49
+ has_attached_file :logo, :styles => { :medium => "300x300!", :thumb => "100x100!" }, :default_url => "assets/users/org.png"
50
+ validates_attachment_content_type :logo, :content_type => /\Aimage\/.*\Z/
51
+
52
+ # Functions for TMA
53
+ def managers(exclude = nil)
54
+ all_managers = Array.new
55
+
56
+
57
+ self.users.each do |user|
58
+ user.member.each do|mem|
59
+ if mem.has_role? :manager, self or
60
+ mem.has_role? :owner, self then
61
+ if exclude then
62
+ all_managers.push user if user.id != exclude.id
63
+ else
64
+ all_managers.push user
65
+ end
66
+ end
67
+ end
68
+ end
69
+
70
+ return all_managers
71
+ end
72
+
73
+
74
+ def push_notification_user(type , source , summary, notifier, org_users , organization )
75
+ Notification.create_and_send_notification(
76
+ :type => type,
77
+ :source => source,
78
+ :summary => summary,
79
+ :notifier => notifier,
80
+ :managers => org_users,
81
+ :organizationID => organization.id
82
+ )
83
+ end
84
+
85
+ # Functions for MT2W
86
+ def get_idles(date, start_time, end_time)
87
+ idles = []
88
+ users.each do |user|
89
+ idles << user if user.idle?(date, start_time, end_time)
90
+ end
91
+
92
+ idles
93
+ end
94
+ # @return [manageable users list]
95
+ # @param [Object] manager
96
+ def manageable_users(manager)
97
+ result = []
98
+ users = []
99
+ unless self.show_disabled_users
100
+ self.users.all.each do |user|
101
+ if user.member.find_by_organization_id(self.id).disabled.nil? or user.member.find_by_organization_id(self.id).disabled === false
102
+ users << user
103
+ end
104
+ end
105
+ else
106
+ users = self.users
107
+ end
108
+
109
+ unless manager.get_role_name(self.id) == 'employee'
110
+ if self.show_owner
111
+ users.each{|user| result << user}
112
+ else
113
+ users.each{|user| result << user if user.get_role_name(self.id) != 'owner'}
114
+ end
115
+ else
116
+ users.each{|user| result << user if user.get_role_name(self.id) == 'employee'}
117
+ end
118
+ result
119
+ end
120
+
121
+ def self.mt2w_access
122
+ where(:myt2w_access => true)
123
+ end
124
+
125
+ def schedule_users(manager, org_id)
126
+ result = []
127
+ users = self.users.enable
128
+ if !self.show_owner
129
+ users.each{|user| result << user.id if user.get_role_name(org_id) != 'owner'}
130
+ else
131
+ users.each{|user| result << user.id}
132
+ end
133
+ User.where(id: result)
134
+ end
135
+
136
+ def complete_address
137
+ "#{address}, #{city}, #{state}, #{country}"
138
+ end
139
+ def get_managers
140
+ self.users.with_role(:manager)
141
+ end
142
+
143
+ def get_employees
144
+ employees = []
145
+ employee_roles = [:employee]
146
+ employee_roles.each do |role|
147
+ self.users.with_role(role).each{ |user| employees << user }
148
+ end
149
+ employees
150
+ end
151
+
152
+ #Date change
153
+ def self.date_format(date)
154
+ change_date = date.strftime('%m/%d/%Y')
155
+ return change_date
156
+ end
157
+
158
+ def get_vendor_user
159
+ vendors = []
160
+ self.member.each do |x|
161
+ if (x.roles[0].name == 'vendor')
162
+ vendors << x.user
163
+ end
164
+ end
165
+ vendors.sort!
166
+
167
+ end
168
+
169
+ def vendor_search
170
+ array = []
171
+ user = @organization.users
172
+ user.each do |u|
173
+ if u.get_role_name(@organization.id) == 'vendor'
174
+ array << u
175
+ end
176
+ end
177
+ @arrayobj = array.collect { |u| u.id }
178
+ return @arrayobj
179
+ end
180
+
181
+ def get_role(org_id)
182
+ member = self.member.where(:organization_id => org_id).first
183
+ if member.present?
184
+ role = member.roles.first
185
+ return member.roles.first
186
+ end
187
+ end
188
+
189
+ end
@@ -0,0 +1,4 @@
1
+ class Plan < ActiveRecord::Base
2
+ has_many :project_payments
3
+ default_scope { order(:display_order) }
4
+ end
@@ -0,0 +1,5 @@
1
+ class Project < ActiveRecord::Base
2
+ has_many :project_payments
3
+ has_many :member_devices
4
+ has_many :organizations, :through =>:project_payments
5
+ end
@@ -0,0 +1,4 @@
1
+ class ProjectPayment < ActiveRecord::Base
2
+ belongs_to :organizations
3
+ belongs_to :plan
4
+ end
@@ -0,0 +1,4 @@
1
+ class RecurringTimeOff < ActiveRecord::Base
2
+ belongs_to :timeoff
3
+ belongs_to :user
4
+ end
@@ -0,0 +1,23 @@
1
+ class Response
2
+
3
+ def self.failed_user_authentication_response
4
+ {
5
+ :json => {
6
+ :success=>false,
7
+ :message => "Please Enter Correct Email/Password"
8
+ },
9
+ :status => 400
10
+ }
11
+ end
12
+
13
+ def self.user_authentication_disabled_organization_response
14
+ {
15
+ :json =>{
16
+ :success=>false,
17
+ :message => "Please renew your subscription or Contact your supplier"
18
+ },
19
+ :status => 401
20
+ }
21
+ end
22
+
23
+ end
@@ -0,0 +1,22 @@
1
+ class Role < ActiveRecord::Base
2
+ has_and_belongs_to_many :users, :join_table => :users_roles
3
+ has_and_belongs_to_many :members
4
+ belongs_to :resource, :polymorphic => true
5
+
6
+ validates :resource_type,
7
+ :inclusion => { :in => Rolify.resource_types },
8
+ :allow_nil => true
9
+
10
+ scopify
11
+
12
+ #function for MT2W
13
+ def self.get_invitable_roles
14
+ invite_roles = YAML.load(ENV['ROLES'])
15
+ invite_roles.delete('super_admin')
16
+ invite_roles.delete('owner')
17
+ invite_roles.delete('general_manager')
18
+
19
+ self.where(:name => invite_roles)
20
+ end
21
+
22
+ end
@@ -0,0 +1,228 @@
1
+ # == Schema Information
2
+ #
3
+ # Table name: schedules
4
+ #
5
+ # id :integer not null, primary key
6
+ # publish :boolean
7
+ # user_id :integer
8
+ # job_id :integer
9
+ # created_at :datetime
10
+ # updated_at :datetime
11
+ # start_date :date
12
+ # end_date :date
13
+ #
14
+
15
+ class Schedule < ActiveRecord::Base
16
+
17
+
18
+ belongs_to :user
19
+ belongs_to :organization
20
+
21
+ has_many :shifts, :dependent => :destroy
22
+ has_many :cancellations, :through => :shifts
23
+ has_many :swaps, :through => :shifts
24
+ has_many :templates
25
+
26
+ validates_presence_of :user
27
+ validates_presence_of :organization
28
+ validates_uniqueness_of :user_id, scope: [:start_date, :end_date, :template_id, :organization_id]
29
+ validates_date :start_date
30
+ validates_date :end_date, :after => :start_date
31
+ validate :double_schedule
32
+
33
+ def published?
34
+ self.publish == true
35
+ end
36
+
37
+ def self.publish
38
+ where(:publish => true)
39
+ end
40
+
41
+ def self.publish! schedule_ids, org_id
42
+ schedules = where(:id => schedule_ids)
43
+ schedules.each do |schedule|
44
+ schedule.notify_employee(org_id)
45
+ end
46
+ return schedules.update_all(:publish => true)
47
+ end
48
+
49
+ def notify_employee org_id
50
+ Notifier.delay.schedule_published(self, org_id)
51
+ end
52
+
53
+ def self.schedule_resend(schedules)
54
+ where(:id => schedules).each do |schedule|
55
+ schedule.notify_employee
56
+ end
57
+ end
58
+
59
+ def get_sum
60
+ total_hours.try(:round, 1)
61
+ end
62
+
63
+ def calculate_total_hours
64
+ sum = 0.0
65
+ prop = self.user.member.find_by_organization_id(self.organization_id).in_train ? 'training_hours' : 'hours'
66
+ shifts.each do |shift|
67
+ shift[prop] = "2000-01-01 00:00:00 UTC" if shift[prop].nil?
68
+ sum = sum + shift[prop].hour
69
+ sum = sum + ( shift[prop].min + 0.00 ) / 60
70
+ end
71
+ self.update_attributes(:total_hours => sum)
72
+ end
73
+
74
+ def check_timeoff_conflict start_time, end_time, due_date
75
+ self.shifts.where(:due_date => due_date).each do |shift|
76
+ if (start_time.strftime("%H:%M") >= shift.start_time.strftime("%H:%M") and start_time.strftime("%H:%M") < shift.end_time.strftime("%H:%M")) or (end_time.strftime("%H:%M") >= shift.start_time.strftime("%H:%M") and end_time.strftime("%H:%M") < shift.end_time.strftime("%H:%M"))
77
+ return true
78
+ end
79
+ end
80
+ return false
81
+ end
82
+
83
+ private
84
+ def double_schedule
85
+ # schedule = self.class.where(:start_date => self.start_date, :end_date => self.end_date,:template_id => nil).first
86
+ # if self.id
87
+ # # existing row
88
+ # if schedule && schedule.user.id == self.user_id && schedule.id != self.id
89
+ # errors.add(:start_date, "already scheduled from #{self.start_date} to #{self.end_date}")
90
+ # end
91
+ # else
92
+ # # new row
93
+ # if schedule && schedule.user.id == self.user_id
94
+ # errors.add(:start_date, "already scheduled from #{self.start_date} to #{self.end_date}")
95
+ # end
96
+ # end
97
+ end
98
+
99
+ def self.create_with_json(data, date=nil, m_to_s, org_id)
100
+ if date
101
+ now_date = DateTime.parse(date)
102
+ else
103
+ now_date = Time.zone.now
104
+ end
105
+
106
+ wday = now_date.wday
107
+ if m_to_s
108
+ start_day = now_date - wday.day + 1.day
109
+ end_day = now_date - wday.day + 7.day
110
+ else
111
+ start_day = now_date - wday.day + 0.day
112
+ end_day = now_date - wday.day + 6.day
113
+ end
114
+ data.each do |schedule|
115
+ if schedule["id"].nil?
116
+ # create new one
117
+ new_schedule = self.new(:user_id => schedule["employee_id"],
118
+ :publish => schedule["publish"],
119
+ :start_date => start_day,
120
+ :end_date => end_day,
121
+ :total_hours => schedule["total_hours"],
122
+ :organization_id => org_id
123
+ )
124
+ unless new_schedule.save
125
+ return new_schedule.errors
126
+ else
127
+ if new_schedule.publish?
128
+ new_schedule.notify_employee
129
+ end
130
+ end
131
+
132
+ result = Shift.create_with_json(new_schedule, schedule["shifts"],false)
133
+ unless result == true
134
+ return result
135
+ end
136
+ else
137
+ # modify existing one
138
+ ext_schedule = self.find(schedule["id"])
139
+ if ext_schedule
140
+ # ext_schedule.job_id = schedule["job_id"]
141
+ ext_schedule.user_id = schedule["employee_id"]
142
+ ext_schedule.publish = schedule["publish"]
143
+ ext_schedule.start_date = start_day
144
+ ext_schedule.end_date = end_day
145
+ ext_schedule.total_hours = schedule["total_hours"]
146
+ changed = ext_schedule.changed?
147
+ result = ext_schedule.save
148
+ unless result
149
+ return ext_schedule.errors
150
+ end
151
+ if ext_schedule.publish?
152
+ ext_schedule.notify_employee
153
+ end
154
+ end
155
+ result = Shift.create_with_json(ext_schedule, schedule["shifts"],changed) if ext_schedule
156
+ unless result == true
157
+ return result
158
+ end
159
+ end
160
+ end
161
+
162
+ true
163
+ end
164
+
165
+ def self.current_week
166
+ cur_day = Time.zone.now.strftime('%Y-%m-%d')
167
+ where("start_date <= '#{cur_day}' and end_date >= '#{cur_day}'")
168
+ end
169
+
170
+ def self.week_schedule_by_date date
171
+ where("start_date <= '#{date}' and end_date >= '#{date}'")
172
+ end
173
+
174
+ def self.not_template
175
+ where(:template_id => nil)
176
+ end
177
+
178
+ def self.published_only
179
+ where(:publish => true)
180
+ end
181
+
182
+ def self.schedule_by_date(start_date,end_date )
183
+ where("start_date >= '#{start_date}' and end_date <= '#{end_date}'")
184
+ end
185
+
186
+ def self.published
187
+ where(:publish => true)
188
+ end
189
+
190
+ # def notify_employee
191
+ # Notifier.delay.schedule_published(self)
192
+ # end
193
+
194
+ def self.editable users, org, date, role
195
+ weeks_schedules = []
196
+ users = users.includes(:member)
197
+ if role === 'employee'
198
+ schedules = where(:organization_id => org.id, :user_id => users, :publish => true).not_template.week_schedule_by_date(date).group_by(&:user_id)
199
+ else
200
+ schedules = where(:organization_id => org.id, :user_id => users).not_template.week_schedule_by_date(date).group_by(&:user_id)
201
+ end
202
+ users.each_with_index do |user, i|
203
+ sch = {}
204
+ member = user.member.find_by_organization_id(org.id)
205
+ schedule = schedules[user.id].try(:first)
206
+ sch["employee_id"] = user.id
207
+ sch["member_id"] = member.id
208
+ sch["employee_name"] = user.name
209
+ sch["role_name"] = member.roles.first.name
210
+ sch["first_name"] = user.first_name
211
+ sch["last_name"] = user.last_name
212
+ sch["priority"] = member.priority
213
+ sch["trainee"] = member.in_train
214
+ sch["request_hours"] = member.request_weekly_hours || "0"
215
+ sch["id"] = schedule.try(:id)
216
+ sch["start_date"] = schedule.try(:start_date) || Shift.get_day(org.m_to_s, 0, date)
217
+ sch["end_date"] = schedule.try(:end_date) || Shift.get_day(org.m_to_s, 6, date)
218
+ sch["publish"] = schedule.try(:publish)
219
+ sch["schdeule_sum"] = schedule.try(:get_sum) || "0"
220
+ sch["organization_id"] = org.id
221
+ sch["shifts"] = Shift.week_shifts schedule, user, org, date
222
+ weeks_schedules << sch
223
+ end
224
+ weeks_schedules = weeks_schedules.sort_by {|sch| sch["priority"]}
225
+ return weeks_schedules
226
+ end
227
+
228
+ end
@@ -0,0 +1,25 @@
1
+ class Setting < ActiveRecord::Base
2
+ belongs_to :organization
3
+ has_many :notifications, :as => :source
4
+
5
+ # check user update settings
6
+ def self.check_user(user)
7
+ already_exist = UserNotificationSetting.where("user_id=?",user)
8
+ if !already_exist.blank?
9
+ user_exitence = "exist"
10
+ else
11
+ user_exitence = "not_exist"
12
+ end
13
+ return user_exitence
14
+ end
15
+
16
+ #Notification setting alert
17
+ def self.notification_alert(user, organization)
18
+ @notification = Notification.create(
19
+ :summary => "Notification setting has been changed",
20
+ :notification_type => "NSC",
21
+ :notified_by => user,
22
+ )
23
+ @notification.add_notifiers([user])
24
+ end
25
+ end