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,221 @@
1
+ class HistoryEmail < ActiveRecord::Base
2
+ # Email history records
3
+ def self.history_email(user, type , seen, organization , affected_id)
4
+ create_history(user, type , seen , organization , affected_id)
5
+ end
6
+
7
+
8
+ # Asset Create Email
9
+ def self.asset_create_email(asset , organizatin , email, add_user)
10
+ # Find users of organization and onwer and managers
11
+ member = Member.where("organization_id = ? " , organizatin.id)
12
+ member.each do |mem|
13
+ org_user = User.where("id =?",mem.user_id)
14
+ org_user.each do |user|
15
+ email_date = date_time_setting(user)
16
+ if email_date != "immediately"
17
+ date_time = time_email(email_date)
18
+ @date_now = Date.today
19
+ setting_time = UserNotificationSetting.setting_date(user.id)
20
+ dt = setting_time + date_time
21
+ if dt == @date_now
22
+ if user.has_role? 'manager'
23
+ UserMailer.create_asset( asset, organizatin , email , user , add_user).deliver
24
+ elsif user.has_role? 'owner'
25
+ UserMailer.create_asset( asset, organizatin , email , user , add_user).deliver
26
+ end
27
+ end
28
+
29
+ end
30
+ end
31
+ end
32
+ end
33
+
34
+ # Asset Update Email
35
+ def self.asset_update_email(asset , organizatin , email, add_user)
36
+ # Find users of organization and onwer and managers
37
+ member = Member.where("organization_id = ? " , organizatin.id)
38
+ member.each do |mem|
39
+ org_user = User.where("id =?",mem.user_id)
40
+ org_user.each do |user|
41
+ email_date = date_time_setting(user)
42
+ if email_date != "immediately"
43
+ date_time = time_email(email_date)
44
+ @date_now = Date.today
45
+ setting_time = UserNotificationSetting.setting_date(user.id)
46
+ dt = setting_time + date_time
47
+ if dt == @date_now
48
+ if user.has_role? 'manager'
49
+ UserMailer.update_asset(asset, organizatin , email , user , add_user).deliver
50
+ elsif user.has_role? 'owner'
51
+ UserMailer.update_asset(asset, organizatin , email , user , add_user).deliver
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
58
+
59
+
60
+ # Vendor create email
61
+ def self.vendor_create_email(vendor , organizatin , email, add_user)
62
+ # Find users of organization and onwer and managers
63
+ member = Member.where("organization_id = ? " , organizatin.id)
64
+ member.each do |mem|
65
+ org_user = User.where("id =?",mem.user_id)
66
+ org_user.each do |user|
67
+
68
+ email_date = date_time_setting(user)
69
+ if email_date != "immediately"
70
+ date_time = time_email(email_date)
71
+ @date_now = Date.today
72
+ setting_time = UserNotificationSetting.setting_date(user.id)
73
+ dt = setting_time + date_time
74
+ if dt == @date_now
75
+ if user.has_role? 'manager'
76
+ UserMailer.ct_vendor(vendor, email ,organizatin , user , add_user).deliver
77
+ elsif user.has_role? 'owner'
78
+ UserMailer.ct_vendor(vendor, email ,organizatin , user , add_user).deliver
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
84
+ end
85
+
86
+ # Create Ticket Email
87
+ def self.create_ticket_email(asset, organization ,email , ticket , add_user)
88
+
89
+ # Find users of organization and onwer and managers
90
+ member = Member.where("organization_id = ? " , organization.id)
91
+ member.each do |mem|
92
+ org_user = User.where("id =?",mem.user_id)
93
+ org_user.each do |user|
94
+
95
+ email_date = date_time_setting(user)
96
+ if email_date != "immediately"
97
+ date_time = time_email(email_date)
98
+ @date_now = Date.today
99
+ setting_time = UserNotificationSetting.setting_date(user.id)
100
+ dt = setting_time + date_time
101
+ if dt == @date_now
102
+ if user.has_role? 'manager'
103
+ UserMailer.create_ticket(asset, organization , email , user , ticket, add_user).deliver
104
+ elsif user.has_role? 'owner'
105
+ UserMailer.create_ticket(asset, organization , email , user , ticket, add_user).deliver
106
+ end
107
+ end
108
+ end
109
+ end
110
+ end
111
+ end
112
+
113
+
114
+ def self.collect_ticket_email(asset , organization ,email , collection , add_user)
115
+
116
+ # Find users of organization and onwer and managers
117
+ member = Member.where("organization_id = ? " , organization.id)
118
+ member.each do |mem|
119
+ org_user = User.where("id =?",mem.user_id)
120
+ org_user.each do |user|
121
+
122
+ email_date = date_time_setting(user)
123
+ if email_date != "immediately"
124
+ date_time = time_email(email_date)
125
+ @date_now = Date.today
126
+ setting_time = UserNotificationSetting.setting_date(user.id)
127
+ dt = setting_time + date_time
128
+ if dt == @date_now
129
+ if user.has_role? 'manager'
130
+ UserMailer.collect_ticket(asset, organization , email , user , collection, add_user).deliver
131
+ elsif user.has_role? 'owner'
132
+ UserMailer.collect_ticket(asset, organization , email , user , collection, add_user).deliver
133
+ end
134
+ end
135
+ end
136
+ end
137
+ end
138
+ end
139
+
140
+
141
+ # Assignemt asset
142
+ # (asset, organization , employee , email, user , assignment ,add_user)
143
+ def self.asset_assignment_email(asset, organization , employee , email, assignment ,add_user)
144
+ # Find users of organization and onwer and managers
145
+ member = Member.where("organization_id = ? " , organization.id)
146
+ member.each do |mem|
147
+ org_user = User.where("id =?",mem.user_id)
148
+ org_user.each do |user|
149
+
150
+ email_date = date_time_setting(user)
151
+ if email_date != "immediately"
152
+ date_time = time_email(email_date)
153
+ @date_now = Date.today
154
+ setting_time = UserNotificationSetting.setting_date(user.id)
155
+ dt = setting_time + date_time
156
+ if dt == @date_now
157
+ if user.has_role? 'manager'
158
+ UserMailer.asset_assgiment(asset, organization ,employee, email , user , assignment, add_user).deliver
159
+ elsif user.has_role? 'owner'
160
+ UserMailer.asset_assgiment(asset, organization ,employee, email , user , assignment, add_user).deliver
161
+ end
162
+ end
163
+ end
164
+ end
165
+ end
166
+ end
167
+
168
+ # Send For repair
169
+ #
170
+ #(asset, organizaion , email, user , repair, add_user)
171
+
172
+ def self.asset_repair_email(asset , organization , email , repair, add_user)
173
+ # Find users of organization and onwer and managers
174
+ member = Member.where("organization_id = ? " , organization.id)
175
+ member.each do |mem|
176
+ org_user = User.where("id =?",mem.user_id)
177
+ org_user.each do |user|
178
+
179
+ email_date = date_time_setting(user)
180
+ if email_date != "immediately"
181
+ date_time = time_email(email_date)
182
+ @date_now = Date.today
183
+ setting_time = UserNotificationSetting.setting_date(user.id)
184
+ dt = setting_time + date_time
185
+ if dt == @date_now
186
+ if user.has_role? 'manager'
187
+ UserMailer.repair_request(asset, organization , email , user , repair, add_user).deliver
188
+ elsif user.has_role? 'owner'
189
+ UserMailer.repair_request(asset, organization , email , user , repair, add_user).deliver
190
+ end
191
+ end
192
+ end
193
+ end
194
+ end
195
+ end
196
+
197
+
198
+
199
+ private
200
+
201
+ def self.create_history(user_id, type , seen , organization , affected_id)
202
+ HistoryEmail.create(:user_id=> user_id,:email_type=>type, :email_seen => seen , :organization_id =>organization ,:effected_id =>affected_id)
203
+ end
204
+
205
+ def self.date_time_setting(user)
206
+ UserNotificationSetting.email_setting(user.id)
207
+ end
208
+
209
+ def self.time_email(email_date)
210
+ if email_date == "day"
211
+ @email_time = 1.day
212
+ elsif email_date == "week"
213
+ @email_time = 1.week
214
+ elsif email_date =="month"
215
+ @email_time = 1.month
216
+ end
217
+ return @email_time
218
+ end
219
+
220
+
221
+ end
@@ -0,0 +1,6 @@
1
+ class Importfile < ActiveRecord::Base
2
+ belongs_to :organization
3
+ has_attached_file :avatar
4
+ validates_attachment_content_type :avatar, :content_type => ["application/vnd.ms-excel",
5
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"]
6
+ end
data/app/models/job.rb ADDED
@@ -0,0 +1,37 @@
1
+ # == Schema Information
2
+ #
3
+ # Table name: jobs
4
+ #
5
+ # id :integer not null, primary key
6
+ # organization_id :integer
7
+ # name :string(255)
8
+ # created_at :datetime
9
+ # updated_at :datetime
10
+ # color :string(255)
11
+ #
12
+
13
+ class Job < ActiveRecord::Base
14
+ after_commit :notify_users
15
+ belongs_to :organization
16
+
17
+ has_many :shifts
18
+
19
+ has_and_belongs_to_many :users
20
+
21
+ #validates_length_of :name, :within => 3..30
22
+ #validates_uniqueness_of :name, :scope => :organization
23
+
24
+ def notify_users
25
+ Pusher.trigger(self.organization.name, 'jobchange', {:message => ''})
26
+ end
27
+
28
+ def self.employee_jobs users, org_id
29
+ users = User.where(id: users).includes(:jobs)
30
+ jobs = {}
31
+ users.each do |user|
32
+ jobs[user.id] = user.jobs.where(:organization_id => org_id)
33
+ end
34
+ jobs
35
+ end
36
+
37
+ end
@@ -0,0 +1,18 @@
1
+ # == Schema Information
2
+ #
3
+ # Table name: jobs_users
4
+ #
5
+ # id :integer not null, primary key
6
+ # job_id :integer
7
+ # user_id :integer
8
+ # created_at :datetime
9
+ # updated_at :datetime
10
+ #
11
+
12
+ class JobsUsers < ActiveRecord::Base
13
+
14
+ belongs_to :job
15
+ belongs_to :user
16
+ #validates :job_id, :uniqueness => { :scope => :user_id, :message => "Job already exists" }
17
+
18
+ end
@@ -0,0 +1,35 @@
1
+ # == Schema Information
2
+ #
3
+ # Table name: latenesses
4
+ #
5
+ # id :integer not null, primary key
6
+ # reason :string(255)
7
+ # shift_id :integer
8
+ # notify :boolean default(FALSE)
9
+ # created_at :datetime
10
+ # updated_at :datetime
11
+ #
12
+
13
+ class Lateness < ActiveRecord::Base
14
+
15
+ belongs_to :shift
16
+
17
+ validates_presence_of :reason
18
+ validates_presence_of :shift
19
+
20
+ after_save :notify_to_managers
21
+
22
+ def shift_detail
23
+ "AS #{shift.job_name} from #{shift.start_time.strftime('%H:%M')} to #{shift.end_time.strftime('%H:%M')} on #{shift.formatted_due_date}"
24
+ end
25
+ private
26
+
27
+ def notify_to_managers
28
+ if notify
29
+ managers = shift.schedule.user.organizations.find_by_id(shift.schedule.organization_id).get_managers
30
+ managers.each do |manager|
31
+ manager.notify_message(self)
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,4 @@
1
+ class Location < ActiveRecord::Base
2
+ has_many :assets
3
+ belongs_to :organization
4
+ end
@@ -0,0 +1,4 @@
1
+ class Manufacturer < ActiveRecord::Base
2
+ belongs_to :asset
3
+ validates :company_name, :presence => true
4
+ end
@@ -0,0 +1,65 @@
1
+ class Member < ActiveRecord::Base
2
+
3
+ belongs_to :user
4
+ belongs_to :organization
5
+ has_many :user_vacation_infos
6
+ belongs_to :vacation
7
+ has_one :user_vacation_info
8
+ has_many :member_devices
9
+ has_and_belongs_to_many :roles
10
+
11
+ rolify
12
+ devise :invitable, :lockable
13
+
14
+ attr_reader :raw_invitation_token
15
+
16
+ after_invitation_accepted :email_invited_by
17
+
18
+ def email_invited_by
19
+ self.invitation_token = ''
20
+ self.invitation_accepted_at = Time.now
21
+ self.save(validate: false)
22
+ end
23
+
24
+ def invite_user!
25
+ generate_invitation_token!
26
+ invitation_created_at = Time.now
27
+ invitation_sent_at = Time.now
28
+ self.save(validate: false)
29
+ user.send_devise_notification(:invitation_instructions, self.raw_invitation_token)
30
+ end
31
+
32
+ # when you lock access, you could pass the next hash
33
+ # `{ send_instructions: false } as option`.
34
+ def lock_access!(opts = { })
35
+ self.locked_at = Time.now.utc
36
+
37
+ if unlock_strategy_enabled?(:email) && opts.fetch(:send_instructions, true)
38
+ send_unlock_instructions
39
+ else
40
+ save(validate: false)
41
+ end
42
+ end
43
+
44
+ # Unlock a user by cleaning locked_at and failed_attempts.
45
+ def unlock_access!
46
+ self.locked_at = nil
47
+ self.failed_attempts = 0 if respond_to?(:failed_attempts=)
48
+ self.unlock_token = nil if respond_to?(:unlock_token=)
49
+ save(validate: false)
50
+ end
51
+
52
+ # Verifies whether a user is locked or not.
53
+ def access_locked?
54
+ !!locked_at && !lock_expired?
55
+ end
56
+
57
+ def self.enabled!
58
+ member_org_ids = self.where(disabled: false).map(&:organization_id)
59
+ Organization.where(id: member_org_ids)
60
+ end
61
+
62
+ def disable!
63
+ self.update_attributes(disabled: true)
64
+ end
65
+ end
@@ -0,0 +1,4 @@
1
+ class MemberDevice < ActiveRecord::Base
2
+ belongs_to :member
3
+ belongs_to :project
4
+ end
@@ -0,0 +1,33 @@
1
+ class Message
2
+ include ActiveModel::Validations
3
+ include ActiveModel::Conversion
4
+ extend ActiveModel::Naming
5
+
6
+ attr_accessor :recipients, :subject, :body, :conversation_id, :attachment
7
+
8
+ validates :recipients, presence: true
9
+ validates :subject, presence: true
10
+ validates :body, presence: true
11
+
12
+ def initialize(attributes = {})
13
+ attributes.each do |name, value|
14
+ send("#{name}=", value)
15
+ end
16
+ end
17
+
18
+ def persisted?
19
+ false
20
+ end
21
+
22
+
23
+ def recipients
24
+ @recipient_list
25
+ end
26
+
27
+ def recipients=(receivers_arr=[])
28
+ @recipient_list = []
29
+ receivers_arr.each do |s|
30
+ @recipient_list << User.find_by_email!(s.strip) unless s.blank?
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,20 @@
1
+ # == Schema Information
2
+ #
3
+ # Table name: notes
4
+ #
5
+ # id :integer not null, primary key
6
+ # user_id :integer
7
+ # content :text
8
+ # created_by :integer
9
+ # created_at :datetime
10
+ # updated_at :datetime
11
+ #
12
+
13
+ class Note < ActiveRecord::Base
14
+
15
+ belongs_to :user
16
+ belongs_to :organization
17
+
18
+ # validates_presence_of :content
19
+
20
+ end
@@ -0,0 +1,73 @@
1
+ class Notification < ActiveRecord::Base
2
+ has_many :subscribers, :class_name => "NotificationUser"
3
+ belongs_to :source, polymorphic: true
4
+ belongs_to :notified_by, :class_name => "User"
5
+
6
+ def self.create_and_send_notification(options={})
7
+ source = options[:source]
8
+ notifier = options[:notifier]
9
+ managers = options[:managers]
10
+ notification = source.notifications.create(
11
+ :summary => options[:summary],
12
+ :notification_type => options[:type],
13
+ :notified_by => notifier
14
+ )
15
+ notification.add_notifiers(managers)
16
+ load_pubnub
17
+ managers.try(:each) do |manager|
18
+ notifier.member.where(:organization_id => options[:organizationID]).each do |mem|
19
+ @pubnub.publish(
20
+ :channel => mem.organization.id.to_s + "_" + manager.id.to_s,
21
+ :message => {
22
+ :id => notification.id,
23
+ :type => notification.notification_type,
24
+ :created_at => notification.created_at,
25
+ :updated_at => notification.updated_at,
26
+ :notified_by => options[:notifier],
27
+ :summary => notification.summary,
28
+ :responded => notification.responded,
29
+ :source => source
30
+ }
31
+ ) { |data| puts data.msg }
32
+ end
33
+ end
34
+ push_tokens = []
35
+ managers.each do |manager|
36
+ manager.member.where(:organization_id => options[:organizationID]).each do |member|
37
+ member.member_devices.each do |member_device|
38
+ if member_device.device == 'iOS'
39
+ push_tokens << member_device.push_token
40
+ end
41
+ end
42
+ end
43
+ end
44
+
45
+ if push_tokens.size > 0
46
+ payload = {
47
+ :data => {
48
+ :id => notification.id,
49
+ :type => notification.notification_type,
50
+ :created_at => notification.created_at,
51
+ :updated_at => notification.updated_at,
52
+ :notified_by => options[:notifier],
53
+ :summary => notification.summary,
54
+ :responded => notification.responded,
55
+ :source => source
56
+ }
57
+ }
58
+ s = Pushwoosh.notify_devices(notification.summary, push_tokens)
59
+ end
60
+ end
61
+
62
+ def add_notifiers(managers)
63
+ managers.each do |manager|
64
+ self.subscribers.create({
65
+ user: manager,
66
+ seen: false,
67
+ });
68
+ end
69
+ end
70
+
71
+
72
+
73
+ end
@@ -0,0 +1,4 @@
1
+ class NotificationUser < ActiveRecord::Base
2
+ belongs_to :notification
3
+ belongs_to :user
4
+ end
@@ -0,0 +1,27 @@
1
+ module OAuth
2
+ class Base
3
+ attr_reader :provider, :data
4
+
5
+ def initialize params
6
+ @provider = self.class.name.split('::').last.downcase
7
+
8
+ @params = {
9
+ code: params[:code],
10
+ redirect_uri: params[:redirectUri],
11
+ client_id: params[:clientId],
12
+ client_secret: ENV["#{ @provider }_oauth_secret"]
13
+ }
14
+
15
+ @client = HTTPClient.new
16
+ @access_token = params[:access_token].presence || get_access_token
17
+ end
18
+
19
+ def get_data
20
+ response = @client.get(self.class::DATA_URL, access_token: @access_token)
21
+
22
+ @data = JSON.parse(response.body).with_indifferent_access
23
+
24
+ @data[:id] ||= @data[:sub]
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,21 @@
1
+ module OAuth
2
+ class Facebook < OAuth::Base
3
+
4
+ HOST = 'https://graph.facebook.com'
5
+ ACCESS_TOKEN_URL = HOST + '/oauth/access_token'
6
+ DATA_URL = HOST + '/me?fields=id,email,name,birthday,location,gender,picture'
7
+ FRIENDS_URL = HOST + '/me/friends'
8
+
9
+ attr_reader :access_token
10
+
11
+ def get_access_token
12
+ response = @client.get(ACCESS_TOKEN_URL, @params)
13
+
14
+ Rack::Utils.parse_query(response.body)['access_token']
15
+ end
16
+
17
+ def get_names
18
+ [data[:first_name], data[:last_name]]
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,18 @@
1
+ module OAuth
2
+ class Google < OAuth::Base
3
+ ACCESS_TOKEN_URL = 'https://accounts.google.com/o/oauth2/token'
4
+ DATA_URL = 'https://www.googleapis.com/plus/v1/people/me/openIdConnect'
5
+
6
+ def get_access_token
7
+ response = @client.post(ACCESS_TOKEN_URL, @params.merge(grant_type: 'authorization_code'))
8
+
9
+ JSON.parse(response.body)['access_token']
10
+ end
11
+
12
+ def get_names
13
+ names = data[:name].try(:split).to_a
14
+
15
+ [data[:given_name] || names.first, data[:family_name] || names.last]
16
+ end
17
+ end
18
+ end