@admin-layout/timetracker-module-server 1.0.3-alpha.19 → 1.0.3-alpha.29

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.
package/lib/index.js CHANGED
@@ -1369,7 +1369,7 @@ exports.schema = schema;
1369
1369
 
1370
1370
  "use strict";
1371
1371
  __webpack_require__.r(__webpack_exports__);
1372
- /* harmony default export */ __webpack_exports__["default"] = ("type TimeRecord {\n id: String\n startTime: DateTime\n endTime: DateTime\n taskId: String\n taskName: String\n description: String\n tags: [String]\n isBillable: Boolean\n projectId: String\n clientId: String\n userId: String\n orgId: String\n timesheetId: String\n editable: Boolean\n isPause: Boolean\n isTimeout: Boolean\n pauseStatus: [PauseStatus]\n}\n\ntype PauseStatus {\n pausedTime: DateTime\n restartTime: DateTime\n}\n\ninput PauseStatus_Input {\n pausedTime: DateTime\n restartTime: DateTime\n}\n\ninput TimeRecordRequest {\n userId: String\n startTime: DateTime\n endTime: DateTime\n taskName: String\n description: String\n tags: [String]\n isBillable: Boolean\n projectId: String\n clientId: String\n timesheetId: String\n isPause: Boolean\n isTimeout: Boolean\n pauseStatus: [PauseStatus_Input]\n}\n\n\"\"\"\n Subscription event for timer\n\"\"\"\nenum TimeRecordPubSubEvents {\n TimeRecordCreated\n TimeRecordUpdated\n TimeRecordStopped\n TimeRecordDeleted\n TimeRecordConfigurationUpdate\n}\n\ntype SubscriptionTimeRecord {\n mutation: TimeRecordPubSubEvents\n timeRecord: TimeRecord\n}\n\nextend type Query {\n getTimeRecords(userId: String): [TimeRecord] @addAccountContext\n getDurationTimeRecords(startTime: DateTime, endTime: DateTime, userId: String): [TimeRecord] @addAccountContext\n getPlayingTimeRecord: TimeRecord @addAccountContext\n}\n\nextend type Mutation {\n createTimeRecord(request: TimeRecordRequest): String @addAccountContext\n updateTimeRecord(recordId: String!, request: TimeRecordRequest): Boolean @addAccountContext\n removeTimeRecord(recordId: String!): Boolean @addAccountContext\n removeDurationTimeRecords(startTime: DateTime, endTime: DateTime, projectId: String): Boolean @addAccountContext\n}\n\nextend type Subscription {\n SubscribeToTimeTracker(orgName: String, userId: String): SubscriptionTimeRecord\n}\n");
1372
+ /* harmony default export */ __webpack_exports__["default"] = ("type TimeRecords {\n orgId: String\n userId: String\n timeRecords: [TimeRecord]\n}\n\ntype TimeRecord {\n id: String\n startTime: DateTime\n endTime: DateTime\n taskId: String\n taskName: String\n description: String\n tags: [String]\n isBillable: Boolean\n projectId: String\n clientId: String\n userId: String\n orgId: String\n timesheetId: String\n editable: Boolean\n isPause: Boolean\n isTimeout: Boolean\n pauseStatus: [PauseStatus]\n}\n\ntype PauseStatus {\n pausedTime: DateTime\n restartTime: DateTime\n}\n\ninput PauseStatus_Input {\n pausedTime: DateTime\n restartTime: DateTime\n}\n\ninput TimeRecordRequest {\n userId: String\n startTime: DateTime\n endTime: DateTime\n taskName: String\n description: String\n tags: [String]\n isBillable: Boolean\n projectId: String\n clientId: String\n timesheetId: String\n isPause: Boolean\n isTimeout: Boolean\n pauseStatus: [PauseStatus_Input]\n}\n\n\"\"\"\n Subscription event for timer\n\"\"\"\nenum TimeRecordPubSubEvents {\n TimeRecordCreated\n TimeRecordUpdated\n TimeRecordStopped\n TimeRecordDeleted\n TimeRecordConfigurationUpdate\n}\n\ntype SubscriptionTimeRecord {\n mutation: TimeRecordPubSubEvents\n timeRecord: TimeRecord\n}\n\nextend type Query {\n getTimeRecords(userId: String): [TimeRecord] @addAccountContext\n getDurationTimeRecords(startTime: DateTime, endTime: DateTime, userId: String): [TimeRecord] @addAccountContext\n getPlayingTimeRecord: TimeRecord @addAccountContext\n}\n\nextend type Mutation {\n createTimeRecord(request: TimeRecordRequest): String @addAccountContext\n updateTimeRecord(recordId: String!, request: TimeRecordRequest): Boolean @addAccountContext\n removeTimeRecord(recordId: String!): Boolean @addAccountContext\n removeDurationTimeRecords(startTime: DateTime, endTime: DateTime, projectId: String): Boolean @addAccountContext\n}\n\nextend type Subscription {\n SubscribeToTimeTracker(orgName: String, userId: String): SubscriptionTimeRecord\n}\n");
1373
1373
 
1374
1374
  /***/ }),
1375
1375
 
@@ -1382,7 +1382,7 @@ __webpack_require__.r(__webpack_exports__);
1382
1382
 
1383
1383
  "use strict";
1384
1384
  __webpack_require__.r(__webpack_exports__);
1385
- /* harmony default export */ __webpack_exports__["default"] = ("# scalar DateTime\nenum TimesheetState {\n OPEN\n APPROVED_PENDING\n APPROVED\n APPROVED_FINALIZED # --- which means no going back\n DENYED\n SUBMITTED\n DENYED_FINALIZED # --- which means no going back\n}\n\ntype Timesheet {\n id: ID\n userId: String\n startDate: DateTime\n endDate: DateTime\n state: TimesheetState\n submittedOn: DateTime\n approvedOn: DateTime\n approvedBy: String\n updatedBy: String # ---> userId\n updatedOn: DateTime\n}\n\ninput TimesheetCreateRequest {\n userId: String\n startDate: DateTime\n endDate: DateTime\n state: TimesheetState\n submittedOn: DateTime\n approvedOn: DateTime\n approvedBy: String\n updatedBy: String # ---> userId\n updatedOn: DateTime\n}\n\ntype TimesheetResponse {\n id: ID\n startDate: DateTime\n endDate: DateTime\n state: TimesheetState\n submittedOn: DateTime\n approvedOn: DateTime\n approvedBy: String\n updatedBy: String # ---> userId\n updatedOn: DateTime\n userId: String\n orgId: String\n totalDuration: Int\n}\n\nextend type Query {\n getTimesheets(userId: String, withTotalHours: Boolean): [TimesheetResponse] @addAccountContext\n getDurationTimesheets(start: DateTime, end: DateTime): [TimesheetResponse] @addAccountContext\n}\n\nextend type Mutation {\n createTimesheet(request: TimesheetCreateRequest): Boolean @addAccountContext\n updateTimesheet(sheetId: String, request: TimesheetCreateRequest): Boolean @addAccountContext\n removeTimesheet(sheetId: String): Boolean @addAccountContext\n updateTimesheetStatus(sheetId: String, state: TimesheetState): Boolean @addAccountContext\n}\n");
1385
+ /* harmony default export */ __webpack_exports__["default"] = ("# scalar DateTime\nenum TimesheetState {\n OPEN\n APPROVED_PENDING\n APPROVED\n APPROVED_FINALIZED # --- which means no going back\n DENYED\n SUBMITTED\n DENYED_FINALIZED # --- which means no going back\n}\n\ntype Timesheets {\n orgId: String\n userId: String\n timesheets: [Timesheet]\n}\n\ntype Timesheet {\n id: ID\n userId: String\n startDate: DateTime\n endDate: DateTime\n state: TimesheetState\n submittedOn: DateTime\n approvedOn: DateTime\n approvedBy: String\n updatedBy: String # ---> userId\n updatedOn: DateTime\n timeRecordsId: [String]\n}\n\ninput TimesheetCreateRequest {\n userId: String\n startDate: DateTime\n endDate: DateTime\n state: TimesheetState\n submittedOn: DateTime\n approvedOn: DateTime\n approvedBy: String\n updatedBy: String # ---> userId\n updatedOn: DateTime\n timeRecordsId: [String]\n}\n\ntype TimesheetResponse {\n id: ID\n startDate: DateTime\n endDate: DateTime\n state: TimesheetState\n submittedOn: DateTime\n approvedOn: DateTime\n approvedBy: String\n updatedBy: String # ---> userId\n updatedOn: DateTime\n userId: String\n orgId: String\n totalDuration: Int\n}\n\nextend type Query {\n getTimesheets(userId: String, withTotalHours: Boolean): [TimesheetResponse] @addAccountContext\n getDurationTimesheets(start: DateTime, end: DateTime): [TimesheetResponse] @addAccountContext\n}\n\nextend type Mutation {\n createTimesheet(request: TimesheetCreateRequest): Boolean @addAccountContext\n updateTimesheet(sheetId: String, request: TimesheetCreateRequest): Boolean @addAccountContext\n removeTimesheet(sheetId: String): Boolean @addAccountContext\n updateTimesheetStatus(sheetId: String, state: TimesheetState): Boolean @addAccountContext\n}\n");
1386
1386
 
1387
1387
  /***/ }),
1388
1388
 
@@ -1573,7 +1573,7 @@ let TimesheetService = class TimesheetService {
1573
1573
  const timeRecords = await this.timeRecordRepository.getTimeRecords(orgId, userId);
1574
1574
  return timesheets.map((timesheet) => {
1575
1575
  const sheetTotalDuration = timeRecords
1576
- .filter((tr) => tr.userId === timesheet.userId && tr.startTime > timesheet.startDate && tr.endTime < timesheet.endDate)
1576
+ .filter((tr) => { var _a; return (_a = timesheet.timeRecordsId) === null || _a === void 0 ? void 0 : _a.includes(tr._id.toString()); })
1577
1577
  .reduce((duration, tr) => duration + Math.floor((moment(tr.endTime).valueOf() - moment(tr.startTime).valueOf()) / 1000), 0);
1578
1578
  return {
1579
1579
  id: timesheet.id,
@@ -1699,6 +1699,106 @@ TimesheetService = __decorate([
1699
1699
  exports.TimesheetService = TimesheetService;
1700
1700
 
1701
1701
 
1702
+ /***/ }),
1703
+
1704
+ /***/ "./src/store/models/timerecords-model.ts":
1705
+ /*!***********************************************!*\
1706
+ !*** ./src/store/models/timerecords-model.ts ***!
1707
+ \***********************************************/
1708
+ /*! no static exports found */
1709
+ /***/ (function(module, exports, __webpack_require__) {
1710
+
1711
+ "use strict";
1712
+
1713
+ Object.defineProperty(exports, "__esModule", { value: true });
1714
+ exports.TimeRecordsModelFunc = void 0;
1715
+ const mongoose_1 = __webpack_require__(/*! mongoose */ "mongoose");
1716
+ const PauseStatusSchema = new mongoose_1.Schema({
1717
+ pausedTime: { type: Date },
1718
+ restartTime: { type: Date },
1719
+ });
1720
+ // ===> TimeRecord
1721
+ const TimeRecordSchema = new mongoose_1.Schema({
1722
+ userId: { type: String, index: true },
1723
+ startTime: { type: Date },
1724
+ endTime: { type: Date, default: null },
1725
+ taskName: { type: String },
1726
+ description: { type: String },
1727
+ taskId: { type: String },
1728
+ tags: { type: [String] },
1729
+ isBillable: { type: Boolean },
1730
+ projectId: { type: String },
1731
+ timesheetId: { type: String },
1732
+ isPause: { type: Boolean, default: false },
1733
+ isTimeout: { type: Boolean, default: false },
1734
+ pauseStatus: { type: [PauseStatusSchema] }
1735
+ });
1736
+ TimeRecordSchema.index({ endTime: 1, startTime: 1, userId: 1 });
1737
+ const TimeRecordsSchema = new mongoose_1.Schema({
1738
+ orgId: { type: String, index: true },
1739
+ timeRecords: [TimeRecordSchema],
1740
+ });
1741
+ TimeRecordSchema.virtual('id').get(function () {
1742
+ return this._id.toHexString();
1743
+ });
1744
+ TimeRecordSchema.set('toJSON', {
1745
+ virtuals: true,
1746
+ });
1747
+ TimeRecordsSchema.set('toObject', { virtuals: true });
1748
+ exports.TimeRecordsModelFunc = (db) => db.model('timerecords', TimeRecordsSchema);
1749
+
1750
+
1751
+ /***/ }),
1752
+
1753
+ /***/ "./src/store/models/timesheets-model.ts":
1754
+ /*!**********************************************!*\
1755
+ !*** ./src/store/models/timesheets-model.ts ***!
1756
+ \**********************************************/
1757
+ /*! no static exports found */
1758
+ /***/ (function(module, exports, __webpack_require__) {
1759
+
1760
+ "use strict";
1761
+
1762
+ Object.defineProperty(exports, "__esModule", { value: true });
1763
+ exports.TimesheetsModelFunc = void 0;
1764
+ const mongoose_1 = __webpack_require__(/*! mongoose */ "mongoose");
1765
+ var TimesheetState;
1766
+ (function (TimesheetState) {
1767
+ TimesheetState[TimesheetState["OPEN"] = 0] = "OPEN";
1768
+ TimesheetState[TimesheetState["APPROVED_PENDING"] = 1] = "APPROVED_PENDING";
1769
+ TimesheetState[TimesheetState["APPROVED"] = 2] = "APPROVED";
1770
+ TimesheetState[TimesheetState["APPROVED_FINALIZED"] = 3] = "APPROVED_FINALIZED";
1771
+ TimesheetState[TimesheetState["DENYED"] = 4] = "DENYED";
1772
+ TimesheetState[TimesheetState["SUBMITTED"] = 5] = "SUBMITTED";
1773
+ TimesheetState[TimesheetState["DENYED_FINALIZED"] = 6] = "DENYED_FINALIZED";
1774
+ })(TimesheetState || (TimesheetState = {}));
1775
+ // ===> Timesheet
1776
+ const TimesheetSchema = new mongoose_1.Schema({
1777
+ userId: { type: String, index: true },
1778
+ startDate: { type: Date },
1779
+ endDate: { type: Date },
1780
+ state: { type: TimesheetState },
1781
+ submittedOn: { type: Date },
1782
+ approvedOn: { type: Date },
1783
+ approvedBy: { type: String },
1784
+ updatedBy: { type: String },
1785
+ updatedOn: { type: Date },
1786
+ timeRecordsId: { type: [String] },
1787
+ });
1788
+ const TimesheetsSchema = new mongoose_1.Schema({
1789
+ orgId: { type: String, index: true },
1790
+ timesheets: [TimesheetSchema],
1791
+ });
1792
+ TimesheetsSchema.virtual('id').get(function () {
1793
+ return this._id.toHexString();
1794
+ });
1795
+ TimesheetsSchema.set('toJSON', {
1796
+ virtuals: true,
1797
+ });
1798
+ TimesheetsSchema.set('toObject', { virtuals: true });
1799
+ exports.TimesheetsModelFunc = (db) => db.model('timesheets', TimesheetsSchema);
1800
+
1801
+
1702
1802
  /***/ }),
1703
1803
 
1704
1804
  /***/ "./src/store/models/timetracker-model.ts":
@@ -1764,6 +1864,7 @@ const TimesheetSchema = new mongoose_1.Schema({
1764
1864
  approvedBy: { type: String },
1765
1865
  updatedBy: { type: String },
1766
1866
  updatedOn: { type: Date },
1867
+ timeRecordsId: { type: [String] },
1767
1868
  });
1768
1869
  const TimeTrackerSchema = new mongoose_1.Schema({
1769
1870
  orgId: { type: String, index: true },
@@ -1835,12 +1936,12 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
1835
1936
  Object.defineProperty(exports, "__esModule", { value: true });
1836
1937
  exports.TimeRecordRepository = void 0;
1837
1938
  const inversify_1 = __webpack_require__(/*! inversify */ "inversify");
1939
+ const timerecords_model_1 = __webpack_require__(/*! ../models/timerecords-model */ "./src/store/models/timerecords-model.ts");
1838
1940
  const _ = __webpack_require__(/*! lodash */ "lodash");
1839
- const timetracker_model_1 = __webpack_require__(/*! ../models/timetracker-model */ "./src/store/models/timetracker-model.ts");
1840
1941
  let TimeRecordRepository = class TimeRecordRepository {
1841
1942
  constructor(db, logger) {
1842
1943
  this.logger = logger.child({ className: 'TimeRecordRepository' });
1843
- this.timeTrackerModel = timetracker_model_1.TimeTrackerModelFunc(db);
1944
+ this.timeRecordsModel = timerecords_model_1.TimeRecordsModelFunc(db);
1844
1945
  }
1845
1946
  async getTimeRecords(orgId, userId, from, until) {
1846
1947
  if (!userId) {
@@ -1855,7 +1956,7 @@ let TimeRecordRepository = class TimeRecordRepository {
1855
1956
  if (until) {
1856
1957
  match = Object.assign(Object.assign({}, match), { 'timeRecords.endTime': { $lte: until } });
1857
1958
  }
1858
- const result = await this.timeTrackerModel.aggregate([
1959
+ const result = await this.timeRecordsModel.aggregate([
1859
1960
  {
1860
1961
  $match: {
1861
1962
  orgId,
@@ -1888,14 +1989,14 @@ let TimeRecordRepository = class TimeRecordRepository {
1888
1989
  return result[0].timeRecords;
1889
1990
  }
1890
1991
  async getOrganizationTimeRecords(orgId) {
1891
- const trackDoc = await this.timeTrackerModel.findOne({ orgId });
1992
+ const trackDoc = await this.timeRecordsModel.findOne({ orgId });
1892
1993
  if (trackDoc && trackDoc.timeRecords) {
1893
1994
  return trackDoc.timeRecords;
1894
1995
  }
1895
1996
  return [];
1896
1997
  }
1897
1998
  async getPlayingTimeRecord(userId, orgId) {
1898
- const trackDoc = await this.timeTrackerModel.findOne({ orgId });
1999
+ const trackDoc = await this.timeRecordsModel.findOne({ orgId });
1899
2000
  if (trackDoc) {
1900
2001
  let res;
1901
2002
  if (trackDoc.timeRecords)
@@ -1906,7 +2007,7 @@ let TimeRecordRepository = class TimeRecordRepository {
1906
2007
  }
1907
2008
  async createTimeRecord(userId, orgId, request) {
1908
2009
  try {
1909
- const response = await this.timeTrackerModel.findOneAndUpdate({ orgId }, { orgId, $push: { timeRecords: request } }, {
2010
+ const response = await this.timeRecordsModel.findOneAndUpdate({ orgId }, { orgId, $push: { timeRecords: request } }, {
1910
2011
  upsert: true,
1911
2012
  new: true,
1912
2013
  projection: { userId, orgId, timeRecords: { $elemMatch: { startTime: request.startTime } } },
@@ -1925,7 +2026,7 @@ let TimeRecordRepository = class TimeRecordRepository {
1925
2026
  _.forIn(request, (value, key) => {
1926
2027
  setRequest = Object.assign(Object.assign({}, setRequest), { [`timeRecords.$.${key}`]: value });
1927
2028
  });
1928
- const response = await this.timeTrackerModel.findOneAndUpdate({ orgId, timeRecords: { $elemMatch: { _id: recordId } } }, {
2029
+ const response = await this.timeRecordsModel.findOneAndUpdate({ orgId, timeRecords: { $elemMatch: { _id: recordId } } }, {
1929
2030
  $set: Object.assign({}, setRequest),
1930
2031
  }, {
1931
2032
  new: true,
@@ -1943,7 +2044,7 @@ let TimeRecordRepository = class TimeRecordRepository {
1943
2044
  }
1944
2045
  async removeTimeRecord(userId, orgId, recordId) {
1945
2046
  try {
1946
- const result = await this.timeTrackerModel.update({
2047
+ const result = await this.timeRecordsModel.update({
1947
2048
  orgId,
1948
2049
  }, {
1949
2050
  $pull: { timeRecords: { _id: recordId } },
@@ -1959,10 +2060,10 @@ let TimeRecordRepository = class TimeRecordRepository {
1959
2060
  }
1960
2061
  async removeDurationTimeRecords(userId, orgId, startTime, endTime, projectId) {
1961
2062
  try {
1962
- const trackerDoc = await this.timeTrackerModel.find({ orgId });
2063
+ const trackerDoc = await this.timeRecordsModel.find({ orgId });
1963
2064
  if (trackerDoc && trackerDoc.length > 0) {
1964
2065
  const timeRecords = trackerDoc[0].timeRecords.filter((tr) => tr.startTime < startTime || tr.startTime > endTime || tr.projectId !== projectId);
1965
- await this.timeTrackerModel.update({
2066
+ await this.timeRecordsModel.update({
1966
2067
  orgId,
1967
2068
  }, {
1968
2069
  timeRecords,
@@ -1977,7 +2078,7 @@ let TimeRecordRepository = class TimeRecordRepository {
1977
2078
  }
1978
2079
  async approveTimeRecords(orgId, sheetId, startDate, endDate) {
1979
2080
  try {
1980
- await this.timeTrackerModel.updateMany({
2081
+ await this.timeRecordsModel.updateMany({
1981
2082
  orgId,
1982
2083
  }, { $set: { 'timeRecords.$[el].timesheetId': sheetId } }, {
1983
2084
  multi: true,
@@ -1997,7 +2098,7 @@ let TimeRecordRepository = class TimeRecordRepository {
1997
2098
  }
1998
2099
  async disapproveTimeRecords(orgId, sheetId) {
1999
2100
  try {
2000
- await this.timeTrackerModel.updateMany({
2101
+ await this.timeRecordsModel.updateMany({
2001
2102
  orgId,
2002
2103
  }, { $set: { 'timeRecords.$[el].timesheetId': null } }, {
2003
2104
  multi: true,
@@ -2045,16 +2146,17 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
2045
2146
  Object.defineProperty(exports, "__esModule", { value: true });
2046
2147
  exports.TimesheetRepository = void 0;
2047
2148
  const inversify_1 = __webpack_require__(/*! inversify */ "inversify");
2149
+ const _ = __webpack_require__(/*! lodash */ "lodash");
2048
2150
  const core_1 = __webpack_require__(/*! @common-stack/core */ "@common-stack/core");
2049
- const timetracker_model_1 = __webpack_require__(/*! ../models/timetracker-model */ "./src/store/models/timetracker-model.ts");
2151
+ const timesheets_model_1 = __webpack_require__(/*! ../models/timesheets-model */ "./src/store/models/timesheets-model.ts");
2050
2152
  let TimesheetRepository = class TimesheetRepository {
2051
2153
  constructor(db, logger, broker) {
2052
2154
  this.broker = broker;
2053
2155
  this.logger = logger.child({ className: 'TimesheetRepository' });
2054
- this.timeTrackerModel = timetracker_model_1.TimeTrackerModelFunc(db);
2156
+ this.timesheetsModel = timesheets_model_1.TimesheetsModelFunc(db);
2055
2157
  }
2056
2158
  async getOrganizationTimesheets(orgId) {
2057
- const trackDoc = await this.timeTrackerModel.findOne({ orgId });
2159
+ const trackDoc = await this.timesheetsModel.findOne({ orgId });
2058
2160
  if (trackDoc && trackDoc.timesheets) {
2059
2161
  return trackDoc.timesheets;
2060
2162
  }
@@ -2066,7 +2168,7 @@ let TimesheetRepository = class TimesheetRepository {
2066
2168
  }
2067
2169
  async createTimesheet(userId, orgId, request) {
2068
2170
  try {
2069
- const response = await this.timeTrackerModel.update({ orgId }, { $push: { timesheets: request } }, { upsert: true });
2171
+ const response = await this.timesheetsModel.update({ orgId }, { $push: { timesheets: request } }, { upsert: true });
2070
2172
  return true;
2071
2173
  }
2072
2174
  catch (err) {
@@ -2075,7 +2177,11 @@ let TimesheetRepository = class TimesheetRepository {
2075
2177
  }
2076
2178
  async updateTimesheet(orgId, sheetId, request) {
2077
2179
  try {
2078
- const response = await this.timeTrackerModel.update({ orgId, timesheets: { $elemMatch: { _id: sheetId } } }, { $set: { 'timesheets.$': request } });
2180
+ let setRequest = {};
2181
+ _.forIn(request, (value, key) => {
2182
+ setRequest = Object.assign(Object.assign({}, setRequest), { [`timesheets.$.${key}`]: value });
2183
+ });
2184
+ const response = await this.timesheetsModel.update({ orgId, timesheets: { $elemMatch: { _id: sheetId } } }, { $set: Object.assign({}, setRequest) });
2079
2185
  return response;
2080
2186
  }
2081
2187
  catch (err) {
@@ -2084,7 +2190,7 @@ let TimesheetRepository = class TimesheetRepository {
2084
2190
  }
2085
2191
  async updateTimesheetStatus(orgId, sheetId, state) {
2086
2192
  try {
2087
- const response = await this.timeTrackerModel.update({
2193
+ const response = await this.timesheetsModel.update({
2088
2194
  orgId,
2089
2195
  $elemMatch: { 'timesheets.id': sheetId },
2090
2196
  }, {
@@ -2100,7 +2206,7 @@ let TimesheetRepository = class TimesheetRepository {
2100
2206
  }
2101
2207
  async removeTimesheet(userId, orgId, sheetId) {
2102
2208
  try {
2103
- await this.timeTrackerModel.update({
2209
+ await this.timesheetsModel.update({
2104
2210
  orgId,
2105
2211
  }, {
2106
2212
  $pull: { timesheets: { _id: sheetId } },
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/config/config.ts","webpack:///./src/config/index.ts","webpack:///./src/constants/constants.ts","webpack:///./src/constants/index.ts","webpack:///./src/containers/containers.ts","webpack:///./src/containers/index.ts","webpack:///./src/index.ts","webpack:///./src/initialization/index.ts","webpack:///./src/initialization/service-initialization.ts","webpack:///./src/migration/approval_notification.ejs","webpack:///./src/migration/index.ts","webpack:///./src/migration/mail-template.ts","webpack:///./src/migration/submit_notification.ejs","webpack:///./src/module.ts","webpack:///./src/preferences/index.ts","webpack:///./src/preferences/permissions/index.ts","webpack:///./src/preferences/permissions/timing-permissions-contribution.ts","webpack:///./src/preferences/permissions/timing-roles-permission-overwrite.ts","webpack:///./src/preferences/settings/general-settings.ts","webpack:///./src/preferences/settings/index.ts","webpack:///./src/preferences/settings/payment-settings.ts","webpack:///./src/resolvers/index.ts","webpack:///./src/resolvers/timerecord-resolver.ts","webpack:///./src/resolvers/timesheet-resolver.ts","webpack:///./src/schema/common-schema.graphql","webpack:///./src/schema/index.ts","webpack:///./src/schema/timerecord-schema.graphql","webpack:///./src/schema/timesheet-schema.graphql","webpack:///./src/schema/timetracker-schema.graphql","webpack:///./src/services/index.ts","webpack:///./src/services/timerecord-service.ts","webpack:///./src/services/timesheet-service.ts","webpack:///./src/store/models/timetracker-model.ts","webpack:///./src/store/repository/index.ts","webpack:///./src/store/repository/timerecord-repository.ts","webpack:///./src/store/repository/timesheet-repository.ts","webpack:///external \"@adminide-stack/core\"","webpack:///external \"@common-stack/core\"","webpack:///external \"@common-stack/server-core\"","webpack:///external \"@vscode-alt/monaco-editor/esm/vs/nls\"","webpack:///external \"@workbench-stack/core\"","webpack:///external \"envalid\"","webpack:///external \"graphql-subscriptions\"","webpack:///external \"inversify\"","webpack:///external \"lodash\"","webpack:///external \"moment\"","webpack:///external \"mongoose\""],"names":[],"mappings":"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","file":"index.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/index.ts\");\n","/* eslint-disable import/no-extraneous-dependencies */\nimport * as envalid from 'envalid';\n\nconst { str, num } = envalid;\n\nexport const config = envalid.cleanEnv(process.env, {\n MAIL_SEND_DEFAULT_EMAIL: str(),\n CLIENT_URL: str(),\n});\n","export * from './config';\n","export const DEFAULT_USER = '123';\nexport const DEFAULT_ORG = '123';\nexport const TYPES = {\n ITimeTrackerService: Symbol('ITimeTrackerService'),\n ITimeRecordService: Symbol('ITimeRecordService'),\n ITimesheetService: Symbol('ITimesheetService'),\n ITimeTrackerRepository: Symbol('ITimeTrackerRepository'),\n ITimeRecordRepository: Symbol('ITimeRecordRepository'),\n ITimesheetRepository: Symbol('ITimesheetRepository'),\n ITaskRepository: Symbol('ITaskRepository'),\n ITaskService: Symbol('ITaskService'),\n};\n\nexport const EmailTemplateCodes = {\n TIMESHEET_APPROVAL: 'TIMESHEET_APPROVAL_EMAIL_TEMPLATE',\n ENABLE_TIMETRACKER: 'ENABLE_TIMETRACKER_EMAIL_TEMPLATE',\n SUBMIT_TIME: 'SUBMIT_TIME_EMAIL_TEMPLATE',\n TIMETRACKING_STOP: 'TIMETRACKING_STOP_TEMPLATE',\n};\n\nexport enum IPreDefineAccountPermissions {\n // others\n viewOthersTimeTracker = 'organization.timetracker.others.view',\n createOthersTimeTracker = 'organization.timetracker.others.create',\n editOthersTimeTracker = 'organization.timetracker.others.edit',\n deleteOthersTimeTracker = 'organization.timetracker.others.delete',\n manageOthersTimeTracker = 'organization.timetracker.others.manage',\n\n // self\n viewSelfTimeTracker = 'organization.timetracker.self.view',\n createSelfTimeTracker = 'organization.timetracker.self.create',\n editSelfTimeTracker = 'organization.timetracker.self.edit',\n deleteSelfTimeTracker = 'organization.timetracker.self.delete',\n manageSelfTimeTracker = 'organization.timetracker.self.manage',\n}\n","export * from './constants';\n","import { ContainerModule, interfaces } from 'inversify';\nimport { TYPES } from '../constants';\nimport { TimeRecordService, TimesheetService } from '../services';\nimport { TimeRecordRepository, TimesheetRepository } from '../store/repository';\nimport { TimesheetApprovalMailTemplate, TimesheetSubmitMailTemplate } from '../migration';\n\nexport const timeTrackerModule: (settings: any) => ContainerModule = (setting) =>\n new ContainerModule((bind: interfaces.Bind) => {\n bind(TYPES.ITimeRecordRepository).to(TimeRecordRepository).inSingletonScope().whenTargetIsDefault();\n bind(TYPES.ITimesheetRepository).to(TimesheetRepository).inSingletonScope().whenTargetIsDefault();\n bind(TYPES.ITimeRecordService).to(TimeRecordService).inSingletonScope().whenTargetIsDefault();\n bind(TYPES.ITimesheetService).to(TimesheetService).inSingletonScope().whenTargetIsDefault();\n\n bind('MongodbMigration').to(TimesheetApprovalMailTemplate).whenTargetNamed(TimesheetApprovalMailTemplate.name);\n bind('MongodbMigration').to(TimesheetSubmitMailTemplate).whenTargetNamed(TimesheetSubmitMailTemplate.name);\n });\n","export * from './containers';\n","import { Feature } from '@common-stack/server-core';\nimport TimeTracker from './module';\n\nexport * from './constants';\nexport * from './store/repository';\nexport * from './store/models/timetracker-model';\n\nexport default new Feature(TimeTracker);\n","export * from './service-initialization';\n","/* eslint-disable import/no-extraneous-dependencies */\nimport { IRegistryExtensions as RegistryExtensions, IConfigurationRegistry, IRegistry } from '@adminide-stack/core';\nimport * as ILogger from 'bunyan';\nimport { TYPES as serverTypes, Schemas } from '@workbench-stack/core';\nimport { CommonType } from '@common-stack/core';\nimport { interfaces } from 'inversify';\nimport { TimeTrackerContribution } from '../preferences';\n\nexport const mainLoadConfigurationPre = async (_, container: interfaces.Container) => {\n const logger = container.get<ILogger>(CommonType.LOGGER);\n logger.info('PRESTART START: -- load TimeTrackerContribution to registry');\n\n const registry = container.get<IRegistry>(serverTypes.IRegistry);\n const configurationRegistry = registry.as<IConfigurationRegistry>(RegistryExtensions.Configuration);\n configurationRegistry.registerConfiguration(TimeTrackerContribution);\n logger.info('PRESTART ENDS: -- load TimeTrackerContribution to registry');\n};\n","export default \"<html>\\n <head>\\n\\n </head>\\n\\n <body>\\n <h1> Timesheet has approved! </h1>\\n <p> Dear <%= name %>! </p>\\n <p> Your timesheet from <bold> <%= startDate %> </bold> to <bold> <%= endDate %> </bold> has been approved! </p>\\n You can see timesheet details <a href=\\\"<%= timesheet_url %>\\\" __target=\\\"blank\\\"> here </a>\\n\\n <br /> <br />\\n <p> If you have any problem, please <a href=\\\"<%= contact_url %>\\\"> Contact us </a></p>\\n </body>\\n</html>\";","export * from './mail-template'","/* eslint-disable max-classes-per-file */\nimport * as Logger from 'bunyan';\nimport { injectable, inject, tagged } from 'inversify';\nimport { IDatabaseMigration } from '@adminide-stack/core';\nimport { IMoleculerServiceName, IMailServiceAction, IMailerServicesendArgs } from '@container-stack/mailing-api';\nimport { CommonType, TaggedType } from '@common-stack/core';\nimport { CallingOptions, ServiceBroker } from 'moleculer';\nimport { EmailTemplateCodes } from '../constants';\nimport { config } from '../config';\n\nconst TimeApprovalTemplate = require('./approval_notification.ejs');\nconst TimeSubmitTemplate = require('./submit_notification.ejs');\n\n@injectable()\nexport class TimesheetApprovalMailTemplate implements IDatabaseMigration {\n constructor(\n @inject(CommonType.MOLECULER_BROKER)\n protected broker: ServiceBroker,\n @inject('Settings')\n @tagged(TaggedType.MICROSERVICE, true)\n private settings: any,\n ) { }\n\n get id() {\n return 'EmailTemplateCodes_05012021';\n }\n\n public async up(): Promise<void> {\n const requestData = {\n engine: 'ejs',\n code: EmailTemplateCodes.TIMESHEET_APPROVAL,\n description: 'Timesheet approved',\n html: TimeApprovalTemplate.default,\n text: 'Timesheet approved',\n name: 'Timesheet approval notification',\n topic: 'Timesheet approved.',\n };\n\n if (config.isDev) {\n await this.broker.waitForServices('MailService');\n }\n\n return this.callAction(\n IMailServiceAction.saveTemplate,\n { request: requestData },\n IMoleculerServiceName.MailService,\n );\n }\n\n private async callAction<T, P = any>(command: string, params?: P, topic?: string, opts?: CallingOptions) {\n return this.broker.call<T, P>(`${topic}.${command}@${this.settings.adminApiNamespace}`, params, opts);\n }\n}\n\n@injectable()\nexport class TimesheetSubmitMailTemplate implements IDatabaseMigration {\n constructor(\n @inject(CommonType.MOLECULER_BROKER)\n protected broker: ServiceBroker,\n @inject('Settings')\n @tagged(TaggedType.MICROSERVICE, true)\n private settings: any,\n ) { }\n\n get id() {\n return 'TimesheetSubmitMailTemplate_05012021';\n }\n\n public async up(): Promise<void> {\n const requestData = {\n engine: 'ejs',\n code: EmailTemplateCodes.SUBMIT_TIME,\n description: 'Timesheet submitted',\n html: TimeSubmitTemplate.default,\n text: 'Timesheet submitted',\n name: 'Timesheet submit notification',\n topic: 'Timesheet submitted.',\n };\n if (config.isDev) {\n await this.broker.waitForServices('MailService');\n }\n\n return this.callAction(\n IMailServiceAction.saveTemplate,\n { request: requestData },\n IMoleculerServiceName.MailService,\n );\n }\n\n private async callAction<T, P = any>(command: string, params?: P, topic?: string, opts?: CallingOptions) {\n return this.broker.call<T, P>(`${topic}.${command}@${this.settings.adminApiNamespace}`, params, opts);\n }\n}\n","export default \"<html>\\n <head>\\n\\n </head>\\n\\n <body>\\n <h1> Timesheet has submitted! </h1>\\n <p> Dear <%= name %>! </p>\\n <p> Your timesheet from <bold> <%= startDate %> </bold> to <bold> <%= endDate %> </bold> has been submitted! </p>\\n You can see timesheet details <a href=\\\"<%= timesheet_url %>\\\" __target=\\\"blank\\\"> here </a>\\n\\n <br /> <br />\\n <p> If you have any problem, please <a href=\\\"<%= contact_url %>\\\"> Contact us </a></p>\\n </body>\\n</html>\";","import { Feature } from '@common-stack/server-core';\nimport { interfaces } from 'inversify';\nimport { schema } from './schema';\nimport { timeTrackerModule } from './containers';\nimport { resolvers } from './resolvers';\nimport { TYPES } from './constants';\nimport { mainLoadConfigurationPre } from './initialization';\nimport { TimeTrackerRolesContribution, TimeTrackerRolesPermissionOverwrite } from './preferences';\n\nconst createServiceFunc = (container: interfaces.Container) => ({\n timeRecordService: container.get(TYPES.ITimeRecordService),\n timesheetService: container.get(TYPES.ITimesheetService),\n});\n\nexport default new Feature({\n schema,\n createResolversFunc: resolvers,\n createContainerFunc: [timeTrackerModule],\n createServiceFunc,\n preStartFunc: [mainLoadConfigurationPre],\n addPermissions: {\n createPermissions: [TimeTrackerRolesContribution],\n },\n rolesUpdate: {\n overwriteRolesPermissions: TimeTrackerRolesPermissionOverwrite,\n },\n});\n","export * from './settings';\nexport * from './permissions';\n","export * from './timing-permissions-contribution';\nexport * from './timing-roles-permission-overwrite';\n","import { ConfigurationScope, IPermissionType } from '@adminide-stack/core';\nimport * as nls from '@vscode-alt/monaco-editor/esm/vs/nls';\nimport { IRoles } from '@common-stack/server-core';\nimport { IPreDefineAccountPermissions } from '../../constants';\n\nconst extraParams = {\n type: 'string',\n enum: [IPermissionType.Allow, IPermissionType.Deny, IPermissionType.NotSet],\n default: IPermissionType.NotSet,\n scope: ConfigurationScope.WINDOW,\n};\nexport const TimeTrackerRolesContribution: IRoles<ConfigurationScope> = {\n // others\n [IPreDefineAccountPermissions.viewOthersTimeTracker]: {\n enumDescriptions: [\n nls.localize(\n `${IPreDefineAccountPermissions.viewOthersTimeTracker}.${IPermissionType.Allow}`,\n 'Has ability to view Time Tracker, Reports and Timesheet of other members.',\n ),\n nls.localize(\n `${IPreDefineAccountPermissions.viewOthersTimeTracker}.${IPermissionType.Deny}`,\n 'No ability to view Time Tracker, Reports and Timesheet of other members.',\n ),\n ],\n description: nls.localize(\n IPreDefineAccountPermissions.viewOthersTimeTracker,\n 'View an Time Tracker, Time Reports and Timesheet of others.',\n ),\n ...extraParams,\n },\n [IPreDefineAccountPermissions.createOthersTimeTracker]: {\n enumDescriptions: [\n nls.localize(\n `${IPreDefineAccountPermissions.createOthersTimeTracker}.${IPermissionType.Allow}`,\n 'Has ability to create Time Tracker, Reports and Timesheet of other members.',\n ),\n nls.localize(\n `${IPreDefineAccountPermissions.createOthersTimeTracker}.${IPermissionType.Deny}`,\n 'No ability to create Time Tracker, Reports and Timesheet of other members.',\n ),\n ],\n description: nls.localize(\n IPreDefineAccountPermissions.createOthersTimeTracker,\n 'Create Time Tracker, Reports and Timesheet of other members.',\n ),\n ...extraParams,\n },\n [IPreDefineAccountPermissions.editOthersTimeTracker]: {\n enumDescriptions: [\n nls.localize(\n `${IPreDefineAccountPermissions.editOthersTimeTracker}.${IPermissionType.Allow}`,\n 'Has ability to edit Time Tracker, Reports and Timesheet of other members.',\n ),\n nls.localize(\n `${IPreDefineAccountPermissions.editOthersTimeTracker}.${IPermissionType.Deny}`,\n 'No ability to edit Time Tracker, Reports and Timesheet of other members.',\n ),\n ],\n description: nls.localize(\n IPreDefineAccountPermissions.editOthersTimeTracker,\n 'Manage Time Tracker, Reports and Timesheet of other members',\n ),\n ...extraParams,\n },\n [IPreDefineAccountPermissions.manageOthersTimeTracker]: {\n enumDescriptions: [\n nls.localize(\n `${IPreDefineAccountPermissions.manageOthersTimeTracker}.${IPermissionType.Allow}`,\n 'Has ability to manage Time Tracker, Reports and Timesheet of other members.',\n ),\n nls.localize(\n `${IPreDefineAccountPermissions.manageOthersTimeTracker}.${IPermissionType.Deny}`,\n 'No ability to manage Time Tracker, Reports and Timesheet of other members.',\n ),\n ],\n description: nls.localize(\n IPreDefineAccountPermissions.manageOthersTimeTracker,\n 'Manage Time Tracker, Reports and Timesheet of other members',\n ),\n ...extraParams,\n },\n [IPreDefineAccountPermissions.deleteOthersTimeTracker]: {\n enumDescriptions: [\n nls.localize(\n `${IPreDefineAccountPermissions.deleteOthersTimeTracker}.${IPermissionType.Allow}`,\n 'Has ability to delete Time Tracker and Timesheet of other members.',\n ),\n nls.localize(\n `${IPreDefineAccountPermissions.deleteOthersTimeTracker}.${IPermissionType.Deny}`,\n 'No ability to delete Time Tracker and Timesheet of other members.',\n ),\n ],\n description: nls.localize(\n IPreDefineAccountPermissions.deleteOthersTimeTracker,\n 'Delete Time Tracker and Timesheet of other members.',\n ),\n ...extraParams,\n },\n // self\n [IPreDefineAccountPermissions.viewSelfTimeTracker]: {\n enumDescriptions: [\n nls.localize(\n `${IPreDefineAccountPermissions.viewSelfTimeTracker}.${IPermissionType.Allow}`,\n 'Has ability to view Time Tracker, Reports and Timesheet of self.',\n ),\n nls.localize(\n `${IPreDefineAccountPermissions.viewSelfTimeTracker}.${IPermissionType.Deny}`,\n 'No ability to view Time Tracker, Reports and Timesheet of self.',\n ),\n ],\n description: nls.localize(\n IPreDefineAccountPermissions.viewSelfTimeTracker,\n 'View an Time Tracker, Time Reports and Timesheet of self',\n ),\n ...extraParams,\n },\n [IPreDefineAccountPermissions.createSelfTimeTracker]: {\n enumDescriptions: [\n nls.localize(\n `${IPreDefineAccountPermissions.createSelfTimeTracker}.${IPermissionType.Allow}`,\n 'Has ability to create Time Tracker, Reports and Timesheet of self.',\n ),\n nls.localize(\n `${IPreDefineAccountPermissions.createSelfTimeTracker}.${IPermissionType.Deny}`,\n 'No ability to create Time Tracker, Reports and Timesheet of self.',\n ),\n ],\n description: nls.localize(\n IPreDefineAccountPermissions.createSelfTimeTracker,\n 'Create Time Tracker, Reports and Timesheet of self.',\n ),\n ...extraParams,\n },\n [IPreDefineAccountPermissions.editSelfTimeTracker]: {\n enumDescriptions: [\n nls.localize(\n `${IPreDefineAccountPermissions.editSelfTimeTracker}.${IPermissionType.Allow}`,\n 'Has ability to edit Time Tracker, Reports and Timesheet of self.',\n ),\n nls.localize(\n `${IPreDefineAccountPermissions.editSelfTimeTracker}.${IPermissionType.Deny}`,\n 'No ability to edit Time Tracker, Reports and Timesheet of self.',\n ),\n ],\n description: nls.localize(\n IPreDefineAccountPermissions.editSelfTimeTracker,\n 'Manage Time Tracker, Reports and Timesheet of self.',\n ),\n ...extraParams,\n },\n [IPreDefineAccountPermissions.manageSelfTimeTracker]: {\n enumDescriptions: [\n nls.localize(\n `${IPreDefineAccountPermissions.manageSelfTimeTracker}.${IPermissionType.Allow}`,\n 'Has ability to manage Time Tracker, Reports and Timesheet of self.',\n ),\n nls.localize(\n `${IPreDefineAccountPermissions.manageSelfTimeTracker}.${IPermissionType.Deny}`,\n 'No ability to manage Time Tracker, Reports and Timesheet of self.',\n ),\n ],\n description: nls.localize(\n IPreDefineAccountPermissions.manageSelfTimeTracker,\n 'Manage Time Tracker, Reports and Timesheet of self.',\n ),\n ...extraParams,\n },\n [IPreDefineAccountPermissions.deleteSelfTimeTracker]: {\n enumDescriptions: [\n nls.localize(\n `${IPreDefineAccountPermissions.deleteSelfTimeTracker}.${IPermissionType.Allow}`,\n 'Has ability to delete Time Tracker and Timesheet of self.',\n ),\n nls.localize(\n `${IPreDefineAccountPermissions.deleteSelfTimeTracker}.${IPermissionType.Deny}`,\n 'No ability to delete Time Tracker and Timesheet of self.',\n ),\n ],\n description: nls.localize(\n IPreDefineAccountPermissions.deleteSelfTimeTracker,\n 'Delete Time Tracker and Timesheet of self.',\n ),\n ...extraParams,\n },\n};\n","import { IPermissionType, IApplicationRoles } from '@adminide-stack/core';\nimport { IPreDefineAccountPermissions } from '../../constants';\n\nexport const TimeTrackerRolesPermissionOverwrite = {\n [IApplicationRoles.OWNER]: {\n // self\n [IPreDefineAccountPermissions.viewSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.createSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.editSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.deleteSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.manageSelfTimeTracker]: IPermissionType.Allow,\n\n // others\n [IPreDefineAccountPermissions.viewOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.createOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.editOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.deleteOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.manageOthersTimeTracker]: IPermissionType.Allow,\n },\n [IApplicationRoles.ADMIN]: {\n [IPreDefineAccountPermissions.viewSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.createSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.editSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.deleteSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.manageSelfTimeTracker]: IPermissionType.Deny,\n\n [IPreDefineAccountPermissions.viewOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.createOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.editOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.deleteOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.manageOthersTimeTracker]: IPermissionType.Allow,\n },\n [IApplicationRoles.ORGANIZATION_MANAGER]: {\n [IPreDefineAccountPermissions.viewSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.createSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.editSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.deleteSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.manageSelfTimeTracker]: IPermissionType.Allow,\n\n [IPreDefineAccountPermissions.viewOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.createOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.editOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.deleteOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.manageOthersTimeTracker]: IPermissionType.Allow,\n },\n [IApplicationRoles.PROJECT_ADMIN]: {\n [IPreDefineAccountPermissions.viewSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.createSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.editSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.deleteSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.manageSelfTimeTracker]: IPermissionType.Deny,\n\n [IPreDefineAccountPermissions.viewOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.createOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.editOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.deleteOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.manageOthersTimeTracker]: IPermissionType.Allow,\n },\n [IApplicationRoles.MEMBER]: {\n [IPreDefineAccountPermissions.viewSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.createSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.editSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.deleteSelfTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.manageSelfTimeTracker]: IPermissionType.Deny,\n\n [IPreDefineAccountPermissions.viewOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.createOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.editOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.deleteOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.manageOthersTimeTracker]: IPermissionType.Deny,\n },\n [IApplicationRoles.PROJECT_VIEWER]: {\n [IPreDefineAccountPermissions.viewSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.createSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.editSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.deleteSelfTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.manageSelfTimeTracker]: IPermissionType.Deny,\n\n [IPreDefineAccountPermissions.viewOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.createOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.editOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.deleteOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.manageOthersTimeTracker]: IPermissionType.Deny,\n },\n [IApplicationRoles.USER]: {\n [IPreDefineAccountPermissions.viewSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.createSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.editSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.deleteSelfTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.manageSelfTimeTracker]: IPermissionType.Deny,\n\n [IPreDefineAccountPermissions.viewOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.createOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.editOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.deleteOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.manageOthersTimeTracker]: IPermissionType.Deny,\n },\n [IApplicationRoles.GUEST]: {\n [IPreDefineAccountPermissions.viewSelfTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.createSelfTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.editSelfTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.deleteSelfTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.manageSelfTimeTracker]: IPermissionType.Deny,\n\n [IPreDefineAccountPermissions.viewOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.createOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.editOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.deleteOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.manageOthersTimeTracker]: IPermissionType.Deny,\n },\n};\n","import { ConfigurationScope, IConfigurationPropertySchema } from '@adminide-stack/core';\nimport { localize } from '@vscode-alt/monaco-editor/esm/vs/nls';\n// const localize = (id, defaultMessage) => defineMessages({\n// id,\n// defaultMessage,\n\n// });\nconst enum TimeFormat {\n ROUNDED_0_00_12 = 'h.mm A',\n ROUNDED_0_00_24 = 'H.mm',\n PRECISE_00_00_00_12 = 'hh:mm:ss A',\n PRECISE_00_00_00_24 = 'HH:mm:ss',\n ROUNDED_UP_00_00_12 = 'hh:mm A',\n ROUNDED_UP_00_00_24 = 'HH:mm',\n}\n\nconst enum GroupProjectsBy {\n CLIENT = 'Client',\n CATEGORY = 'Category',\n CUSTOM = 'Custom',\n}\nconst enum DateFormat {\n USFORMAT = 'MM-DD-YYYY',\n UKFORMAT = 'DD-MM-YYYY',\n ISOFORMAT = 'YYYY-MM-DD',\n}\n\nexport const enum WeekDay {\n SUN = 'Sunday',\n MON = 'Monday',\n TUE = 'Tuesday',\n WED = 'Wednesday',\n THU = 'Thursday',\n FRI = 'Friday',\n SAT = 'Saturday',\n}\n\nconst enum FristWeekOfTheYear {\n FIRST_DAY = 'Week containing first day of the year',\n FIRST_FULL_7DAY = 'First full seven-day week in January',\n FIRST_4_DAY = 'First four-day week in January',\n}\n\nconst enum TimeRoundingUpToValue {\n IN_MINUTES_15 = 15 * 60,\n IN_MINUTES_1 = 1 * 60,\n IN_MINUTES_5 = 5 * 60,\n IN_MINUTES_6 = 6 * 60,\n IN_MINUTES_10 = 10 * 60,\n IN_MINUTES_12 = 12 * 60,\n IN_MINUTES_30 = 30 * 60,\n IN_HOUR_1 = 1 * 60 * 60,\n IN_HOUR_4 = 4 * 60 * 60,\n}\n\nconst enum TimeRoundedType {\n ROUND_UP_TO = 'Round up to',\n ROUND_TO_NEAREST = 'Round to nearest',\n ROUND_DOWN_TO = 'Roudn down to',\n}\nexport const TimeTrackerProperties: { [path: string]: IConfigurationPropertySchema } = {\n // notifications\n 'timetracker.notifications.enableTimetrackerNotifications': {\n type: 'boolean',\n default: true,\n description: localize(\n 'timetracker.notifications.timeTrackingNotification',\n 'Allow timetracker emails to be send',\n ),\n scope: ConfigurationScope.WINDOW,\n },\n\n 'timetracker.notifications.timeTrackingNotifications': {\n type: 'boolean',\n default: true,\n description: localize(\n 'timetracker.notifications.timeTrackingNotification',\n 'An email will be send when tracking is stopped by the system due to lack of user response',\n ),\n scope: ConfigurationScope.WINDOW,\n },\n 'timetracker.notifications.approvalNotifications': {\n type: 'boolean',\n default: true,\n description: localize(\n 'timetracker.notifications.approvalNotifications',\n 'An email will be sent to me when my timesheet is approved',\n ),\n scope: ConfigurationScope.WINDOW,\n },\n 'timetracker.notifications.submitNotifications': {\n type: 'boolean',\n default: true,\n description: localize(\n 'timetracker.notifications.submitNotifications',\n 'An email will be sent to me when team member submits time (Approval Managers only)',\n ),\n scope: ConfigurationScope.WINDOW,\n },\n\n // Time Tracking\n 'timetracker.activity.autoStop': {\n type: 'number',\n default: 24,\n description: localize(\n 'timetracker.activity.autoStop',\n 'Tracking will stop once maximum tack length has been exceeded',\n ),\n scope: ConfigurationScope.WINDOW,\n },\n 'timetracker.activity.waitingTime': {\n type: 'number',\n default: 120,\n description: localize(\n 'timetracker.activity.waitingTime',\n 'Enable activity check on the time tracking to ask if you are still tracking after the choosen idle time (in seconds)',\n ),\n scope: ConfigurationScope.WINDOW,\n },\n 'timetracker.activity.maxTimeInADay': {\n type: 'number',\n default: 120,\n description: localize(\n 'timetracker.activity.maxTimeInADay',\n 'Enable activity check on the time tracking upto choosen max time in a day(in seconds). It can change upto 1440',\n ),\n scope: ConfigurationScope.WINDOW,\n },\n 'timetracker.timerecord.automaticLock': {\n type: 'string',\n default: null,\n description: localize(\n 'accountNotificationPrimaryEmail',\n 'Prevent regular users from editing their past time or adding new entries to past dates',\n ),\n scope: ConfigurationScope.RESOURCE,\n },\n 'timetracker.project.billable': {\n type: 'boolean',\n default: true,\n description: localize(\n 'timetracker.project.billable',\n 'When you create a project, make it billable so its time entries are set as billable by default.',\n ),\n scope: ConfigurationScope.WINDOW,\n },\n 'timetracker.project.daysAllowedToWork': {\n type: ['string'],\n default: [WeekDay.MON, WeekDay.TUE, WeekDay.WED, WeekDay.THU, WeekDay.FRI],\n enum: [WeekDay.MON, WeekDay.TUE, WeekDay.WED, WeekDay.THU, WeekDay.FRI, WeekDay.SAT, WeekDay.SUN],\n description: localize('timetracker.project.recurringDailyLimit', 'Select working day'),\n scope: ConfigurationScope.RESOURCE,\n },\n 'timetracker.project.firstDayOfTheWeek': {\n type: 'string',\n enum: [WeekDay.MON, WeekDay.TUE, WeekDay.WED, WeekDay.THU, WeekDay.FRI, WeekDay.SAT, WeekDay.SUN],\n default: WeekDay.MON,\n description: localize('timetracker.project.firstDayOfTheWeek', 'First day of the week'),\n scope: ConfigurationScope.RESOURCE,\n },\n 'timetracker.project.firstWeekOfTheyear': {\n type: 'string',\n enum: [FristWeekOfTheYear.FIRST_4_DAY, FristWeekOfTheYear.FIRST_FULL_7DAY, FristWeekOfTheYear.FIRST_DAY],\n default: FristWeekOfTheYear.FIRST_4_DAY,\n enumDescriptions: [\n localize(\n 'timetracker.project.firstWeekOfTheyear.FIRST_4_DAY',\n 'The week regarded to be the first week of the year is that which contains at least 4 days of the new year.',\n ),\n localize(\n 'timetracker.project.firstWeekOfTheyear.FIRST_FULL_7DAY',\n 'The week regarded as the first week of the year is that which contains 7 full days in the new year.',\n ),\n localize(\n 'timetracker.project.firstWeekOfTheyear.FIRST_DAY',\n 'The week regarded as the first week of the years is that which contains at least one-day of the new year.',\n ),\n ],\n description: localize(\n 'timetracker.project.firstWeekOfTheyear',\n 'You can set how you start or view the first calendar week of the year. This will be visible on Timetracker pages like \"Reports\" or \"Calender View\".',\n ),\n scope: ConfigurationScope.RESOURCE,\n },\n 'timetracker.project.timeFormat': {\n type: 'string',\n enum: [\n TimeFormat.ROUNDED_0_00_12,\n TimeFormat.ROUNDED_0_00_24,\n TimeFormat.PRECISE_00_00_00_12,\n TimeFormat.PRECISE_00_00_00_24,\n TimeFormat.ROUNDED_UP_00_00_12,\n TimeFormat.ROUNDED_UP_00_00_24,\n ],\n default: TimeFormat.PRECISE_00_00_00_12,\n enumDescriptions: [\n localize('timetracker.project.timeFormat.ROUNDED_0_00_12', '\"0.00 AM/PM\" (12 hours rounded)'),\n localize('timetracker.project.timeFormat.ROUNDED_0_00_24', '\"0.00\" (24 hours rounded)'),\n localize(\n 'timetracker.project.timeFormat.PRECISE_00_00_00_12',\n '\"00:00:00 AM/PM\" (precise 12 hours format)',\n ),\n localize('timetracker.project.timeFormat.PRECISE_00_00_00_24', '\"13:00:00\" (precise 24 hours format)'),\n localize('timetracker.project.timeFormat.ROUNDED_UP_00_00_12', '\"00:00 AM/PM\" (rounded up)'),\n localize('timetracker.project.timeFormat.ROUNDED_UP_00_00_24', '\"13:00\" (rounded up)'),\n ],\n description: localize(\n 'timetracker.project.timeFormat',\n 'Select the format in which you want your entry represented',\n ),\n scope: ConfigurationScope.RESOURCE,\n },\n 'timetracker.project.dateFormat': {\n type: 'string',\n enum: [DateFormat.USFORMAT, DateFormat.UKFORMAT, DateFormat.ISOFORMAT],\n default: DateFormat.USFORMAT,\n enumDescriptions: [\n localize('timetracker.project.dateFormat.USFORMAT', '\"MM-DD-YYYY\" (US standard)'),\n localize('timetracker.project.dateFormat.UKFORMAT', '\"DD-MM-YYYY\" (UK standard)'),\n localize('timetracker.project.dateFormat.ISOFORMAT', '\"YYYY-MM-DD\" (ISO FORMAT)'),\n ],\n description: localize(\n 'timetracker.project.dateFormat',\n 'Select the format in which you want your entry represented',\n ),\n scope: ConfigurationScope.RESOURCE,\n },\n 'timetracker.project.roundedToNearest': {\n type: 'string',\n enum: [\n TimeRoundingUpToValue.IN_MINUTES_1,\n TimeRoundingUpToValue.IN_MINUTES_5,\n TimeRoundingUpToValue.IN_MINUTES_6,\n TimeRoundingUpToValue.IN_MINUTES_10,\n TimeRoundingUpToValue.IN_MINUTES_12,\n TimeRoundingUpToValue.IN_MINUTES_15,\n TimeRoundingUpToValue.IN_MINUTES_30,\n TimeRoundingUpToValue.IN_HOUR_1,\n TimeRoundingUpToValue.IN_HOUR_4,\n ],\n default: TimeRoundingUpToValue.IN_MINUTES_15,\n enumDescriptions: [\n localize('TimeRoundingUpToValue.IN_MINUTES_1', '1 minute'),\n localize('TimeRoundingUpToValue.IN_MINUTES_5', '5 minutes'),\n localize('TimeRoundingUpToValue.IN_MINUTES_6', '6 minutes'),\n localize('TimeRoundingUpToValue.IN_MINUTES_10', '10 minutes'),\n localize('TimeRoundingUpToValue.IN_MINUTES_12', '12 minutes'),\n localize('TimeRoundingUpToValue.IN_MINUTES_15', '15 minutes'),\n localize('TimeRoundingUpToValue.IN_MINUTES_30', '30 minutes'),\n localize('TimeRoundingUpToValue.IN_HOUR_1', '1 hour'),\n localize('TimeRoundingUpToValue.IN_HOUR_4', '4 hours'),\n ],\n description: localize('timetracker.project.roundedToNearest', 'Round to nearest selected minute/hour'),\n scope: ConfigurationScope.RESOURCE,\n },\n 'timetracker.project.roundedType': {\n type: 'string',\n enum: [TimeRoundedType.ROUND_UP_TO, TimeRoundedType.ROUND_TO_NEAREST, TimeRoundedType.ROUND_DOWN_TO],\n default: TimeRoundedType.ROUND_TO_NEAREST,\n enumDescriptions: [\n localize(\n 'timetracker.project.roundedType.ROUND_UP_TO',\n 'e.g. if you set the interval to 30min, a 26min entry will show up in report as 30min',\n ),\n localize(\n 'timetracker.project.roundedType.ROUND_TO_NEAREST',\n 'e.g. if you set theinterval to 30min, a 14min entry will up as 0min and 26min entry as 30min',\n ),\n localize(\n 'timetracker.project.roundedType.ROUND_DOWN_TO',\n 'e.g. if you set the interval to 30min, a 26min entry will show up in reports as 0min',\n ),\n ],\n description: localize('timetracker.project.roundedType', 'Select the time rounding type'),\n scope: ConfigurationScope.RESOURCE,\n },\n 'timetracker.report.timeRoundingInReports': {\n type: 'boolean',\n default: false,\n description: localize(\n 'timetracker.report.timeRoundingInReports',\n 'Round time in reports up, down, or to nearest X minutes',\n ),\n scope: ConfigurationScope.WINDOW,\n },\n // 'timetracker.project.favorites': {\n // type: 'boolean',\n // default: true,\n // description: localize(\n // 'timetracker.project.favorites',\n // 'Let people mark their most used projects as favorite so they appear at the top of their project list when tracking time.',\n // ),\n // scope: ConfigurationScope.RESOURCE,\n // },\n 'timetracker.project.groupingLabel': {\n type: 'string',\n default: GroupProjectsBy.CLIENT,\n enum: [GroupProjectsBy.CLIENT, GroupProjectsBy.CATEGORY, GroupProjectsBy.CUSTOM],\n description: localize(\n 'timetracker.project.groupingLabel',\n 'Group Project by clients or departments, you can change the lable to somethign else',\n ),\n scope: ConfigurationScope.RESOURCE,\n },\n 'timetracker.project.pickerSpecialFilter': {\n type: 'boolean',\n default: false,\n description: localize(\n 'timetracker.project.pickerSpecialFilter',\n 'Quickly find the right task in project picker by using the task@project syntax.',\n ),\n scope: ConfigurationScope.WINDOW,\n },\n 'timetracker.timerecord.screenshotsEnabled': {\n type: 'boolean',\n default: false,\n description: localize(\n 'timetracker.timerecord.screenshotsEnabled',\n 'Generate screenshots every 5 minutes while the timer is running (desktop app only)',\n ),\n scope: ConfigurationScope.WINDOW,\n },\n 'timetracker.project.taskBillableEnabled': {\n type: 'boolean',\n default: false,\n description: localize('SubscribeToBillingNotifications', 'Subscribe to all billing changes'),\n scope: ConfigurationScope.WINDOW,\n },\n 'timetracker.project.taskRateEnabled': {\n type: 'boolean',\n default: false,\n description: localize(\n 'timetracker.project.taskRateEnabled',\n 'Have a different rate depending on the task on a project, plus choose whether tasks are billable by default.',\n ),\n scope: ConfigurationScope.RESOURCE,\n },\n 'timetracker.project.timeApprovalEnabled': {\n type: 'boolean',\n default: false,\n description: localize(\n 'timetracker.project.timeApprovalEnabled',\n 'Your team can submit their weekly timehseets for review, which you can approve or reject',\n ),\n scope: ConfigurationScope.RESOURCE,\n },\n 'timetracker.project.timeTrackingMode': {\n type: 'string',\n default: 'DEFAULT',\n description: localize('SubscribeToBillingNotifications', 'Subscribe to all billing changes'),\n scope: ConfigurationScope.RESOURCE,\n },\n 'timetracker.project.trackTimeDownToSecond': {\n type: 'boolean',\n description: localize('SubscribeToBillingNotifications', 'Subscribe to all billing changes'),\n default: true,\n scope: ConfigurationScope.WINDOW,\n },\n};\n","import { IConfigurationNode } from '@adminide-stack/core';\nimport { IConfigurationContributionNames } from '@admin-layout/timetracker-core';\nimport { TimeTrackerProperties } from './general-settings';\nimport { TrackerPaymentProperties } from './payment-settings';\n\nexport const TimeTrackerContribution: IConfigurationNode = {\n id: IConfigurationContributionNames.timeTracker,\n type: 'object',\n properties: { ...TimeTrackerProperties, ...TrackerPaymentProperties },\n};\n","import { ConfigurationScope, IConfigurationPropertySchema } from '@adminide-stack/core';\nimport { localize } from '@vscode-alt/monaco-editor/esm/vs/nls';\n\nconst enum PayPeriod {\n NONE = 'None',\n WEEKLY = 'Weekly',\n TWICE_PER_MONTH = 'Twice per month',\n BI_WEEKLY = 'Bi-weekly',\n MONTHLY = 'Monthly',\n}\n\nconst enum PayRate {\n HOURLY = 'Hourly',\n FIXED = 'Fixed',\n}\n\nconst enum ProcessPayment {\n MANUALLY = 'Manually',\n AUTOMATICALLY = 'Automatically',\n}\n\nexport const TrackerPaymentProperties: { [path: string]: IConfigurationPropertySchema } = {\n 'timetracker.user.payment.processPayments': {\n type: 'string',\n default: ProcessPayment.MANUALLY,\n enum: [ProcessPayment.MANUALLY, ProcessPayment.AUTOMATICALLY],\n enumDescriptions: [\n localize(\n 'timetracker.payment.processPayments.manually',\n 'When set manually, time need to be updated manually.',\n ),\n localize(\n 'timetracker.payment.processPayments.automatically',\n \"When set automatically, time is marked as 'paid' in our system and if you have payroll enabled, the payment will be send.\",\n ),\n ],\n description: localize(\n 'timetracker.payment.processPayments',\n 'Choose whether you want to manually send payments or have them automatically processed.',\n ),\n scope: ConfigurationScope.WINDOW,\n overridable: true,\n },\n 'timetracker.user.payment.sendPaymentAfter': {\n type: 'number',\n default: 0,\n description: localize(\n 'timetracker.payment.sendPaymentAfter',\n 'Number of days after pay period ends, you would like to send payments for timesheets. ',\n ),\n scope: ConfigurationScope.WINDOW,\n overridable: true,\n },\n\n 'timetracker.user.payment.payPeriod': {\n type: 'string',\n enum: [PayPeriod.NONE, PayPeriod.WEEKLY, PayPeriod.TWICE_PER_MONTH, PayPeriod.BI_WEEKLY, PayPeriod.MONTHLY],\n default: PayPeriod.NONE,\n description: localize('timetracker.payment.payPeriod', 'Pay Period'),\n scope: ConfigurationScope.RESOURCE,\n overridable: true,\n },\n 'timetracker.user.payment.payType': {\n type: 'string',\n enum: [PayRate.HOURLY, PayRate.FIXED],\n default: PayRate.HOURLY,\n description: localize('timetracker.payment.payType', 'Pay type'),\n scope: ConfigurationScope.RESOURCE,\n overridable: true,\n },\n 'timetracker.user.payment.billRate': {\n type: 'number',\n default: 0.0,\n description: localize('timetracker.payment.billRate', 'Billing Rate'),\n scope: ConfigurationScope.RESOURCE,\n overridable: true,\n },\n 'timetracker.user.payment.payRate': {\n type: 'number',\n default: 0.0,\n description: localize('timetracker.payment.payRate', 'Paying Rate'),\n scope: ConfigurationScope.RESOURCE,\n overridable: true,\n },\n 'timetracker.user.payment.requireTimesheetApproval': {\n type: 'boolean',\n default: false,\n description: localize('timetracker.payment.requireTimesheetApproval', 'Whether it requires Timesheet Approval'),\n scope: ConfigurationScope.RESOURCE,\n overridable: true,\n },\n // User limits\n 'timetracker.user.recurringWeeklyLimit': {\n type: 'number',\n default: null,\n description: localize(\n 'timetracker.payment.recurringWeeklyLimit',\n 'Limits how much time can be tracked each week',\n ),\n scope: ConfigurationScope.RESOURCE,\n overridable: true,\n },\n 'timetracker.user.recurringDailyLimit': {\n type: 'number',\n default: null,\n description: localize(\n 'timetracker.payment.recurringDailyLimit',\n 'Limits how much time can be tracked each day',\n ),\n scope: ConfigurationScope.RESOURCE,\n overridable: true,\n },\n};\n","import { resolver as timerecordResolver } from './timerecord-resolver';\nimport { resolver as timesheetResolver } from './timesheet-resolver';\n\nexport const resolvers = [timerecordResolver, timesheetResolver];\n","/* eslint-disable import/no-extraneous-dependencies */\n/* eslint-disable @typescript-eslint/ban-types */\n/* eslint-disable no-underscore-dangle */\nimport * as _ from 'lodash';\nimport { withFilter } from 'graphql-subscriptions';\nimport { ITimeRecordPubSubEvents } from '@admin-layout/timetracker-core';\n\nexport const resolver = (options) => ({\n TimeRecord: {\n id: (root) => root.id || root._id,\n },\n Query: {\n getTimeRecords: (root, args, { timeRecordService, user, userContext }) => {\n options.logger.trace('(Query.getTimeRecords) args %j', args);\n return timeRecordService.getTimeRecords(userContext.orgId, args.userId);\n },\n getDurationTimeRecords: (root, args, { timeRecordService, user, userContext }) => {\n options.logger.trace('(Query.getDurationTimeRecords) args %j', args);\n return timeRecordService.getDurationTimeRecords(userContext.orgId, args.startTime, args.endTime, args.userId);\n },\n getPlayingTimeRecord: (root, args, { timeRecordService, user, userContext }) => {\n options.logger.trace('(Query.getPlayingTimeRecord) args %j', args);\n return timeRecordService.getPlayingTimeRecord(user._id || user.sub, userContext.orgId);\n },\n },\n Mutation: {\n createTimeRecord: (root, args, { timeRecordService, user, userContext }) => {\n options.logger.trace('(Mutation.createTimeRecord) args %j', args);\n let { userId } = args.request;\n if (userId === undefined) userId = user._id || user.sub;\n return timeRecordService.createTimeRecord(userId, userContext.orgId, args.request);\n },\n updateTimeRecord: (root, args, { timeRecordService, user, userContext }) => {\n options.logger.trace('(Mutation.updateTimeRecord) args %j', args);\n let { userId } = args.request;\n if (userId === undefined) userId = user._id || user.sub;\n return timeRecordService.updateTimeRecord(userId, userContext.orgId, args.recordId, args.request);\n },\n removeTimeRecord: (root, args, { timeRecordService, user, userContext }) => {\n options.logger.trace('(Mutation.removeTimeRecord) args %j', args);\n const userId = user._id || user.sub;\n return timeRecordService.removeTimeRecord(userId, userContext.orgId, args.recordId);\n },\n removeDurationTimeRecords: (root, args, { timeRecordService, user, userContext }) => {\n options.logger.trace('(Mutation.removeDurationTimeRecords) args %j', args);\n const userId = user._id || user.sub;\n return timeRecordService.removeDurationTimeRecords(\n userId,\n userContext.orgId,\n args.startTime,\n args.endTime,\n args.projectId,\n );\n },\n },\n Subscription: {\n SubscribeToTimeTracker: {\n subscribe: withFilter(\n () =>\n options.pubsub.asyncIterator([\n ITimeRecordPubSubEvents.TimeRecordCreated,\n ITimeRecordPubSubEvents.TimeRecordUpdated,\n ITimeRecordPubSubEvents.TimeRecordDeleted,\n ]),\n async (payload, variables, context: {}) =>\n payload.SubscribeToTimeTracker.orgName === variables.orgName &&\n payload.SubscribeToTimeTracker.userId === variables.userId,\n ),\n },\n },\n});\n","/* eslint-disable no-underscore-dangle */\nexport const resolver = (options) => ({\n Query: {\n getTimesheets: (root, args, { timesheetService, userContext }) => {\n options.logger.trace('(Query.getTimeSheets) args %j', args);\n if (!args.withTotalHours) return timesheetService.getTimesheets(userContext.orgId);\n return timesheetService.getTimesheetsWithTotalHours(userContext.orgId);\n },\n getDurationTimesheets: (root, args, { timesheetService, userContext }) => {\n options.logger.trace('(Query.getDurationTimesheets) args %j', args);\n return timesheetService.getDurationTimesheets(userContext.orgId, args.start, args.end);\n },\n },\n\n Mutation: {\n createTimesheet: (root, args, { timesheetService, user, userContext }) => {\n options.logger.trace('(Mutation.createTimesheet) args %j', args);\n return timesheetService.createTimesheet(user._id || user.sub, userContext.orgId, args.request);\n },\n updateTimesheet: (root, args, { timesheetService, user, userContext }) => {\n options.logger.trace('(Mutation.updateTimesheet) args %j', args);\n return timesheetService.updateTimesheet(user._id || user.sub, userContext.orgId, args.sheetId, args.request, {\n ...userContext,\n username: user.name,\n });\n },\n removeTimesheet: (root, args, { timesheetService, user, userContext }) => {\n options.logger.trace('(Mutation.removeTimesheet) args %j', args);\n return timesheetService.removeTimesheet(user._id || user.sub, userContext.orgId, args.sheetId);\n },\n updateTimesheetStatus: (root, args, { timesheetService, user, userContext }) => {\n options.logger.trace('(Mutation.updateTimesheetStatus) args %j', args);\n return timesheetService.updateTimesheetStatus(userContext.orgId, args.sheetId, args.state);\n },\n },\n});\n","export default \"type Tag {\\n id: ID!\\n name: String\\n}\\n\\nenum StartYearWeekType {\\n FIRST_FOURDAY_WEEK\\n FIRST_FULL_WEEK\\n FIRST_DAY_WEEK\\n}\\n\\nextend type Query {\\n getTags: [Tag]\\n getSettings: Settings\\n}\\n\";","import timeRecordSchema from './timerecord-schema.graphql';\nimport timesheetSchema from './timesheet-schema.graphql';\nimport timeTrackerSchema from './timetracker-schema.graphql';\nimport commonSchema from './common-schema.graphql';\n\nconst schema = [timeRecordSchema, timesheetSchema, timeTrackerSchema, commonSchema].join('\\n');\n\nexport { schema };\n","export default \"type TimeRecord {\\n id: String\\n startTime: DateTime\\n endTime: DateTime\\n taskId: String\\n taskName: String\\n description: String\\n tags: [String]\\n isBillable: Boolean\\n projectId: String\\n clientId: String\\n userId: String\\n orgId: String\\n timesheetId: String\\n editable: Boolean\\n isPause: Boolean\\n isTimeout: Boolean\\n pauseStatus: [PauseStatus]\\n}\\n\\ntype PauseStatus {\\n pausedTime: DateTime\\n restartTime: DateTime\\n}\\n\\ninput PauseStatus_Input {\\n pausedTime: DateTime\\n restartTime: DateTime\\n}\\n\\ninput TimeRecordRequest {\\n userId: String\\n startTime: DateTime\\n endTime: DateTime\\n taskName: String\\n description: String\\n tags: [String]\\n isBillable: Boolean\\n projectId: String\\n clientId: String\\n timesheetId: String\\n isPause: Boolean\\n isTimeout: Boolean\\n pauseStatus: [PauseStatus_Input]\\n}\\n\\n\\\"\\\"\\\"\\n Subscription event for timer\\n\\\"\\\"\\\"\\nenum TimeRecordPubSubEvents {\\n TimeRecordCreated\\n TimeRecordUpdated\\n TimeRecordStopped\\n TimeRecordDeleted\\n TimeRecordConfigurationUpdate\\n}\\n\\ntype SubscriptionTimeRecord {\\n mutation: TimeRecordPubSubEvents\\n timeRecord: TimeRecord\\n}\\n\\nextend type Query {\\n getTimeRecords(userId: String): [TimeRecord] @addAccountContext\\n getDurationTimeRecords(startTime: DateTime, endTime: DateTime, userId: String): [TimeRecord] @addAccountContext\\n getPlayingTimeRecord: TimeRecord @addAccountContext\\n}\\n\\nextend type Mutation {\\n createTimeRecord(request: TimeRecordRequest): String @addAccountContext\\n updateTimeRecord(recordId: String!, request: TimeRecordRequest): Boolean @addAccountContext\\n removeTimeRecord(recordId: String!): Boolean @addAccountContext\\n removeDurationTimeRecords(startTime: DateTime, endTime: DateTime, projectId: String): Boolean @addAccountContext\\n}\\n\\nextend type Subscription {\\n SubscribeToTimeTracker(orgName: String, userId: String): SubscriptionTimeRecord\\n}\\n\";","export default \"# scalar DateTime\\nenum TimesheetState {\\n OPEN\\n APPROVED_PENDING\\n APPROVED\\n APPROVED_FINALIZED # --- which means no going back\\n DENYED\\n SUBMITTED\\n DENYED_FINALIZED # --- which means no going back\\n}\\n\\ntype Timesheet {\\n id: ID\\n userId: String\\n startDate: DateTime\\n endDate: DateTime\\n state: TimesheetState\\n submittedOn: DateTime\\n approvedOn: DateTime\\n approvedBy: String\\n updatedBy: String # ---> userId\\n updatedOn: DateTime\\n}\\n\\ninput TimesheetCreateRequest {\\n userId: String\\n startDate: DateTime\\n endDate: DateTime\\n state: TimesheetState\\n submittedOn: DateTime\\n approvedOn: DateTime\\n approvedBy: String\\n updatedBy: String # ---> userId\\n updatedOn: DateTime\\n}\\n\\ntype TimesheetResponse {\\n id: ID\\n startDate: DateTime\\n endDate: DateTime\\n state: TimesheetState\\n submittedOn: DateTime\\n approvedOn: DateTime\\n approvedBy: String\\n updatedBy: String # ---> userId\\n updatedOn: DateTime\\n userId: String\\n orgId: String\\n totalDuration: Int\\n}\\n\\nextend type Query {\\n getTimesheets(userId: String, withTotalHours: Boolean): [TimesheetResponse] @addAccountContext\\n getDurationTimesheets(start: DateTime, end: DateTime): [TimesheetResponse] @addAccountContext\\n}\\n\\nextend type Mutation {\\n createTimesheet(request: TimesheetCreateRequest): Boolean @addAccountContext\\n updateTimesheet(sheetId: String, request: TimesheetCreateRequest): Boolean @addAccountContext\\n removeTimesheet(sheetId: String): Boolean @addAccountContext\\n updateTimesheetStatus(sheetId: String, state: TimesheetState): Boolean @addAccountContext\\n}\\n\";","export default \"type TimeTracker {\\n userId: String\\n orgId: String\\n timeRecords: [TimeRecord]\\n timesheets: [Timesheet]\\n}\\n\";","export * from './timesheet-service';\nexport * from './timerecord-service';\n","/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n/* eslint-disable no-underscore-dangle */\n/* eslint-disable import/no-extraneous-dependencies */\nimport { CdmLogger } from '@cdm-logger/core';\nimport { inject, injectable } from 'inversify';\nimport { ITimeRecord, ITimeRecordRequest, ITimeRecordPubSubEvents } from '@admin-layout/timetracker-core';\nimport { ServerTypes, IPreferencesService } from '@adminide-stack/core';\nimport { PubSubEngine } from 'graphql-subscriptions';\nimport { ServiceBroker } from 'moleculer';\nimport { CommonType } from '@common-stack/core';\nimport { ITimeRecordRepository } from '../interfaces';\nimport { TYPES } from '../constants';\nimport { ITimeRecordService } from '../interfaces/timerecord-service';\n\n@injectable()\nexport class TimeRecordService implements ITimeRecordService {\n private logger: CdmLogger.ILogger;\n\n constructor(\n @inject(TYPES.ITimeRecordRepository)\n protected timeRecordRepository: ITimeRecordRepository,\n\n @inject(ServerTypes.IPreferenceEditorService)\n private preferencesService: IPreferencesService,\n\n @inject(CommonType.MOLECULER_BROKER)\n private broker: ServiceBroker,\n\n @inject('PubSub')\n private pubsub: PubSubEngine,\n\n @inject('Logger')\n logger: CdmLogger.ILogger,\n ) {\n this.logger = logger;\n }\n\n public async getTimeRecords(orgId: string, userId: string): Promise<Array<ITimeRecord>> {\n return this.timeRecordRepository.getTimeRecords(orgId, userId);\n }\n\n public async getDurationTimeRecords(\n orgId: string,\n startTime: Date,\n endTime: Date,\n userId?: string,\n ): Promise<Array<ITimeRecord>> {\n const timeRecords = await this.timeRecordRepository.getTimeRecords(orgId, userId, startTime, endTime);\n return timeRecords.filter((r) => r.endTime !== null);\n }\n\n public async getPlayingTimeRecord(userId: string, orgId: string): Promise<ITimeRecord> {\n return this.timeRecordRepository.getPlayingTimeRecord(userId, orgId);\n }\n\n public async createTimeRecord(userId: string, orgId: string, request: ITimeRecordRequest) {\n const data = await this.timeRecordRepository.createTimeRecord(userId, orgId, request);\n const timeRecord = data?.timeRecords[0];\n if (timeRecord) {\n const record = {\n orgName: data.orgId,\n userId: timeRecord.userId,\n mutation: ITimeRecordPubSubEvents.TimeRecordCreated,\n timeRecord,\n };\n this.pubsub.publish(ITimeRecordPubSubEvents.TimeRecordCreated, { SubscribeToTimeTracker: record });\n }\n return (data as any)._id;\n }\n\n public async updateTimeRecord(userId: string, orgId: string, recordId: string, request: ITimeRecordRequest) {\n const data = await this.timeRecordRepository.updateTimeRecord(userId, orgId, recordId, request);\n const timeRecord = data?.timeRecords[0];\n if (timeRecord) {\n const record = {\n orgName: data.orgId,\n userId: timeRecord.userId,\n mutation: ITimeRecordPubSubEvents.TimeRecordUpdated,\n timeRecord,\n };\n this.pubsub.publish(ITimeRecordPubSubEvents.TimeRecordUpdated, { SubscribeToTimeTracker: record });\n }\n return true;\n }\n\n public async removeTimeRecord(userId: string, orgId: string, recordId: string) {\n const data = await this.timeRecordRepository.removeTimeRecord(userId, orgId, recordId);\n const record = {\n orgName: data.orgId,\n userId: data.userId,\n mutation: ITimeRecordPubSubEvents.TimeRecordDeleted,\n timeRecord: data?.timeRecords[0],\n };\n this.pubsub.publish(ITimeRecordPubSubEvents.TimeRecordDeleted, { SubscribeToTimeTracker: record });\n return true;\n }\n\n public async removeDurationTimeRecords(\n userId: string,\n orgId: string,\n startTime: Date,\n endTime: Date,\n projectId: string,\n ) {\n return this.timeRecordRepository.removeDurationTimeRecords(userId, orgId, startTime, endTime, projectId);\n }\n\n public async approveTimeRecords(orgId: string, sheetId: string, startDate: Date, endDate: Date) {\n this.timeRecordRepository.approveTimeRecords(orgId, sheetId, startDate, endDate);\n }\n\n public async disapproveTimeRecords(orgId: string, sheetId: string) {\n this.timeRecordRepository.disapproveTimeRecords(orgId, sheetId);\n }\n}\n","/* eslint-disable class-methods-use-this */\nimport * as ILogger from 'bunyan';\nimport { inject, injectable, tagged } from 'inversify';\nimport { ITimesheetState, ITimesheetCreateRequest } from '@admin-layout/timetracker-core';\nimport {\n ConfigurationTarget,\n generateOrgUri,\n IConfigFragmentName,\n ServerTypes,\n IPreferencesService,\n} from '@adminide-stack/core';\nimport { IMailServiceAction, IMailerServicesendArgs, IMoleculerServiceName } from '@container-stack/mailing-api';\nimport * as moment from 'moment';\nimport { ServiceBroker, CallingOptions } from 'moleculer';\nimport { CommonType, TaggedType } from '@common-stack/core';\nimport { TYPES, EmailTemplateCodes } from '../constants';\nimport { config } from '../config';\nimport { ITimesheetService } from '../interfaces/timesheet-service';\nimport { ITimesheetRepository, ITimeRecordRepository } from '../interfaces';\n\n@injectable()\nexport class TimesheetService implements ITimesheetService {\n private logger: ILogger;\n\n constructor(\n @inject(TYPES.ITimesheetRepository)\n protected timesheetRepository: ITimesheetRepository,\n\n @inject(TYPES.ITimeRecordRepository)\n protected timeRecordRepository: ITimeRecordRepository,\n\n @inject(TYPES.ITimeRecordService)\n protected timeRecordService: ITimeRecordRepository,\n\n @inject(ServerTypes.IPreferenceEditorService)\n private preferencesService: IPreferencesService,\n\n @inject(CommonType.MOLECULER_BROKER)\n private broker: ServiceBroker,\n\n @inject('Settings')\n @tagged(TaggedType.MICROSERVICE, true)\n private settings: any,\n @inject('Logger')\n logger: ILogger,\n ) {\n this.logger = logger;\n }\n\n public async getTimesheets(orgId: string, userId?: string) {\n return this.timesheetRepository.getTimesheets(orgId, userId);\n }\n\n public async getTimesheetsWithTotalHours(orgId: string, userId?: string) {\n const timesheets = await this.timesheetRepository.getTimesheets(orgId, userId);\n const timeRecords = await this.timeRecordRepository.getTimeRecords(orgId, userId);\n return timesheets.map((timesheet) => {\n const sheetTotalDuration = timeRecords\n .filter(\n (tr) =>\n tr.userId === timesheet.userId && tr.startTime > timesheet.startDate && tr.endTime < timesheet.endDate,\n )\n .reduce(\n (duration, tr) =>\n duration + Math.floor((moment(tr.endTime).valueOf() - moment(tr.startTime).valueOf()) / 1000),\n 0,\n );\n return {\n id: timesheet.id,\n startDate: timesheet.startDate,\n endDate: timesheet.endDate,\n state: timesheet.state,\n userId: timesheet.userId,\n orgId,\n approvedBy: timesheet.approvedBy,\n approvedOn: timesheet.approvedOn,\n submittedOn: timesheet.submittedOn,\n updatedBy: timesheet.updatedBy,\n updatedOn: timesheet.updatedOn,\n totalDuration: sheetTotalDuration,\n };\n });\n }\n\n public async getDurationTimesheets(orgId: string, start: Date, end: Date) {\n const timesheets = await this.timesheetRepository.getOrganizationTimesheets(orgId);\n return timesheets.filter(\n (sh) =>\n moment(start).format('YYYY-MM-DD') === moment(sh.startDate).format('YYYY-MM-DD') &&\n moment(end).format('YYYY-MM-DD') === moment(sh.endDate).format('YYYY-MM-DD'),\n );\n }\n\n public async createTimesheet(userId: string, orgId: string, request: ITimesheetCreateRequest) {\n return this.timesheetRepository.createTimesheet(userId, orgId, request);\n }\n\n public async updateTimesheet(\n userId: string,\n orgId: string,\n sheetId: string,\n request: ITimesheetCreateRequest,\n userContext?: any,\n ) {\n try {\n await this.timesheetRepository.updateTimesheet(orgId, sheetId, request);\n if (request.state === ITimesheetState.APPROVED) {\n // approve time records from startDate to endDate\n this.timeRecordService.approveTimeRecords(orgId, sheetId, request.startDate, request.endDate);\n } else if (request.state === ITimesheetState.DENYED) {\n // approve time records from startDate to endDate\n this.timeRecordService.disapproveTimeRecords(orgId, sheetId);\n }\n const resourceUri = generateOrgUri(orgId, IConfigFragmentName.settings);\n const { settings } = (await this.preferencesService.viewerSettings({\n target: ConfigurationTarget.ORGANIZATION_RESOURCE,\n settingsResource: resourceUri,\n })) as any;\n if (\n request.state === ITimesheetState.APPROVED &&\n settings.timetracker.notifications.approvalNotifications &&\n settings.timetracker.notifications.enableTimetrackerNotifications\n ) {\n const mailTopic = 'Timsheet approved';\n const mailTo = userContext.emailId;\n const mailFrom = config.MAIL_SEND_DEFAULT_EMAIL;\n const templateId = EmailTemplateCodes.TIMESHEET_APPROVAL;\n const templateVars = {\n name: userContext.username,\n startDate: moment(request.startDate).format('YYYY-MM-DD'),\n endDate: moment(request.endDate).format('YYYY-MM-DD'),\n timesheet_url: `${config.CLIENT_URL}/${orgId}/time-tracker/timeapproval`,\n contact_url: `${config.CLIENT_URL}`,\n };\n this.sendMail(mailTopic, mailTo, mailFrom, templateId, templateVars);\n }\n if (\n request.state === ITimesheetState.SUBMITTED &&\n settings.timetracker.notifications.submitNotifications &&\n settings.timetracker.notifications.enableTimetrackerNotifications\n ) {\n const mailTopic = 'Timsheet submitted';\n const mailTo = userContext.emailId;\n const mailFrom = config.MAIL_SEND_DEFAULT_EMAIL;\n const templateId = EmailTemplateCodes.SUBMIT_TIME;\n const templateVars = {\n name: userContext.username,\n startDate: moment(request.startDate).format('YYYY-MM-DD'),\n endDate: moment(request.endDate).format('YYYY-MM-DD'),\n timesheet_url: `${config.CLIENT_URL}/${orgId}/time-tracker/timeapproval`,\n contact_url: `${config.CLIENT_URL}`,\n };\n this.sendMail(mailTopic, mailTo, mailFrom, templateId, templateVars);\n\n return true;\n }\n } catch (e) {\n throw new Error(e.message);\n }\n }\n\n public async updateTimesheetStatus(orgId: string, sheetId: string, state: ITimesheetState) {\n try {\n const timesheet = await this.timesheetRepository.updateTimesheetStatus(orgId, sheetId, state);\n console.log('updateTimesheetStatus.timesheet =>', timesheet);\n if (state === ITimesheetState.APPROVED) {\n // approve time records from startDate to endDate\n console.log('APPROVED');\n }\n\n return true;\n } catch (e) {\n throw new Error(e.message);\n }\n }\n\n public async removeTimesheet(userId: string, orgId: string, sheetId: string) {\n return this.timesheetRepository.removeTimesheet(userId, orgId, sheetId);\n }\n\n private sendMail(topic, to, from, templateId, templateVars) {\n return this.callAction<void, IMailerServicesendArgs>(\n IMailServiceAction.send,\n {\n request: {\n topic,\n to,\n templateId,\n from,\n variables: templateVars,\n },\n },\n IMoleculerServiceName.MailService,\n );\n }\n\n private async callAction<T, P = any>(command: string, params?: P, topic?: string, opts?: CallingOptions) {\n return this.broker.call<T, P>(`${topic}.${command}@${this.settings.adminApiNamespace}`, params, opts);\n }\n}\n","/* eslint-disable no-underscore-dangle */\nimport { Schema, Model, Document, Connection } from 'mongoose';\nimport { ITimeTracker, ITimeRecord, ITimesheet } from '@admin-layout/timetracker-core';\n\nexport declare type Maybe<T> = T | null;\n\nexport interface ITimeRecordModel extends ITimeRecord, Document {\n id?: any;\n}\nexport interface ITimeSheetModel extends ITimesheet, Document {\n id?: any;\n}\nexport interface ITimeTrackerModel extends ITimeTracker, Document {\n id: any;\n timeRecords: ITimeRecordModel[];\n timesheets: ITimeSheetModel[];\n}\n\nenum TimesheetState {\n OPEN,\n APPROVED_PENDING,\n APPROVED,\n APPROVED_FINALIZED,\n DENYED,\n SUBMITTED,\n DENYED_FINALIZED,\n}\n\nconst TimeActivitySchema = new Schema({\n count: { type: Number },\n isPaused: { type: Boolean },\n isTimeout: { type: Boolean },\n startTime: { type: Number },\n endTime: { type: Number },\n});\n\nconst PauseStatusSchema = new Schema({\n pausedTime: { type: Date },\n restartTime: { type: Date },\n});\n\n// ===> TimeRecord\nconst TimeRecordSchema = new Schema({\n userId: { type: String, index: true },\n startTime: { type: Date },\n endTime: { type: Date, default: null },\n taskName: { type: String },\n description: { type: String },\n taskId: { type: String }, // ----> task\n tags: { type: [String] },\n isBillable: { type: Boolean },\n projectId: { type: String }, // ----> project\n timesheetId: { type: String }, // ----> timesheet\n activities: [TimeActivitySchema],\n isPause: { type: Boolean, default: false },\n isTimeout: { type: Boolean, default: false },\n pauseStatus: { type: [PauseStatusSchema] }\n});\n\nTimeRecordSchema.index({ endTime: 1, startTime: 1, userId: 1 } as any);\n\n// ===> Timesheet\nconst TimesheetSchema = new Schema({\n userId: { type: String, index: true },\n startDate: { type: Date },\n endDate: { type: Date },\n state: { type: TimesheetState },\n submittedOn: { type: Date },\n approvedOn: { type: Date },\n approvedBy: { type: String },\n updatedBy: { type: String },\n updatedOn: { type: Date },\n});\n\nconst TimeTrackerSchema = new Schema({\n orgId: { type: String, index: true },\n timeRecords: [TimeRecordSchema],\n timesheets: [TimesheetSchema],\n});\n\nTimeRecordSchema.virtual('id').get(function () {\n return this._id.toHexString();\n});\n\nTimeRecordSchema.set('toJSON', {\n virtuals: true,\n});\n\nTimeTrackerSchema.virtual('id').get(function () {\n return this._id.toHexString();\n});\n\nTimeTrackerSchema.set('toJSON', {\n virtuals: true,\n});\n\nTimeTrackerSchema.set('toObject', { virtuals: true });\n\nexport type TimeTrackerModelType = Model<ITimeTrackerModel>;\n\nexport const TimeTrackerModelFunc: (db: Connection) => TimeTrackerModelType = (db) =>\n db.model<ITimeTrackerModel>('timetracker', TimeTrackerSchema);\n","export * from './timerecord-repository';\nexport * from './timesheet-repository';\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable no-param-reassign */\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n/* eslint-disable no-underscore-dangle */\nimport * as Logger from 'bunyan';\nimport { injectable, inject } from 'inversify';\nimport * as mongoose from 'mongoose';\nimport * as moment from 'moment';\nimport { ITimeRecordRequest, ITimeRecord, ITimeTracker } from '@admin-layout/timetracker-core';\nimport * as _ from 'lodash';\nimport {\n TimeTrackerModelType,\n TimeTrackerModelFunc,\n ITimeRecordModel,\n ITimeTrackerModel,\n} from '../models/timetracker-model';\nimport { ITimeRecordRepository } from '../../interfaces';\n\n@injectable()\nexport class TimeRecordRepository implements ITimeRecordRepository {\n private timeTrackerModel: TimeTrackerModelType;\n\n private logger: Logger;\n\n constructor(\n @inject('MongoDBConnection')\n db: mongoose.Connection,\n\n @inject('Logger')\n logger: Logger,\n ) {\n this.logger = logger.child({ className: 'TimeRecordRepository' });\n this.timeTrackerModel = TimeTrackerModelFunc(db);\n }\n\n public async getTimeRecords(orgId: string, userId?: string | RegExp, from?: Date, until?: Date): Promise<any> {\n if (!userId) {\n userId = /.*/;\n }\n let match: any = {\n 'timeRecords.userId': userId,\n };\n if (from) {\n match = { ...match, 'timeRecords.startTime': { $gte: from } };\n }\n if (until) {\n match = { ...match, 'timeRecords.endTime': { $lte: until } };\n }\n\n const result = await this.timeTrackerModel.aggregate([\n {\n $match: {\n orgId,\n },\n },\n {\n $unwind: '$timeRecords',\n },\n {\n $match: {\n ...match,\n },\n },\n {\n $group: {\n _id: '$orgId',\n timeRecords: {\n $push: '$timeRecords',\n },\n },\n },\n {\n $project: {\n orgId: 1,\n timeRecords: 1,\n },\n },\n ]);\n if (result.length === 0) {\n return [];\n }\n return result[0].timeRecords;\n }\n\n public async getOrganizationTimeRecords(orgId: string): Promise<ITimeRecordModel[]> {\n const trackDoc = await this.timeTrackerModel.findOne({ orgId });\n if (trackDoc && trackDoc.timeRecords) {\n return trackDoc.timeRecords;\n }\n return [];\n }\n\n public async getPlayingTimeRecord(userId: string, orgId: string): Promise<ITimeRecord> {\n const trackDoc = await this.timeTrackerModel.findOne({ orgId });\n if (trackDoc) {\n let res;\n if (trackDoc.timeRecords) res = trackDoc.timeRecords.find((tr) => tr.userId === userId && tr.endTime === null);\n return res;\n }\n return null;\n }\n\n public async createTimeRecord(\n userId: string,\n orgId: string,\n request: ITimeRecordRequest,\n ): Promise<Partial<ITimeTracker>> {\n try {\n const response = await this.timeTrackerModel.findOneAndUpdate(\n { orgId },\n { orgId, $push: { timeRecords: request } },\n {\n upsert: true,\n new: true,\n projection: { userId, orgId, timeRecords: { $elemMatch: { startTime: request.startTime } } },\n },\n );\n return response.toObject() as ITimeTrackerModel;\n } catch (err) {\n throw new Error(err.message);\n }\n }\n\n public async updateTimeRecord(\n userId: string,\n orgId: string,\n recordId: string,\n request: ITimeRecordRequest,\n ): Promise<Partial<ITimeTrackerModel>> {\n try {\n if (recordId === null || recordId === undefined) throw new Error('TimeRecord id not specified!');\n let setRequest = {};\n _.forIn(request,(value, key) => {\n setRequest = {\n ...setRequest,\n [`timeRecords.$.${key}`]: value,\n };\n });\n const response = await this.timeTrackerModel.findOneAndUpdate(\n { orgId, timeRecords: { $elemMatch: { _id: recordId } } },\n {\n $set: {\n ...setRequest,\n },\n },\n {\n new: true,\n projection: {\n userId,\n orgId,\n timeRecords: { $elemMatch: { _id: recordId } },\n },\n },\n );\n return response.toObject() as ITimeTrackerModel;\n } catch (err) {\n throw new Error(err.message);\n }\n }\n\n public async removeTimeRecord(userId: string, orgId: string, recordId: string) {\n try {\n const result = await this.timeTrackerModel.update(\n {\n orgId,\n },\n {\n $pull: { timeRecords: { _id: recordId } },\n },\n );\n if (result.nModified !== 1) {\n throw new Error('TimeRecord is not modified');\n }\n return { userId, orgId, timeRecords: [{ _id: recordId } as any] as ITimeRecord[] };\n } catch (err) {\n throw new Error(err.message);\n }\n }\n\n public async removeDurationTimeRecords(\n userId: string,\n orgId: string,\n startTime: Date,\n endTime: Date,\n projectId: string,\n ) {\n try {\n const trackerDoc = await this.timeTrackerModel.find({ orgId });\n if (trackerDoc && trackerDoc.length > 0) {\n const timeRecords = trackerDoc[0].timeRecords.filter(\n (tr) => tr.startTime < startTime || tr.startTime > endTime || tr.projectId !== projectId,\n );\n await this.timeTrackerModel.update(\n {\n orgId,\n },\n {\n timeRecords,\n },\n );\n return true;\n }\n return false;\n } catch (err) {\n throw new Error(err.message);\n }\n }\n\n public async approveTimeRecords(orgId: string, sheetId: string, startDate: Date, endDate: Date) {\n try {\n await this.timeTrackerModel.updateMany(\n {\n orgId,\n },\n { $set: { 'timeRecords.$[el].timesheetId': sheetId } },\n {\n multi: true,\n arrayFilters: [\n {\n 'el.startTime': { $gte: startDate },\n 'el.endTime': { $lte: endDate },\n 'el.timesheetId': null,\n },\n ],\n },\n );\n } catch (e) {\n this.logger.debug('approveTimeRecords =>', e.message);\n throw new Error(e.message);\n }\n }\n\n public async disapproveTimeRecords(orgId: string, sheetId: string) {\n try {\n await this.timeTrackerModel.updateMany(\n {\n orgId,\n },\n { $set: { 'timeRecords.$[el].timesheetId': null } },\n {\n multi: true,\n arrayFilters: [\n {\n 'el.timesheetId': sheetId,\n },\n ],\n },\n );\n } catch (e) {\n this.logger.debug('disapproveTimeRecords =>', e.message);\n throw new Error(e.message);\n }\n }\n}\n","/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n/* eslint-disable class-methods-use-this */\nimport * as Logger from 'bunyan';\nimport { injectable, inject } from 'inversify';\nimport * as mongoose from 'mongoose';\nimport { ITimesheetCreateRequest, ITimesheetState } from '@admin-layout/timetracker-core';\nimport * as _ from 'lodash';\nimport { CommonType } from '@common-stack/core';\nimport { ServiceBroker } from 'moleculer';\nimport { TimeTrackerModelType, TimeTrackerModelFunc, ITimeSheetModel } from '../models/timetracker-model';\nimport { ITimesheetRepository } from '../../interfaces';\n\n@injectable()\nexport class TimesheetRepository implements ITimesheetRepository {\n private timeTrackerModel: TimeTrackerModelType;\n\n private logger: Logger;\n\n constructor(\n @inject('MongoDBConnection')\n db: mongoose.Connection,\n\n @inject('Logger')\n logger: Logger,\n\n @inject(CommonType.MOLECULER_BROKER)\n private broker: ServiceBroker,\n ) {\n this.logger = logger.child({ className: 'TimesheetRepository' });\n this.timeTrackerModel = TimeTrackerModelFunc(db);\n }\n\n public async getOrganizationTimesheets(orgId: string): Promise<ITimeSheetModel[]> {\n const trackDoc = await this.timeTrackerModel.findOne({ orgId });\n if (trackDoc && trackDoc.timesheets) {\n return trackDoc.timesheets;\n }\n return [];\n }\n\n public async getTimesheets(orgId: string, userId?: string): Promise<ITimeSheetModel[]> {\n const timesheets = await this.getOrganizationTimesheets(orgId);\n return timesheets.filter((sheet) => !userId || sheet.userId === userId);\n }\n\n public async createTimesheet(userId: string, orgId: string, request: ITimesheetCreateRequest): Promise<boolean> {\n try {\n const response = await this.timeTrackerModel.update(\n { orgId },\n { $push: { timesheets: request } },\n { upsert: true },\n );\n return true;\n } catch (err) {\n throw new Error(err.message);\n }\n }\n\n public async updateTimesheet(orgId: string, sheetId: string, request: ITimesheetCreateRequest) {\n try {\n const response = await this.timeTrackerModel.update(\n { orgId, timesheets: { $elemMatch: { _id: sheetId } } },\n { $set: { 'timesheets.$': request } },\n );\n return response;\n } catch (err) {\n throw new Error(err.message);\n }\n }\n\n public async updateTimesheetStatus(orgId: string, sheetId: string, state: ITimesheetState) {\n try {\n const response = await this.timeTrackerModel.update(\n {\n orgId,\n $elemMatch: { 'timesheets.id': sheetId },\n },\n {\n $set: {\n 'timesheets.$.status': state,\n },\n },\n );\n return response;\n } catch (err) {\n throw new Error(err.message);\n }\n }\n\n public async removeTimesheet(userId: string, orgId: string, sheetId: string): Promise<boolean> {\n try {\n await this.timeTrackerModel.update(\n {\n orgId,\n },\n {\n $pull: { timesheets: { _id: sheetId } },\n },\n );\n return true;\n } catch (err) {\n throw new Error(err.message);\n }\n }\n}\n","module.exports = require(\"@adminide-stack/core\");","module.exports = require(\"@common-stack/core\");","module.exports = require(\"@common-stack/server-core\");","module.exports = require(\"@vscode-alt/monaco-editor/esm/vs/nls\");","module.exports = require(\"@workbench-stack/core\");","module.exports = require(\"envalid\");","module.exports = require(\"graphql-subscriptions\");","module.exports = require(\"inversify\");","module.exports = require(\"lodash\");","module.exports = require(\"moment\");","module.exports = require(\"mongoose\");"],"sourceRoot":""}
1
+ {"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/config/config.ts","webpack:///./src/config/index.ts","webpack:///./src/constants/constants.ts","webpack:///./src/constants/index.ts","webpack:///./src/containers/containers.ts","webpack:///./src/containers/index.ts","webpack:///./src/index.ts","webpack:///./src/initialization/index.ts","webpack:///./src/initialization/service-initialization.ts","webpack:///./src/migration/approval_notification.ejs","webpack:///./src/migration/index.ts","webpack:///./src/migration/mail-template.ts","webpack:///./src/migration/submit_notification.ejs","webpack:///./src/module.ts","webpack:///./src/preferences/index.ts","webpack:///./src/preferences/permissions/index.ts","webpack:///./src/preferences/permissions/timing-permissions-contribution.ts","webpack:///./src/preferences/permissions/timing-roles-permission-overwrite.ts","webpack:///./src/preferences/settings/general-settings.ts","webpack:///./src/preferences/settings/index.ts","webpack:///./src/preferences/settings/payment-settings.ts","webpack:///./src/resolvers/index.ts","webpack:///./src/resolvers/timerecord-resolver.ts","webpack:///./src/resolvers/timesheet-resolver.ts","webpack:///./src/schema/common-schema.graphql","webpack:///./src/schema/index.ts","webpack:///./src/schema/timerecord-schema.graphql","webpack:///./src/schema/timesheet-schema.graphql","webpack:///./src/schema/timetracker-schema.graphql","webpack:///./src/services/index.ts","webpack:///./src/services/timerecord-service.ts","webpack:///./src/services/timesheet-service.ts","webpack:///./src/store/models/timerecords-model.ts","webpack:///./src/store/models/timesheets-model.ts","webpack:///./src/store/models/timetracker-model.ts","webpack:///./src/store/repository/index.ts","webpack:///./src/store/repository/timerecord-repository.ts","webpack:///./src/store/repository/timesheet-repository.ts","webpack:///external \"@adminide-stack/core\"","webpack:///external \"@common-stack/core\"","webpack:///external \"@common-stack/server-core\"","webpack:///external \"@vscode-alt/monaco-editor/esm/vs/nls\"","webpack:///external \"@workbench-stack/core\"","webpack:///external \"envalid\"","webpack:///external \"graphql-subscriptions\"","webpack:///external \"inversify\"","webpack:///external \"lodash\"","webpack:///external \"moment\"","webpack:///external \"mongoose\""],"names":[],"mappings":"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","file":"index.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/index.ts\");\n","/* eslint-disable import/no-extraneous-dependencies */\nimport * as envalid from 'envalid';\n\nconst { str, num } = envalid;\n\nexport const config = envalid.cleanEnv(process.env, {\n MAIL_SEND_DEFAULT_EMAIL: str(),\n CLIENT_URL: str(),\n});\n","export * from './config';\n","export const DEFAULT_USER = '123';\nexport const DEFAULT_ORG = '123';\nexport const TYPES = {\n ITimeTrackerService: Symbol('ITimeTrackerService'),\n ITimeRecordService: Symbol('ITimeRecordService'),\n ITimesheetService: Symbol('ITimesheetService'),\n ITimeTrackerRepository: Symbol('ITimeTrackerRepository'),\n ITimeRecordRepository: Symbol('ITimeRecordRepository'),\n ITimesheetRepository: Symbol('ITimesheetRepository'),\n ITaskRepository: Symbol('ITaskRepository'),\n ITaskService: Symbol('ITaskService'),\n};\n\nexport const EmailTemplateCodes = {\n TIMESHEET_APPROVAL: 'TIMESHEET_APPROVAL_EMAIL_TEMPLATE',\n ENABLE_TIMETRACKER: 'ENABLE_TIMETRACKER_EMAIL_TEMPLATE',\n SUBMIT_TIME: 'SUBMIT_TIME_EMAIL_TEMPLATE',\n TIMETRACKING_STOP: 'TIMETRACKING_STOP_TEMPLATE',\n};\n\nexport enum IPreDefineAccountPermissions {\n // others\n viewOthersTimeTracker = 'organization.timetracker.others.view',\n createOthersTimeTracker = 'organization.timetracker.others.create',\n editOthersTimeTracker = 'organization.timetracker.others.edit',\n deleteOthersTimeTracker = 'organization.timetracker.others.delete',\n manageOthersTimeTracker = 'organization.timetracker.others.manage',\n\n // self\n viewSelfTimeTracker = 'organization.timetracker.self.view',\n createSelfTimeTracker = 'organization.timetracker.self.create',\n editSelfTimeTracker = 'organization.timetracker.self.edit',\n deleteSelfTimeTracker = 'organization.timetracker.self.delete',\n manageSelfTimeTracker = 'organization.timetracker.self.manage',\n}\n","export * from './constants';\n","import { ContainerModule, interfaces } from 'inversify';\nimport { TYPES } from '../constants';\nimport { TimeRecordService, TimesheetService } from '../services';\nimport { TimeRecordRepository, TimesheetRepository } from '../store/repository';\nimport { TimesheetApprovalMailTemplate, TimesheetSubmitMailTemplate } from '../migration';\n\nexport const timeTrackerModule: (settings: any) => ContainerModule = (setting) =>\n new ContainerModule((bind: interfaces.Bind) => {\n bind(TYPES.ITimeRecordRepository).to(TimeRecordRepository).inSingletonScope().whenTargetIsDefault();\n bind(TYPES.ITimesheetRepository).to(TimesheetRepository).inSingletonScope().whenTargetIsDefault();\n bind(TYPES.ITimeRecordService).to(TimeRecordService).inSingletonScope().whenTargetIsDefault();\n bind(TYPES.ITimesheetService).to(TimesheetService).inSingletonScope().whenTargetIsDefault();\n\n bind('MongodbMigration').to(TimesheetApprovalMailTemplate).whenTargetNamed(TimesheetApprovalMailTemplate.name);\n bind('MongodbMigration').to(TimesheetSubmitMailTemplate).whenTargetNamed(TimesheetSubmitMailTemplate.name);\n });\n","export * from './containers';\n","import { Feature } from '@common-stack/server-core';\nimport TimeTracker from './module';\n\nexport * from './constants';\nexport * from './store/repository';\nexport * from './store/models/timetracker-model';\n\nexport default new Feature(TimeTracker);\n","export * from './service-initialization';\n","/* eslint-disable import/no-extraneous-dependencies */\nimport { IRegistryExtensions as RegistryExtensions, IConfigurationRegistry, IRegistry } from '@adminide-stack/core';\nimport * as ILogger from 'bunyan';\nimport { TYPES as serverTypes, Schemas } from '@workbench-stack/core';\nimport { CommonType } from '@common-stack/core';\nimport { interfaces } from 'inversify';\nimport { TimeTrackerContribution } from '../preferences';\n\nexport const mainLoadConfigurationPre = async (_, container: interfaces.Container) => {\n const logger = container.get<ILogger>(CommonType.LOGGER);\n logger.info('PRESTART START: -- load TimeTrackerContribution to registry');\n\n const registry = container.get<IRegistry>(serverTypes.IRegistry);\n const configurationRegistry = registry.as<IConfigurationRegistry>(RegistryExtensions.Configuration);\n configurationRegistry.registerConfiguration(TimeTrackerContribution);\n logger.info('PRESTART ENDS: -- load TimeTrackerContribution to registry');\n};\n","export default \"<html>\\n <head>\\n\\n </head>\\n\\n <body>\\n <h1> Timesheet has approved! </h1>\\n <p> Dear <%= name %>! </p>\\n <p> Your timesheet from <bold> <%= startDate %> </bold> to <bold> <%= endDate %> </bold> has been approved! </p>\\n You can see timesheet details <a href=\\\"<%= timesheet_url %>\\\" __target=\\\"blank\\\"> here </a>\\n\\n <br /> <br />\\n <p> If you have any problem, please <a href=\\\"<%= contact_url %>\\\"> Contact us </a></p>\\n </body>\\n</html>\";","export * from './mail-template'","/* eslint-disable max-classes-per-file */\nimport * as Logger from 'bunyan';\nimport { injectable, inject, tagged } from 'inversify';\nimport { IDatabaseMigration } from '@adminide-stack/core';\nimport { IMoleculerServiceName, IMailServiceAction, IMailerServicesendArgs } from '@container-stack/mailing-api';\nimport { CommonType, TaggedType } from '@common-stack/core';\nimport { CallingOptions, ServiceBroker } from 'moleculer';\nimport { EmailTemplateCodes } from '../constants';\nimport { config } from '../config';\n\nconst TimeApprovalTemplate = require('./approval_notification.ejs');\nconst TimeSubmitTemplate = require('./submit_notification.ejs');\n\n@injectable()\nexport class TimesheetApprovalMailTemplate implements IDatabaseMigration {\n constructor(\n @inject(CommonType.MOLECULER_BROKER)\n protected broker: ServiceBroker,\n @inject('Settings')\n @tagged(TaggedType.MICROSERVICE, true)\n private settings: any,\n ) { }\n\n get id() {\n return 'EmailTemplateCodes_05012021';\n }\n\n public async up(): Promise<void> {\n const requestData = {\n engine: 'ejs',\n code: EmailTemplateCodes.TIMESHEET_APPROVAL,\n description: 'Timesheet approved',\n html: TimeApprovalTemplate.default,\n text: 'Timesheet approved',\n name: 'Timesheet approval notification',\n topic: 'Timesheet approved.',\n };\n\n if (config.isDev) {\n await this.broker.waitForServices('MailService');\n }\n\n return this.callAction(\n IMailServiceAction.saveTemplate,\n { request: requestData },\n IMoleculerServiceName.MailService,\n );\n }\n\n private async callAction<T, P = any>(command: string, params?: P, topic?: string, opts?: CallingOptions) {\n return this.broker.call<T, P>(`${topic}.${command}@${this.settings.adminApiNamespace}`, params, opts);\n }\n}\n\n@injectable()\nexport class TimesheetSubmitMailTemplate implements IDatabaseMigration {\n constructor(\n @inject(CommonType.MOLECULER_BROKER)\n protected broker: ServiceBroker,\n @inject('Settings')\n @tagged(TaggedType.MICROSERVICE, true)\n private settings: any,\n ) { }\n\n get id() {\n return 'TimesheetSubmitMailTemplate_05012021';\n }\n\n public async up(): Promise<void> {\n const requestData = {\n engine: 'ejs',\n code: EmailTemplateCodes.SUBMIT_TIME,\n description: 'Timesheet submitted',\n html: TimeSubmitTemplate.default,\n text: 'Timesheet submitted',\n name: 'Timesheet submit notification',\n topic: 'Timesheet submitted.',\n };\n if (config.isDev) {\n await this.broker.waitForServices('MailService');\n }\n\n return this.callAction(\n IMailServiceAction.saveTemplate,\n { request: requestData },\n IMoleculerServiceName.MailService,\n );\n }\n\n private async callAction<T, P = any>(command: string, params?: P, topic?: string, opts?: CallingOptions) {\n return this.broker.call<T, P>(`${topic}.${command}@${this.settings.adminApiNamespace}`, params, opts);\n }\n}\n","export default \"<html>\\n <head>\\n\\n </head>\\n\\n <body>\\n <h1> Timesheet has submitted! </h1>\\n <p> Dear <%= name %>! </p>\\n <p> Your timesheet from <bold> <%= startDate %> </bold> to <bold> <%= endDate %> </bold> has been submitted! </p>\\n You can see timesheet details <a href=\\\"<%= timesheet_url %>\\\" __target=\\\"blank\\\"> here </a>\\n\\n <br /> <br />\\n <p> If you have any problem, please <a href=\\\"<%= contact_url %>\\\"> Contact us </a></p>\\n </body>\\n</html>\";","import { Feature } from '@common-stack/server-core';\nimport { interfaces } from 'inversify';\nimport { schema } from './schema';\nimport { timeTrackerModule } from './containers';\nimport { resolvers } from './resolvers';\nimport { TYPES } from './constants';\nimport { mainLoadConfigurationPre } from './initialization';\nimport { TimeTrackerRolesContribution, TimeTrackerRolesPermissionOverwrite } from './preferences';\n\nconst createServiceFunc = (container: interfaces.Container) => ({\n timeRecordService: container.get(TYPES.ITimeRecordService),\n timesheetService: container.get(TYPES.ITimesheetService),\n});\n\nexport default new Feature({\n schema,\n createResolversFunc: resolvers,\n createContainerFunc: [timeTrackerModule],\n createServiceFunc,\n preStartFunc: [mainLoadConfigurationPre],\n addPermissions: {\n createPermissions: [TimeTrackerRolesContribution],\n },\n rolesUpdate: {\n overwriteRolesPermissions: TimeTrackerRolesPermissionOverwrite,\n },\n});\n","export * from './settings';\nexport * from './permissions';\n","export * from './timing-permissions-contribution';\nexport * from './timing-roles-permission-overwrite';\n","import { ConfigurationScope, IPermissionType } from '@adminide-stack/core';\nimport * as nls from '@vscode-alt/monaco-editor/esm/vs/nls';\nimport { IRoles } from '@common-stack/server-core';\nimport { IPreDefineAccountPermissions } from '../../constants';\n\nconst extraParams = {\n type: 'string',\n enum: [IPermissionType.Allow, IPermissionType.Deny, IPermissionType.NotSet],\n default: IPermissionType.NotSet,\n scope: ConfigurationScope.WINDOW,\n};\nexport const TimeTrackerRolesContribution: IRoles<ConfigurationScope> = {\n // others\n [IPreDefineAccountPermissions.viewOthersTimeTracker]: {\n enumDescriptions: [\n nls.localize(\n `${IPreDefineAccountPermissions.viewOthersTimeTracker}.${IPermissionType.Allow}`,\n 'Has ability to view Time Tracker, Reports and Timesheet of other members.',\n ),\n nls.localize(\n `${IPreDefineAccountPermissions.viewOthersTimeTracker}.${IPermissionType.Deny}`,\n 'No ability to view Time Tracker, Reports and Timesheet of other members.',\n ),\n ],\n description: nls.localize(\n IPreDefineAccountPermissions.viewOthersTimeTracker,\n 'View an Time Tracker, Time Reports and Timesheet of others.',\n ),\n ...extraParams,\n },\n [IPreDefineAccountPermissions.createOthersTimeTracker]: {\n enumDescriptions: [\n nls.localize(\n `${IPreDefineAccountPermissions.createOthersTimeTracker}.${IPermissionType.Allow}`,\n 'Has ability to create Time Tracker, Reports and Timesheet of other members.',\n ),\n nls.localize(\n `${IPreDefineAccountPermissions.createOthersTimeTracker}.${IPermissionType.Deny}`,\n 'No ability to create Time Tracker, Reports and Timesheet of other members.',\n ),\n ],\n description: nls.localize(\n IPreDefineAccountPermissions.createOthersTimeTracker,\n 'Create Time Tracker, Reports and Timesheet of other members.',\n ),\n ...extraParams,\n },\n [IPreDefineAccountPermissions.editOthersTimeTracker]: {\n enumDescriptions: [\n nls.localize(\n `${IPreDefineAccountPermissions.editOthersTimeTracker}.${IPermissionType.Allow}`,\n 'Has ability to edit Time Tracker, Reports and Timesheet of other members.',\n ),\n nls.localize(\n `${IPreDefineAccountPermissions.editOthersTimeTracker}.${IPermissionType.Deny}`,\n 'No ability to edit Time Tracker, Reports and Timesheet of other members.',\n ),\n ],\n description: nls.localize(\n IPreDefineAccountPermissions.editOthersTimeTracker,\n 'Manage Time Tracker, Reports and Timesheet of other members',\n ),\n ...extraParams,\n },\n [IPreDefineAccountPermissions.manageOthersTimeTracker]: {\n enumDescriptions: [\n nls.localize(\n `${IPreDefineAccountPermissions.manageOthersTimeTracker}.${IPermissionType.Allow}`,\n 'Has ability to manage Time Tracker, Reports and Timesheet of other members.',\n ),\n nls.localize(\n `${IPreDefineAccountPermissions.manageOthersTimeTracker}.${IPermissionType.Deny}`,\n 'No ability to manage Time Tracker, Reports and Timesheet of other members.',\n ),\n ],\n description: nls.localize(\n IPreDefineAccountPermissions.manageOthersTimeTracker,\n 'Manage Time Tracker, Reports and Timesheet of other members',\n ),\n ...extraParams,\n },\n [IPreDefineAccountPermissions.deleteOthersTimeTracker]: {\n enumDescriptions: [\n nls.localize(\n `${IPreDefineAccountPermissions.deleteOthersTimeTracker}.${IPermissionType.Allow}`,\n 'Has ability to delete Time Tracker and Timesheet of other members.',\n ),\n nls.localize(\n `${IPreDefineAccountPermissions.deleteOthersTimeTracker}.${IPermissionType.Deny}`,\n 'No ability to delete Time Tracker and Timesheet of other members.',\n ),\n ],\n description: nls.localize(\n IPreDefineAccountPermissions.deleteOthersTimeTracker,\n 'Delete Time Tracker and Timesheet of other members.',\n ),\n ...extraParams,\n },\n // self\n [IPreDefineAccountPermissions.viewSelfTimeTracker]: {\n enumDescriptions: [\n nls.localize(\n `${IPreDefineAccountPermissions.viewSelfTimeTracker}.${IPermissionType.Allow}`,\n 'Has ability to view Time Tracker, Reports and Timesheet of self.',\n ),\n nls.localize(\n `${IPreDefineAccountPermissions.viewSelfTimeTracker}.${IPermissionType.Deny}`,\n 'No ability to view Time Tracker, Reports and Timesheet of self.',\n ),\n ],\n description: nls.localize(\n IPreDefineAccountPermissions.viewSelfTimeTracker,\n 'View an Time Tracker, Time Reports and Timesheet of self',\n ),\n ...extraParams,\n },\n [IPreDefineAccountPermissions.createSelfTimeTracker]: {\n enumDescriptions: [\n nls.localize(\n `${IPreDefineAccountPermissions.createSelfTimeTracker}.${IPermissionType.Allow}`,\n 'Has ability to create Time Tracker, Reports and Timesheet of self.',\n ),\n nls.localize(\n `${IPreDefineAccountPermissions.createSelfTimeTracker}.${IPermissionType.Deny}`,\n 'No ability to create Time Tracker, Reports and Timesheet of self.',\n ),\n ],\n description: nls.localize(\n IPreDefineAccountPermissions.createSelfTimeTracker,\n 'Create Time Tracker, Reports and Timesheet of self.',\n ),\n ...extraParams,\n },\n [IPreDefineAccountPermissions.editSelfTimeTracker]: {\n enumDescriptions: [\n nls.localize(\n `${IPreDefineAccountPermissions.editSelfTimeTracker}.${IPermissionType.Allow}`,\n 'Has ability to edit Time Tracker, Reports and Timesheet of self.',\n ),\n nls.localize(\n `${IPreDefineAccountPermissions.editSelfTimeTracker}.${IPermissionType.Deny}`,\n 'No ability to edit Time Tracker, Reports and Timesheet of self.',\n ),\n ],\n description: nls.localize(\n IPreDefineAccountPermissions.editSelfTimeTracker,\n 'Manage Time Tracker, Reports and Timesheet of self.',\n ),\n ...extraParams,\n },\n [IPreDefineAccountPermissions.manageSelfTimeTracker]: {\n enumDescriptions: [\n nls.localize(\n `${IPreDefineAccountPermissions.manageSelfTimeTracker}.${IPermissionType.Allow}`,\n 'Has ability to manage Time Tracker, Reports and Timesheet of self.',\n ),\n nls.localize(\n `${IPreDefineAccountPermissions.manageSelfTimeTracker}.${IPermissionType.Deny}`,\n 'No ability to manage Time Tracker, Reports and Timesheet of self.',\n ),\n ],\n description: nls.localize(\n IPreDefineAccountPermissions.manageSelfTimeTracker,\n 'Manage Time Tracker, Reports and Timesheet of self.',\n ),\n ...extraParams,\n },\n [IPreDefineAccountPermissions.deleteSelfTimeTracker]: {\n enumDescriptions: [\n nls.localize(\n `${IPreDefineAccountPermissions.deleteSelfTimeTracker}.${IPermissionType.Allow}`,\n 'Has ability to delete Time Tracker and Timesheet of self.',\n ),\n nls.localize(\n `${IPreDefineAccountPermissions.deleteSelfTimeTracker}.${IPermissionType.Deny}`,\n 'No ability to delete Time Tracker and Timesheet of self.',\n ),\n ],\n description: nls.localize(\n IPreDefineAccountPermissions.deleteSelfTimeTracker,\n 'Delete Time Tracker and Timesheet of self.',\n ),\n ...extraParams,\n },\n};\n","import { IPermissionType, IApplicationRoles } from '@adminide-stack/core';\nimport { IPreDefineAccountPermissions } from '../../constants';\n\nexport const TimeTrackerRolesPermissionOverwrite = {\n [IApplicationRoles.OWNER]: {\n // self\n [IPreDefineAccountPermissions.viewSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.createSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.editSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.deleteSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.manageSelfTimeTracker]: IPermissionType.Allow,\n\n // others\n [IPreDefineAccountPermissions.viewOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.createOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.editOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.deleteOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.manageOthersTimeTracker]: IPermissionType.Allow,\n },\n [IApplicationRoles.ADMIN]: {\n [IPreDefineAccountPermissions.viewSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.createSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.editSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.deleteSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.manageSelfTimeTracker]: IPermissionType.Deny,\n\n [IPreDefineAccountPermissions.viewOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.createOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.editOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.deleteOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.manageOthersTimeTracker]: IPermissionType.Allow,\n },\n [IApplicationRoles.ORGANIZATION_MANAGER]: {\n [IPreDefineAccountPermissions.viewSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.createSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.editSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.deleteSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.manageSelfTimeTracker]: IPermissionType.Allow,\n\n [IPreDefineAccountPermissions.viewOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.createOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.editOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.deleteOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.manageOthersTimeTracker]: IPermissionType.Allow,\n },\n [IApplicationRoles.PROJECT_ADMIN]: {\n [IPreDefineAccountPermissions.viewSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.createSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.editSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.deleteSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.manageSelfTimeTracker]: IPermissionType.Deny,\n\n [IPreDefineAccountPermissions.viewOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.createOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.editOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.deleteOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.manageOthersTimeTracker]: IPermissionType.Allow,\n },\n [IApplicationRoles.MEMBER]: {\n [IPreDefineAccountPermissions.viewSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.createSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.editSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.deleteSelfTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.manageSelfTimeTracker]: IPermissionType.Deny,\n\n [IPreDefineAccountPermissions.viewOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.createOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.editOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.deleteOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.manageOthersTimeTracker]: IPermissionType.Deny,\n },\n [IApplicationRoles.PROJECT_VIEWER]: {\n [IPreDefineAccountPermissions.viewSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.createSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.editSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.deleteSelfTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.manageSelfTimeTracker]: IPermissionType.Deny,\n\n [IPreDefineAccountPermissions.viewOthersTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.createOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.editOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.deleteOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.manageOthersTimeTracker]: IPermissionType.Deny,\n },\n [IApplicationRoles.USER]: {\n [IPreDefineAccountPermissions.viewSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.createSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.editSelfTimeTracker]: IPermissionType.Allow,\n [IPreDefineAccountPermissions.deleteSelfTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.manageSelfTimeTracker]: IPermissionType.Deny,\n\n [IPreDefineAccountPermissions.viewOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.createOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.editOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.deleteOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.manageOthersTimeTracker]: IPermissionType.Deny,\n },\n [IApplicationRoles.GUEST]: {\n [IPreDefineAccountPermissions.viewSelfTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.createSelfTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.editSelfTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.deleteSelfTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.manageSelfTimeTracker]: IPermissionType.Deny,\n\n [IPreDefineAccountPermissions.viewOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.createOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.editOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.deleteOthersTimeTracker]: IPermissionType.Deny,\n [IPreDefineAccountPermissions.manageOthersTimeTracker]: IPermissionType.Deny,\n },\n};\n","import { ConfigurationScope, IConfigurationPropertySchema } from '@adminide-stack/core';\nimport { localize } from '@vscode-alt/monaco-editor/esm/vs/nls';\n// const localize = (id, defaultMessage) => defineMessages({\n// id,\n// defaultMessage,\n\n// });\nconst enum TimeFormat {\n ROUNDED_0_00_12 = 'h.mm A',\n ROUNDED_0_00_24 = 'H.mm',\n PRECISE_00_00_00_12 = 'hh:mm:ss A',\n PRECISE_00_00_00_24 = 'HH:mm:ss',\n ROUNDED_UP_00_00_12 = 'hh:mm A',\n ROUNDED_UP_00_00_24 = 'HH:mm',\n}\n\nconst enum GroupProjectsBy {\n CLIENT = 'Client',\n CATEGORY = 'Category',\n CUSTOM = 'Custom',\n}\nconst enum DateFormat {\n USFORMAT = 'MM-DD-YYYY',\n UKFORMAT = 'DD-MM-YYYY',\n ISOFORMAT = 'YYYY-MM-DD',\n}\n\nexport const enum WeekDay {\n SUN = 'Sunday',\n MON = 'Monday',\n TUE = 'Tuesday',\n WED = 'Wednesday',\n THU = 'Thursday',\n FRI = 'Friday',\n SAT = 'Saturday',\n}\n\nconst enum FristWeekOfTheYear {\n FIRST_DAY = 'Week containing first day of the year',\n FIRST_FULL_7DAY = 'First full seven-day week in January',\n FIRST_4_DAY = 'First four-day week in January',\n}\n\nconst enum TimeRoundingUpToValue {\n IN_MINUTES_15 = 15 * 60,\n IN_MINUTES_1 = 1 * 60,\n IN_MINUTES_5 = 5 * 60,\n IN_MINUTES_6 = 6 * 60,\n IN_MINUTES_10 = 10 * 60,\n IN_MINUTES_12 = 12 * 60,\n IN_MINUTES_30 = 30 * 60,\n IN_HOUR_1 = 1 * 60 * 60,\n IN_HOUR_4 = 4 * 60 * 60,\n}\n\nconst enum TimeRoundedType {\n ROUND_UP_TO = 'Round up to',\n ROUND_TO_NEAREST = 'Round to nearest',\n ROUND_DOWN_TO = 'Roudn down to',\n}\nexport const TimeTrackerProperties: { [path: string]: IConfigurationPropertySchema } = {\n // notifications\n 'timetracker.notifications.enableTimetrackerNotifications': {\n type: 'boolean',\n default: true,\n description: localize(\n 'timetracker.notifications.timeTrackingNotification',\n 'Allow timetracker emails to be send',\n ),\n scope: ConfigurationScope.WINDOW,\n },\n\n 'timetracker.notifications.timeTrackingNotifications': {\n type: 'boolean',\n default: true,\n description: localize(\n 'timetracker.notifications.timeTrackingNotification',\n 'An email will be send when tracking is stopped by the system due to lack of user response',\n ),\n scope: ConfigurationScope.WINDOW,\n },\n 'timetracker.notifications.approvalNotifications': {\n type: 'boolean',\n default: true,\n description: localize(\n 'timetracker.notifications.approvalNotifications',\n 'An email will be sent to me when my timesheet is approved',\n ),\n scope: ConfigurationScope.WINDOW,\n },\n 'timetracker.notifications.submitNotifications': {\n type: 'boolean',\n default: true,\n description: localize(\n 'timetracker.notifications.submitNotifications',\n 'An email will be sent to me when team member submits time (Approval Managers only)',\n ),\n scope: ConfigurationScope.WINDOW,\n },\n\n // Time Tracking\n 'timetracker.activity.autoStop': {\n type: 'number',\n default: 24,\n description: localize(\n 'timetracker.activity.autoStop',\n 'Tracking will stop once maximum tack length has been exceeded',\n ),\n scope: ConfigurationScope.WINDOW,\n },\n 'timetracker.activity.waitingTime': {\n type: 'number',\n default: 120,\n description: localize(\n 'timetracker.activity.waitingTime',\n 'Enable activity check on the time tracking to ask if you are still tracking after the choosen idle time (in seconds)',\n ),\n scope: ConfigurationScope.WINDOW,\n },\n 'timetracker.activity.maxTimeInADay': {\n type: 'number',\n default: 120,\n description: localize(\n 'timetracker.activity.maxTimeInADay',\n 'Enable activity check on the time tracking upto choosen max time in a day(in seconds). It can change upto 1440',\n ),\n scope: ConfigurationScope.WINDOW,\n },\n 'timetracker.timerecord.automaticLock': {\n type: 'string',\n default: null,\n description: localize(\n 'accountNotificationPrimaryEmail',\n 'Prevent regular users from editing their past time or adding new entries to past dates',\n ),\n scope: ConfigurationScope.RESOURCE,\n },\n 'timetracker.project.billable': {\n type: 'boolean',\n default: true,\n description: localize(\n 'timetracker.project.billable',\n 'When you create a project, make it billable so its time entries are set as billable by default.',\n ),\n scope: ConfigurationScope.WINDOW,\n },\n 'timetracker.project.daysAllowedToWork': {\n type: ['string'],\n default: [WeekDay.MON, WeekDay.TUE, WeekDay.WED, WeekDay.THU, WeekDay.FRI],\n enum: [WeekDay.MON, WeekDay.TUE, WeekDay.WED, WeekDay.THU, WeekDay.FRI, WeekDay.SAT, WeekDay.SUN],\n description: localize('timetracker.project.recurringDailyLimit', 'Select working day'),\n scope: ConfigurationScope.RESOURCE,\n },\n 'timetracker.project.firstDayOfTheWeek': {\n type: 'string',\n enum: [WeekDay.MON, WeekDay.TUE, WeekDay.WED, WeekDay.THU, WeekDay.FRI, WeekDay.SAT, WeekDay.SUN],\n default: WeekDay.MON,\n description: localize('timetracker.project.firstDayOfTheWeek', 'First day of the week'),\n scope: ConfigurationScope.RESOURCE,\n },\n 'timetracker.project.firstWeekOfTheyear': {\n type: 'string',\n enum: [FristWeekOfTheYear.FIRST_4_DAY, FristWeekOfTheYear.FIRST_FULL_7DAY, FristWeekOfTheYear.FIRST_DAY],\n default: FristWeekOfTheYear.FIRST_4_DAY,\n enumDescriptions: [\n localize(\n 'timetracker.project.firstWeekOfTheyear.FIRST_4_DAY',\n 'The week regarded to be the first week of the year is that which contains at least 4 days of the new year.',\n ),\n localize(\n 'timetracker.project.firstWeekOfTheyear.FIRST_FULL_7DAY',\n 'The week regarded as the first week of the year is that which contains 7 full days in the new year.',\n ),\n localize(\n 'timetracker.project.firstWeekOfTheyear.FIRST_DAY',\n 'The week regarded as the first week of the years is that which contains at least one-day of the new year.',\n ),\n ],\n description: localize(\n 'timetracker.project.firstWeekOfTheyear',\n 'You can set how you start or view the first calendar week of the year. This will be visible on Timetracker pages like \"Reports\" or \"Calender View\".',\n ),\n scope: ConfigurationScope.RESOURCE,\n },\n 'timetracker.project.timeFormat': {\n type: 'string',\n enum: [\n TimeFormat.ROUNDED_0_00_12,\n TimeFormat.ROUNDED_0_00_24,\n TimeFormat.PRECISE_00_00_00_12,\n TimeFormat.PRECISE_00_00_00_24,\n TimeFormat.ROUNDED_UP_00_00_12,\n TimeFormat.ROUNDED_UP_00_00_24,\n ],\n default: TimeFormat.PRECISE_00_00_00_12,\n enumDescriptions: [\n localize('timetracker.project.timeFormat.ROUNDED_0_00_12', '\"0.00 AM/PM\" (12 hours rounded)'),\n localize('timetracker.project.timeFormat.ROUNDED_0_00_24', '\"0.00\" (24 hours rounded)'),\n localize(\n 'timetracker.project.timeFormat.PRECISE_00_00_00_12',\n '\"00:00:00 AM/PM\" (precise 12 hours format)',\n ),\n localize('timetracker.project.timeFormat.PRECISE_00_00_00_24', '\"13:00:00\" (precise 24 hours format)'),\n localize('timetracker.project.timeFormat.ROUNDED_UP_00_00_12', '\"00:00 AM/PM\" (rounded up)'),\n localize('timetracker.project.timeFormat.ROUNDED_UP_00_00_24', '\"13:00\" (rounded up)'),\n ],\n description: localize(\n 'timetracker.project.timeFormat',\n 'Select the format in which you want your entry represented',\n ),\n scope: ConfigurationScope.RESOURCE,\n },\n 'timetracker.project.dateFormat': {\n type: 'string',\n enum: [DateFormat.USFORMAT, DateFormat.UKFORMAT, DateFormat.ISOFORMAT],\n default: DateFormat.USFORMAT,\n enumDescriptions: [\n localize('timetracker.project.dateFormat.USFORMAT', '\"MM-DD-YYYY\" (US standard)'),\n localize('timetracker.project.dateFormat.UKFORMAT', '\"DD-MM-YYYY\" (UK standard)'),\n localize('timetracker.project.dateFormat.ISOFORMAT', '\"YYYY-MM-DD\" (ISO FORMAT)'),\n ],\n description: localize(\n 'timetracker.project.dateFormat',\n 'Select the format in which you want your entry represented',\n ),\n scope: ConfigurationScope.RESOURCE,\n },\n 'timetracker.project.roundedToNearest': {\n type: 'string',\n enum: [\n TimeRoundingUpToValue.IN_MINUTES_1,\n TimeRoundingUpToValue.IN_MINUTES_5,\n TimeRoundingUpToValue.IN_MINUTES_6,\n TimeRoundingUpToValue.IN_MINUTES_10,\n TimeRoundingUpToValue.IN_MINUTES_12,\n TimeRoundingUpToValue.IN_MINUTES_15,\n TimeRoundingUpToValue.IN_MINUTES_30,\n TimeRoundingUpToValue.IN_HOUR_1,\n TimeRoundingUpToValue.IN_HOUR_4,\n ],\n default: TimeRoundingUpToValue.IN_MINUTES_15,\n enumDescriptions: [\n localize('TimeRoundingUpToValue.IN_MINUTES_1', '1 minute'),\n localize('TimeRoundingUpToValue.IN_MINUTES_5', '5 minutes'),\n localize('TimeRoundingUpToValue.IN_MINUTES_6', '6 minutes'),\n localize('TimeRoundingUpToValue.IN_MINUTES_10', '10 minutes'),\n localize('TimeRoundingUpToValue.IN_MINUTES_12', '12 minutes'),\n localize('TimeRoundingUpToValue.IN_MINUTES_15', '15 minutes'),\n localize('TimeRoundingUpToValue.IN_MINUTES_30', '30 minutes'),\n localize('TimeRoundingUpToValue.IN_HOUR_1', '1 hour'),\n localize('TimeRoundingUpToValue.IN_HOUR_4', '4 hours'),\n ],\n description: localize('timetracker.project.roundedToNearest', 'Round to nearest selected minute/hour'),\n scope: ConfigurationScope.RESOURCE,\n },\n 'timetracker.project.roundedType': {\n type: 'string',\n enum: [TimeRoundedType.ROUND_UP_TO, TimeRoundedType.ROUND_TO_NEAREST, TimeRoundedType.ROUND_DOWN_TO],\n default: TimeRoundedType.ROUND_TO_NEAREST,\n enumDescriptions: [\n localize(\n 'timetracker.project.roundedType.ROUND_UP_TO',\n 'e.g. if you set the interval to 30min, a 26min entry will show up in report as 30min',\n ),\n localize(\n 'timetracker.project.roundedType.ROUND_TO_NEAREST',\n 'e.g. if you set theinterval to 30min, a 14min entry will up as 0min and 26min entry as 30min',\n ),\n localize(\n 'timetracker.project.roundedType.ROUND_DOWN_TO',\n 'e.g. if you set the interval to 30min, a 26min entry will show up in reports as 0min',\n ),\n ],\n description: localize('timetracker.project.roundedType', 'Select the time rounding type'),\n scope: ConfigurationScope.RESOURCE,\n },\n 'timetracker.report.timeRoundingInReports': {\n type: 'boolean',\n default: false,\n description: localize(\n 'timetracker.report.timeRoundingInReports',\n 'Round time in reports up, down, or to nearest X minutes',\n ),\n scope: ConfigurationScope.WINDOW,\n },\n // 'timetracker.project.favorites': {\n // type: 'boolean',\n // default: true,\n // description: localize(\n // 'timetracker.project.favorites',\n // 'Let people mark their most used projects as favorite so they appear at the top of their project list when tracking time.',\n // ),\n // scope: ConfigurationScope.RESOURCE,\n // },\n 'timetracker.project.groupingLabel': {\n type: 'string',\n default: GroupProjectsBy.CLIENT,\n enum: [GroupProjectsBy.CLIENT, GroupProjectsBy.CATEGORY, GroupProjectsBy.CUSTOM],\n description: localize(\n 'timetracker.project.groupingLabel',\n 'Group Project by clients or departments, you can change the lable to somethign else',\n ),\n scope: ConfigurationScope.RESOURCE,\n },\n 'timetracker.project.pickerSpecialFilter': {\n type: 'boolean',\n default: false,\n description: localize(\n 'timetracker.project.pickerSpecialFilter',\n 'Quickly find the right task in project picker by using the task@project syntax.',\n ),\n scope: ConfigurationScope.WINDOW,\n },\n 'timetracker.timerecord.screenshotsEnabled': {\n type: 'boolean',\n default: false,\n description: localize(\n 'timetracker.timerecord.screenshotsEnabled',\n 'Generate screenshots every 5 minutes while the timer is running (desktop app only)',\n ),\n scope: ConfigurationScope.WINDOW,\n },\n 'timetracker.project.taskBillableEnabled': {\n type: 'boolean',\n default: false,\n description: localize('SubscribeToBillingNotifications', 'Subscribe to all billing changes'),\n scope: ConfigurationScope.WINDOW,\n },\n 'timetracker.project.taskRateEnabled': {\n type: 'boolean',\n default: false,\n description: localize(\n 'timetracker.project.taskRateEnabled',\n 'Have a different rate depending on the task on a project, plus choose whether tasks are billable by default.',\n ),\n scope: ConfigurationScope.RESOURCE,\n },\n 'timetracker.project.timeApprovalEnabled': {\n type: 'boolean',\n default: false,\n description: localize(\n 'timetracker.project.timeApprovalEnabled',\n 'Your team can submit their weekly timehseets for review, which you can approve or reject',\n ),\n scope: ConfigurationScope.RESOURCE,\n },\n 'timetracker.project.timeTrackingMode': {\n type: 'string',\n default: 'DEFAULT',\n description: localize('SubscribeToBillingNotifications', 'Subscribe to all billing changes'),\n scope: ConfigurationScope.RESOURCE,\n },\n 'timetracker.project.trackTimeDownToSecond': {\n type: 'boolean',\n description: localize('SubscribeToBillingNotifications', 'Subscribe to all billing changes'),\n default: true,\n scope: ConfigurationScope.WINDOW,\n },\n};\n","import { IConfigurationNode } from '@adminide-stack/core';\nimport { IConfigurationContributionNames } from '@admin-layout/timetracker-core';\nimport { TimeTrackerProperties } from './general-settings';\nimport { TrackerPaymentProperties } from './payment-settings';\n\nexport const TimeTrackerContribution: IConfigurationNode = {\n id: IConfigurationContributionNames.timeTracker,\n type: 'object',\n properties: { ...TimeTrackerProperties, ...TrackerPaymentProperties },\n};\n","import { ConfigurationScope, IConfigurationPropertySchema } from '@adminide-stack/core';\nimport { localize } from '@vscode-alt/monaco-editor/esm/vs/nls';\n\nconst enum PayPeriod {\n NONE = 'None',\n WEEKLY = 'Weekly',\n TWICE_PER_MONTH = 'Twice per month',\n BI_WEEKLY = 'Bi-weekly',\n MONTHLY = 'Monthly',\n}\n\nconst enum PayRate {\n HOURLY = 'Hourly',\n FIXED = 'Fixed',\n}\n\nconst enum ProcessPayment {\n MANUALLY = 'Manually',\n AUTOMATICALLY = 'Automatically',\n}\n\nexport const TrackerPaymentProperties: { [path: string]: IConfigurationPropertySchema } = {\n 'timetracker.user.payment.processPayments': {\n type: 'string',\n default: ProcessPayment.MANUALLY,\n enum: [ProcessPayment.MANUALLY, ProcessPayment.AUTOMATICALLY],\n enumDescriptions: [\n localize(\n 'timetracker.payment.processPayments.manually',\n 'When set manually, time need to be updated manually.',\n ),\n localize(\n 'timetracker.payment.processPayments.automatically',\n \"When set automatically, time is marked as 'paid' in our system and if you have payroll enabled, the payment will be send.\",\n ),\n ],\n description: localize(\n 'timetracker.payment.processPayments',\n 'Choose whether you want to manually send payments or have them automatically processed.',\n ),\n scope: ConfigurationScope.WINDOW,\n overridable: true,\n },\n 'timetracker.user.payment.sendPaymentAfter': {\n type: 'number',\n default: 0,\n description: localize(\n 'timetracker.payment.sendPaymentAfter',\n 'Number of days after pay period ends, you would like to send payments for timesheets. ',\n ),\n scope: ConfigurationScope.WINDOW,\n overridable: true,\n },\n\n 'timetracker.user.payment.payPeriod': {\n type: 'string',\n enum: [PayPeriod.NONE, PayPeriod.WEEKLY, PayPeriod.TWICE_PER_MONTH, PayPeriod.BI_WEEKLY, PayPeriod.MONTHLY],\n default: PayPeriod.NONE,\n description: localize('timetracker.payment.payPeriod', 'Pay Period'),\n scope: ConfigurationScope.RESOURCE,\n overridable: true,\n },\n 'timetracker.user.payment.payType': {\n type: 'string',\n enum: [PayRate.HOURLY, PayRate.FIXED],\n default: PayRate.HOURLY,\n description: localize('timetracker.payment.payType', 'Pay type'),\n scope: ConfigurationScope.RESOURCE,\n overridable: true,\n },\n 'timetracker.user.payment.billRate': {\n type: 'number',\n default: 0.0,\n description: localize('timetracker.payment.billRate', 'Billing Rate'),\n scope: ConfigurationScope.RESOURCE,\n overridable: true,\n },\n 'timetracker.user.payment.payRate': {\n type: 'number',\n default: 0.0,\n description: localize('timetracker.payment.payRate', 'Paying Rate'),\n scope: ConfigurationScope.RESOURCE,\n overridable: true,\n },\n 'timetracker.user.payment.requireTimesheetApproval': {\n type: 'boolean',\n default: false,\n description: localize('timetracker.payment.requireTimesheetApproval', 'Whether it requires Timesheet Approval'),\n scope: ConfigurationScope.RESOURCE,\n overridable: true,\n },\n // User limits\n 'timetracker.user.recurringWeeklyLimit': {\n type: 'number',\n default: null,\n description: localize(\n 'timetracker.payment.recurringWeeklyLimit',\n 'Limits how much time can be tracked each week',\n ),\n scope: ConfigurationScope.RESOURCE,\n overridable: true,\n },\n 'timetracker.user.recurringDailyLimit': {\n type: 'number',\n default: null,\n description: localize(\n 'timetracker.payment.recurringDailyLimit',\n 'Limits how much time can be tracked each day',\n ),\n scope: ConfigurationScope.RESOURCE,\n overridable: true,\n },\n};\n","import { resolver as timerecordResolver } from './timerecord-resolver';\nimport { resolver as timesheetResolver } from './timesheet-resolver';\n\nexport const resolvers = [timerecordResolver, timesheetResolver];\n","/* eslint-disable import/no-extraneous-dependencies */\n/* eslint-disable @typescript-eslint/ban-types */\n/* eslint-disable no-underscore-dangle */\nimport * as _ from 'lodash';\nimport { withFilter } from 'graphql-subscriptions';\nimport { ITimeRecordPubSubEvents } from '@admin-layout/timetracker-core';\n\nexport const resolver = (options) => ({\n TimeRecord: {\n id: (root) => root.id || root._id,\n },\n Query: {\n getTimeRecords: (root, args, { timeRecordService, user, userContext }) => {\n options.logger.trace('(Query.getTimeRecords) args %j', args);\n return timeRecordService.getTimeRecords(userContext.orgId, args.userId);\n },\n getDurationTimeRecords: (root, args, { timeRecordService, user, userContext }) => {\n options.logger.trace('(Query.getDurationTimeRecords) args %j', args);\n return timeRecordService.getDurationTimeRecords(userContext.orgId, args.startTime, args.endTime, args.userId);\n },\n getPlayingTimeRecord: (root, args, { timeRecordService, user, userContext }) => {\n options.logger.trace('(Query.getPlayingTimeRecord) args %j', args);\n return timeRecordService.getPlayingTimeRecord(user._id || user.sub, userContext.orgId);\n },\n },\n Mutation: {\n createTimeRecord: (root, args, { timeRecordService, user, userContext }) => {\n options.logger.trace('(Mutation.createTimeRecord) args %j', args);\n let { userId } = args.request;\n if (userId === undefined) userId = user._id || user.sub;\n return timeRecordService.createTimeRecord(userId, userContext.orgId, args.request);\n },\n updateTimeRecord: (root, args, { timeRecordService, user, userContext }) => {\n options.logger.trace('(Mutation.updateTimeRecord) args %j', args);\n let { userId } = args.request;\n if (userId === undefined) userId = user._id || user.sub;\n return timeRecordService.updateTimeRecord(userId, userContext.orgId, args.recordId, args.request);\n },\n removeTimeRecord: (root, args, { timeRecordService, user, userContext }) => {\n options.logger.trace('(Mutation.removeTimeRecord) args %j', args);\n const userId = user._id || user.sub;\n return timeRecordService.removeTimeRecord(userId, userContext.orgId, args.recordId);\n },\n removeDurationTimeRecords: (root, args, { timeRecordService, user, userContext }) => {\n options.logger.trace('(Mutation.removeDurationTimeRecords) args %j', args);\n const userId = user._id || user.sub;\n return timeRecordService.removeDurationTimeRecords(\n userId,\n userContext.orgId,\n args.startTime,\n args.endTime,\n args.projectId,\n );\n },\n },\n Subscription: {\n SubscribeToTimeTracker: {\n subscribe: withFilter(\n () =>\n options.pubsub.asyncIterator([\n ITimeRecordPubSubEvents.TimeRecordCreated,\n ITimeRecordPubSubEvents.TimeRecordUpdated,\n ITimeRecordPubSubEvents.TimeRecordDeleted,\n ]),\n async (payload, variables, context: {}) =>\n payload.SubscribeToTimeTracker.orgName === variables.orgName &&\n payload.SubscribeToTimeTracker.userId === variables.userId,\n ),\n },\n },\n});\n","/* eslint-disable no-underscore-dangle */\nexport const resolver = (options) => ({\n Query: {\n getTimesheets: (root, args, { timesheetService, userContext }) => {\n options.logger.trace('(Query.getTimeSheets) args %j', args);\n if (!args.withTotalHours) return timesheetService.getTimesheets(userContext.orgId);\n return timesheetService.getTimesheetsWithTotalHours(userContext.orgId);\n },\n getDurationTimesheets: (root, args, { timesheetService, userContext }) => {\n options.logger.trace('(Query.getDurationTimesheets) args %j', args);\n return timesheetService.getDurationTimesheets(userContext.orgId, args.start, args.end);\n },\n },\n\n Mutation: {\n createTimesheet: (root, args, { timesheetService, user, userContext }) => {\n options.logger.trace('(Mutation.createTimesheet) args %j', args);\n return timesheetService.createTimesheet(user._id || user.sub, userContext.orgId, args.request);\n },\n updateTimesheet: (root, args, { timesheetService, user, userContext }) => {\n options.logger.trace('(Mutation.updateTimesheet) args %j', args);\n return timesheetService.updateTimesheet(user._id || user.sub, userContext.orgId, args.sheetId, args.request, {\n ...userContext,\n username: user.name,\n });\n },\n removeTimesheet: (root, args, { timesheetService, user, userContext }) => {\n options.logger.trace('(Mutation.removeTimesheet) args %j', args);\n return timesheetService.removeTimesheet(user._id || user.sub, userContext.orgId, args.sheetId);\n },\n updateTimesheetStatus: (root, args, { timesheetService, user, userContext }) => {\n options.logger.trace('(Mutation.updateTimesheetStatus) args %j', args);\n return timesheetService.updateTimesheetStatus(userContext.orgId, args.sheetId, args.state);\n },\n },\n});\n","export default \"type Tag {\\n id: ID!\\n name: String\\n}\\n\\nenum StartYearWeekType {\\n FIRST_FOURDAY_WEEK\\n FIRST_FULL_WEEK\\n FIRST_DAY_WEEK\\n}\\n\\nextend type Query {\\n getTags: [Tag]\\n getSettings: Settings\\n}\\n\";","import timeRecordSchema from './timerecord-schema.graphql';\nimport timesheetSchema from './timesheet-schema.graphql';\nimport timeTrackerSchema from './timetracker-schema.graphql';\nimport commonSchema from './common-schema.graphql';\n\nconst schema = [timeRecordSchema, timesheetSchema, timeTrackerSchema, commonSchema].join('\\n');\n\nexport { schema };\n","export default \"type TimeRecords {\\n orgId: String\\n userId: String\\n timeRecords: [TimeRecord]\\n}\\n\\ntype TimeRecord {\\n id: String\\n startTime: DateTime\\n endTime: DateTime\\n taskId: String\\n taskName: String\\n description: String\\n tags: [String]\\n isBillable: Boolean\\n projectId: String\\n clientId: String\\n userId: String\\n orgId: String\\n timesheetId: String\\n editable: Boolean\\n isPause: Boolean\\n isTimeout: Boolean\\n pauseStatus: [PauseStatus]\\n}\\n\\ntype PauseStatus {\\n pausedTime: DateTime\\n restartTime: DateTime\\n}\\n\\ninput PauseStatus_Input {\\n pausedTime: DateTime\\n restartTime: DateTime\\n}\\n\\ninput TimeRecordRequest {\\n userId: String\\n startTime: DateTime\\n endTime: DateTime\\n taskName: String\\n description: String\\n tags: [String]\\n isBillable: Boolean\\n projectId: String\\n clientId: String\\n timesheetId: String\\n isPause: Boolean\\n isTimeout: Boolean\\n pauseStatus: [PauseStatus_Input]\\n}\\n\\n\\\"\\\"\\\"\\n Subscription event for timer\\n\\\"\\\"\\\"\\nenum TimeRecordPubSubEvents {\\n TimeRecordCreated\\n TimeRecordUpdated\\n TimeRecordStopped\\n TimeRecordDeleted\\n TimeRecordConfigurationUpdate\\n}\\n\\ntype SubscriptionTimeRecord {\\n mutation: TimeRecordPubSubEvents\\n timeRecord: TimeRecord\\n}\\n\\nextend type Query {\\n getTimeRecords(userId: String): [TimeRecord] @addAccountContext\\n getDurationTimeRecords(startTime: DateTime, endTime: DateTime, userId: String): [TimeRecord] @addAccountContext\\n getPlayingTimeRecord: TimeRecord @addAccountContext\\n}\\n\\nextend type Mutation {\\n createTimeRecord(request: TimeRecordRequest): String @addAccountContext\\n updateTimeRecord(recordId: String!, request: TimeRecordRequest): Boolean @addAccountContext\\n removeTimeRecord(recordId: String!): Boolean @addAccountContext\\n removeDurationTimeRecords(startTime: DateTime, endTime: DateTime, projectId: String): Boolean @addAccountContext\\n}\\n\\nextend type Subscription {\\n SubscribeToTimeTracker(orgName: String, userId: String): SubscriptionTimeRecord\\n}\\n\";","export default \"# scalar DateTime\\nenum TimesheetState {\\n OPEN\\n APPROVED_PENDING\\n APPROVED\\n APPROVED_FINALIZED # --- which means no going back\\n DENYED\\n SUBMITTED\\n DENYED_FINALIZED # --- which means no going back\\n}\\n\\ntype Timesheets {\\n orgId: String\\n userId: String\\n timesheets: [Timesheet]\\n}\\n\\ntype Timesheet {\\n id: ID\\n userId: String\\n startDate: DateTime\\n endDate: DateTime\\n state: TimesheetState\\n submittedOn: DateTime\\n approvedOn: DateTime\\n approvedBy: String\\n updatedBy: String # ---> userId\\n updatedOn: DateTime\\n timeRecordsId: [String]\\n}\\n\\ninput TimesheetCreateRequest {\\n userId: String\\n startDate: DateTime\\n endDate: DateTime\\n state: TimesheetState\\n submittedOn: DateTime\\n approvedOn: DateTime\\n approvedBy: String\\n updatedBy: String # ---> userId\\n updatedOn: DateTime\\n timeRecordsId: [String]\\n}\\n\\ntype TimesheetResponse {\\n id: ID\\n startDate: DateTime\\n endDate: DateTime\\n state: TimesheetState\\n submittedOn: DateTime\\n approvedOn: DateTime\\n approvedBy: String\\n updatedBy: String # ---> userId\\n updatedOn: DateTime\\n userId: String\\n orgId: String\\n totalDuration: Int\\n}\\n\\nextend type Query {\\n getTimesheets(userId: String, withTotalHours: Boolean): [TimesheetResponse] @addAccountContext\\n getDurationTimesheets(start: DateTime, end: DateTime): [TimesheetResponse] @addAccountContext\\n}\\n\\nextend type Mutation {\\n createTimesheet(request: TimesheetCreateRequest): Boolean @addAccountContext\\n updateTimesheet(sheetId: String, request: TimesheetCreateRequest): Boolean @addAccountContext\\n removeTimesheet(sheetId: String): Boolean @addAccountContext\\n updateTimesheetStatus(sheetId: String, state: TimesheetState): Boolean @addAccountContext\\n}\\n\";","export default \"type TimeTracker {\\n userId: String\\n orgId: String\\n timeRecords: [TimeRecord]\\n timesheets: [Timesheet]\\n}\\n\";","export * from './timesheet-service';\nexport * from './timerecord-service';\n","/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n/* eslint-disable no-underscore-dangle */\n/* eslint-disable import/no-extraneous-dependencies */\nimport { CdmLogger } from '@cdm-logger/core';\nimport { inject, injectable } from 'inversify';\nimport { ITimeRecord, ITimeRecordRequest, ITimeRecordPubSubEvents } from '@admin-layout/timetracker-core';\nimport { ServerTypes, IPreferencesService } from '@adminide-stack/core';\nimport { PubSubEngine } from 'graphql-subscriptions';\nimport { ServiceBroker } from 'moleculer';\nimport { CommonType } from '@common-stack/core';\nimport { ITimeRecordRepository } from '../interfaces';\nimport { TYPES } from '../constants';\nimport { ITimeRecordService } from '../interfaces/timerecord-service';\n\n@injectable()\nexport class TimeRecordService implements ITimeRecordService {\n private logger: CdmLogger.ILogger;\n\n constructor(\n @inject(TYPES.ITimeRecordRepository)\n protected timeRecordRepository: ITimeRecordRepository,\n\n @inject(ServerTypes.IPreferenceEditorService)\n private preferencesService: IPreferencesService,\n\n @inject(CommonType.MOLECULER_BROKER)\n private broker: ServiceBroker,\n\n @inject('PubSub')\n private pubsub: PubSubEngine,\n\n @inject('Logger')\n logger: CdmLogger.ILogger,\n ) {\n this.logger = logger;\n }\n\n public async getTimeRecords(orgId: string, userId: string): Promise<Array<ITimeRecord>> {\n return this.timeRecordRepository.getTimeRecords(orgId, userId);\n }\n\n public async getDurationTimeRecords(\n orgId: string,\n startTime: Date,\n endTime: Date,\n userId?: string,\n ): Promise<Array<ITimeRecord>> {\n const timeRecords = await this.timeRecordRepository.getTimeRecords(orgId, userId, startTime, endTime);\n return timeRecords.filter((r) => r.endTime !== null);\n }\n\n public async getPlayingTimeRecord(userId: string, orgId: string): Promise<ITimeRecord> {\n return this.timeRecordRepository.getPlayingTimeRecord(userId, orgId);\n }\n\n public async createTimeRecord(userId: string, orgId: string, request: ITimeRecordRequest) {\n const data = await this.timeRecordRepository.createTimeRecord(userId, orgId, request);\n const timeRecord = data?.timeRecords[0];\n if (timeRecord) {\n const record = {\n orgName: data.orgId,\n userId: timeRecord.userId,\n mutation: ITimeRecordPubSubEvents.TimeRecordCreated,\n timeRecord,\n };\n this.pubsub.publish(ITimeRecordPubSubEvents.TimeRecordCreated, { SubscribeToTimeTracker: record });\n }\n return (data as any)._id;\n }\n\n public async updateTimeRecord(userId: string, orgId: string, recordId: string, request: ITimeRecordRequest) {\n const data = await this.timeRecordRepository.updateTimeRecord(userId, orgId, recordId, request);\n const timeRecord = data?.timeRecords[0];\n if (timeRecord) {\n const record = {\n orgName: data.orgId,\n userId: timeRecord.userId,\n mutation: ITimeRecordPubSubEvents.TimeRecordUpdated,\n timeRecord,\n };\n this.pubsub.publish(ITimeRecordPubSubEvents.TimeRecordUpdated, { SubscribeToTimeTracker: record });\n }\n return true;\n }\n\n public async removeTimeRecord(userId: string, orgId: string, recordId: string) {\n const data = await this.timeRecordRepository.removeTimeRecord(userId, orgId, recordId);\n const record = {\n orgName: data.orgId,\n userId: data.userId,\n mutation: ITimeRecordPubSubEvents.TimeRecordDeleted,\n timeRecord: data?.timeRecords[0],\n };\n this.pubsub.publish(ITimeRecordPubSubEvents.TimeRecordDeleted, { SubscribeToTimeTracker: record });\n return true;\n }\n\n public async removeDurationTimeRecords(\n userId: string,\n orgId: string,\n startTime: Date,\n endTime: Date,\n projectId: string,\n ) {\n return this.timeRecordRepository.removeDurationTimeRecords(userId, orgId, startTime, endTime, projectId);\n }\n\n public async approveTimeRecords(orgId: string, sheetId: string, startDate: Date, endDate: Date) {\n this.timeRecordRepository.approveTimeRecords(orgId, sheetId, startDate, endDate);\n }\n\n public async disapproveTimeRecords(orgId: string, sheetId: string) {\n this.timeRecordRepository.disapproveTimeRecords(orgId, sheetId);\n }\n}\n","/* eslint-disable class-methods-use-this */\nimport * as ILogger from 'bunyan';\nimport { inject, injectable, tagged } from 'inversify';\nimport { ITimesheetState, ITimesheetCreateRequest, ITimeRecord } from '@admin-layout/timetracker-core';\nimport {\n ConfigurationTarget,\n generateOrgUri,\n IConfigFragmentName,\n ServerTypes,\n IPreferencesService,\n} from '@adminide-stack/core';\nimport { IMailServiceAction, IMailerServicesendArgs, IMoleculerServiceName } from '@container-stack/mailing-api';\nimport * as moment from 'moment';\nimport { ServiceBroker, CallingOptions } from 'moleculer';\nimport { CommonType, TaggedType } from '@common-stack/core';\nimport { TYPES, EmailTemplateCodes } from '../constants';\nimport { config } from '../config';\nimport { ITimesheetService } from '../interfaces/timesheet-service';\nimport { ITimesheetRepository, ITimeRecordRepository } from '../interfaces';\n\n@injectable()\nexport class TimesheetService implements ITimesheetService {\n private logger: ILogger;\n\n constructor(\n @inject(TYPES.ITimesheetRepository)\n protected timesheetRepository: ITimesheetRepository,\n\n @inject(TYPES.ITimeRecordRepository)\n protected timeRecordRepository: ITimeRecordRepository,\n\n @inject(TYPES.ITimeRecordService)\n protected timeRecordService: ITimeRecordRepository,\n\n @inject(ServerTypes.IPreferenceEditorService)\n private preferencesService: IPreferencesService,\n\n @inject(CommonType.MOLECULER_BROKER)\n private broker: ServiceBroker,\n\n @inject('Settings')\n @tagged(TaggedType.MICROSERVICE, true)\n private settings: any,\n @inject('Logger')\n logger: ILogger,\n ) {\n this.logger = logger;\n }\n\n public async getTimesheets(orgId: string, userId?: string) {\n return this.timesheetRepository.getTimesheets(orgId, userId);\n }\n\n public async getTimesheetsWithTotalHours(orgId: string, userId?: string) {\n const timesheets = await this.timesheetRepository.getTimesheets(orgId, userId);\n const timeRecords: (ITimeRecord & { _id?: Object })[] = await this.timeRecordRepository.getTimeRecords(orgId, userId);\n return timesheets.map((timesheet) => {\n const sheetTotalDuration = timeRecords\n .filter(\n (tr) =>\n timesheet.timeRecordsId?.includes(tr._id.toString()),\n )\n .reduce(\n (duration, tr) =>\n duration + Math.floor((moment(tr.endTime).valueOf() - moment(tr.startTime).valueOf()) / 1000),\n 0,\n );\n return {\n id: timesheet.id,\n startDate: timesheet.startDate,\n endDate: timesheet.endDate,\n state: timesheet.state,\n userId: timesheet.userId,\n orgId,\n approvedBy: timesheet.approvedBy,\n approvedOn: timesheet.approvedOn,\n submittedOn: timesheet.submittedOn,\n updatedBy: timesheet.updatedBy,\n updatedOn: timesheet.updatedOn,\n totalDuration: sheetTotalDuration,\n };\n });\n }\n\n public async getDurationTimesheets(orgId: string, start: Date, end: Date) {\n const timesheets = await this.timesheetRepository.getOrganizationTimesheets(orgId);\n return timesheets.filter(\n (sh) =>\n moment(start).format('YYYY-MM-DD') === moment(sh.startDate).format('YYYY-MM-DD') &&\n moment(end).format('YYYY-MM-DD') === moment(sh.endDate).format('YYYY-MM-DD'),\n );\n }\n\n public async createTimesheet(userId: string, orgId: string, request: ITimesheetCreateRequest) {\n return this.timesheetRepository.createTimesheet(userId, orgId, request);\n }\n\n public async updateTimesheet(\n userId: string,\n orgId: string,\n sheetId: string,\n request: ITimesheetCreateRequest,\n userContext?: any,\n ) {\n try {\n await this.timesheetRepository.updateTimesheet(orgId, sheetId, request);\n if (request.state === ITimesheetState.APPROVED) {\n // approve time records from startDate to endDate\n this.timeRecordService.approveTimeRecords(orgId, sheetId, request.startDate, request.endDate);\n } else if (request.state === ITimesheetState.DENYED) {\n // approve time records from startDate to endDate\n this.timeRecordService.disapproveTimeRecords(orgId, sheetId);\n }\n const resourceUri = generateOrgUri(orgId, IConfigFragmentName.settings);\n const { settings } = (await this.preferencesService.viewerSettings({\n target: ConfigurationTarget.ORGANIZATION_RESOURCE,\n settingsResource: resourceUri,\n })) as any;\n if (\n request.state === ITimesheetState.APPROVED &&\n settings.timetracker.notifications.approvalNotifications &&\n settings.timetracker.notifications.enableTimetrackerNotifications\n ) {\n const mailTopic = 'Timsheet approved';\n const mailTo = userContext.emailId;\n const mailFrom = config.MAIL_SEND_DEFAULT_EMAIL;\n const templateId = EmailTemplateCodes.TIMESHEET_APPROVAL;\n const templateVars = {\n name: userContext.username,\n startDate: moment(request.startDate).format('YYYY-MM-DD'),\n endDate: moment(request.endDate).format('YYYY-MM-DD'),\n timesheet_url: `${config.CLIENT_URL}/${orgId}/time-tracker/timeapproval`,\n contact_url: `${config.CLIENT_URL}`,\n };\n this.sendMail(mailTopic, mailTo, mailFrom, templateId, templateVars);\n }\n if (\n request.state === ITimesheetState.SUBMITTED &&\n settings.timetracker.notifications.submitNotifications &&\n settings.timetracker.notifications.enableTimetrackerNotifications\n ) {\n const mailTopic = 'Timsheet submitted';\n const mailTo = userContext.emailId;\n const mailFrom = config.MAIL_SEND_DEFAULT_EMAIL;\n const templateId = EmailTemplateCodes.SUBMIT_TIME;\n const templateVars = {\n name: userContext.username,\n startDate: moment(request.startDate).format('YYYY-MM-DD'),\n endDate: moment(request.endDate).format('YYYY-MM-DD'),\n timesheet_url: `${config.CLIENT_URL}/${orgId}/time-tracker/timeapproval`,\n contact_url: `${config.CLIENT_URL}`,\n };\n this.sendMail(mailTopic, mailTo, mailFrom, templateId, templateVars);\n\n return true;\n }\n } catch (e) {\n throw new Error(e.message);\n }\n }\n\n public async updateTimesheetStatus(orgId: string, sheetId: string, state: ITimesheetState) {\n try {\n const timesheet = await this.timesheetRepository.updateTimesheetStatus(orgId, sheetId, state);\n console.log('updateTimesheetStatus.timesheet =>', timesheet);\n if (state === ITimesheetState.APPROVED) {\n // approve time records from startDate to endDate\n console.log('APPROVED');\n }\n\n return true;\n } catch (e) {\n throw new Error(e.message);\n }\n }\n\n public async removeTimesheet(userId: string, orgId: string, sheetId: string) {\n return this.timesheetRepository.removeTimesheet(userId, orgId, sheetId);\n }\n\n private sendMail(topic, to, from, templateId, templateVars) {\n return this.callAction<void, IMailerServicesendArgs>(\n IMailServiceAction.send,\n {\n request: {\n topic,\n to,\n templateId,\n from,\n variables: templateVars,\n },\n },\n IMoleculerServiceName.MailService,\n );\n }\n\n private async callAction<T, P = any>(command: string, params?: P, topic?: string, opts?: CallingOptions) {\n return this.broker.call<T, P>(`${topic}.${command}@${this.settings.adminApiNamespace}`, params, opts);\n }\n}\n","import { Schema, Model, Document, Connection } from 'mongoose';\nimport { ITimeRecords, ITimeRecord, } from '@admin-layout/timetracker-core';\n\nexport declare type Maybe<T> = T | null;\n\nexport interface ITimeRecordModel extends ITimeRecord, Document {\n id?: any;\n}\n\nexport interface ITimeRecordsModel extends ITimeRecords, Document {\n id: any;\n timeRecords: ITimeRecordModel[];\n}\n\nconst PauseStatusSchema = new Schema({\n pausedTime: { type: Date },\n restartTime: { type: Date },\n});\n\n// ===> TimeRecord\nconst TimeRecordSchema = new Schema({\n userId: { type: String, index: true },\n startTime: { type: Date },\n endTime: { type: Date, default: null },\n taskName: { type: String },\n description: { type: String },\n taskId: { type: String }, // ----> task\n tags: { type: [String] },\n isBillable: { type: Boolean },\n projectId: { type: String }, // ----> project\n timesheetId: { type: String }, // ----> timesheet\n isPause: { type: Boolean, default: false },\n isTimeout: { type: Boolean, default: false },\n pauseStatus: { type: [PauseStatusSchema] }\n});\n\nTimeRecordSchema.index({ endTime: 1, startTime: 1, userId: 1 } as any);\n\nconst TimeRecordsSchema = new Schema({\n orgId: { type: String, index: true },\n timeRecords: [TimeRecordSchema],\n});\n\nTimeRecordSchema.virtual('id').get(function () {\n return this._id.toHexString();\n});\n\nTimeRecordSchema.set('toJSON', {\n virtuals: true,\n});\n\nTimeRecordsSchema.set('toObject', { virtuals: true });\n\nexport type TimeRecordsModelType = Model<ITimeRecordsModel>;\n\nexport const TimeRecordsModelFunc: (db: Connection) => TimeRecordsModelType = (db) =>\n db.model<ITimeRecordsModel>('timerecords', TimeRecordsSchema);\n","import { Schema, Model, Document, Connection } from 'mongoose';\nimport { ITimesheets, ITimesheet } from '@admin-layout/timetracker-core';\n\nexport declare type Maybe<T> = T | null;\n\nexport interface ITimeSheetModel extends ITimesheet, Document {\n id?: any;\n}\nexport interface ITimesheetsModel extends ITimesheets, Document {\n id: any;\n timesheets: ITimeSheetModel[];\n}\n\nenum TimesheetState {\n OPEN,\n APPROVED_PENDING,\n APPROVED,\n APPROVED_FINALIZED,\n DENYED,\n SUBMITTED,\n DENYED_FINALIZED,\n}\n\n// ===> Timesheet\nconst TimesheetSchema = new Schema({\n userId: { type: String, index: true },\n startDate: { type: Date },\n endDate: { type: Date },\n state: { type: TimesheetState },\n submittedOn: { type: Date },\n approvedOn: { type: Date },\n approvedBy: { type: String },\n updatedBy: { type: String },\n updatedOn: { type: Date },\n timeRecordsId: { type: [String] },\n});\n\nconst TimesheetsSchema = new Schema({\n orgId: { type: String, index: true },\n timesheets: [TimesheetSchema],\n});\n\nTimesheetsSchema.virtual('id').get(function () {\n return this._id.toHexString();\n});\n\nTimesheetsSchema.set('toJSON', {\n virtuals: true,\n});\n\nTimesheetsSchema.set('toObject', { virtuals: true });\n\nexport type TimesheetsModelType = Model<ITimesheetsModel>;\n\nexport const TimesheetsModelFunc: (db: Connection) => TimesheetsModelType = (db) =>\n db.model<ITimesheetsModel>('timesheets', TimesheetsSchema);\n","/* eslint-disable no-underscore-dangle */\nimport { Schema, Model, Document, Connection } from 'mongoose';\nimport { ITimeTracker, ITimeRecord, ITimesheet } from '@admin-layout/timetracker-core';\n\nexport declare type Maybe<T> = T | null;\n\nexport interface ITimeRecordModel extends ITimeRecord, Document {\n id?: any;\n}\nexport interface ITimeSheetModel extends ITimesheet, Document {\n id?: any;\n}\nexport interface ITimeTrackerModel extends ITimeTracker, Document {\n id: any;\n timeRecords: ITimeRecordModel[];\n timesheets: ITimeSheetModel[];\n}\n\nenum TimesheetState {\n OPEN,\n APPROVED_PENDING,\n APPROVED,\n APPROVED_FINALIZED,\n DENYED,\n SUBMITTED,\n DENYED_FINALIZED,\n}\n\nconst TimeActivitySchema = new Schema({\n count: { type: Number },\n isPaused: { type: Boolean },\n isTimeout: { type: Boolean },\n startTime: { type: Number },\n endTime: { type: Number },\n});\n\nconst PauseStatusSchema = new Schema({\n pausedTime: { type: Date },\n restartTime: { type: Date },\n});\n\n// ===> TimeRecord\nconst TimeRecordSchema = new Schema({\n userId: { type: String, index: true },\n startTime: { type: Date },\n endTime: { type: Date, default: null },\n taskName: { type: String },\n description: { type: String },\n taskId: { type: String }, // ----> task\n tags: { type: [String] },\n isBillable: { type: Boolean },\n projectId: { type: String }, // ----> project\n timesheetId: { type: String }, // ----> timesheet\n activities: [TimeActivitySchema],\n isPause: { type: Boolean, default: false },\n isTimeout: { type: Boolean, default: false },\n pauseStatus: { type: [PauseStatusSchema] }\n});\n\nTimeRecordSchema.index({ endTime: 1, startTime: 1, userId: 1 } as any);\n\n// ===> Timesheet\nconst TimesheetSchema = new Schema({\n userId: { type: String, index: true },\n startDate: { type: Date },\n endDate: { type: Date },\n state: { type: TimesheetState },\n submittedOn: { type: Date },\n approvedOn: { type: Date },\n approvedBy: { type: String },\n updatedBy: { type: String },\n updatedOn: { type: Date },\n timeRecordsId: { type: [String] },\n});\n\nconst TimeTrackerSchema = new Schema({\n orgId: { type: String, index: true },\n timeRecords: [TimeRecordSchema],\n timesheets: [TimesheetSchema],\n});\n\nTimeRecordSchema.virtual('id').get(function () {\n return this._id.toHexString();\n});\n\nTimeRecordSchema.set('toJSON', {\n virtuals: true,\n});\n\nTimeTrackerSchema.virtual('id').get(function () {\n return this._id.toHexString();\n});\n\nTimeTrackerSchema.set('toJSON', {\n virtuals: true,\n});\n\nTimeTrackerSchema.set('toObject', { virtuals: true });\n\nexport type TimeTrackerModelType = Model<ITimeTrackerModel>;\n\nexport const TimeTrackerModelFunc: (db: Connection) => TimeTrackerModelType = (db) =>\n db.model<ITimeTrackerModel>('timetracker', TimeTrackerSchema);\n","export * from './timerecord-repository';\nexport * from './timesheet-repository';\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable no-param-reassign */\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n/* eslint-disable no-underscore-dangle */\nimport * as Logger from 'bunyan';\nimport { injectable, inject } from 'inversify';\nimport * as mongoose from 'mongoose';\nimport { ITimeRecordRequest, ITimeRecord, ITimeRecords } from '@admin-layout/timetracker-core';\nimport { ITimeRecordRepository } from '../../interfaces';\nimport { TimeRecordsModelFunc, TimeRecordsModelType, ITimeRecordModel, ITimeRecordsModel } from '../models/timerecords-model';\nimport * as _ from 'lodash';\n\n@injectable()\nexport class TimeRecordRepository implements ITimeRecordRepository {\n private timeRecordsModel: TimeRecordsModelType;\n\n private logger: Logger;\n\n constructor(\n @inject('MongoDBConnection')\n db: mongoose.Connection,\n @inject('Logger')\n logger: Logger,\n ) {\n this.logger = logger.child({ className: 'TimeRecordRepository' });\n this.timeRecordsModel = TimeRecordsModelFunc(db);\n }\n\n public async getTimeRecords(\n orgId: string, userId?: string | RegExp, from?: Date, until?: Date\n ): Promise<Array<ITimeRecord>> {\n if (!userId) {\n userId = /.*/;\n }\n let match: any = {\n 'timeRecords.userId': userId,\n };\n if (from) {\n match = { ...match, 'timeRecords.startTime': { $gte: from } };\n }\n if (until) {\n match = { ...match, 'timeRecords.endTime': { $lte: until } };\n }\n\n const result = await this.timeRecordsModel.aggregate([\n {\n $match: {\n orgId,\n },\n },\n {\n $unwind: '$timeRecords',\n },\n {\n $match: {\n ...match,\n },\n },\n {\n $group: {\n _id: '$orgId',\n timeRecords: {\n $push: '$timeRecords',\n },\n },\n },\n {\n $project: {\n orgId: 1,\n timeRecords: 1,\n },\n },\n ]);\n if (result.length === 0) {\n return [];\n }\n return result[0].timeRecords;\n }\n\n public async getOrganizationTimeRecords(orgId: string): Promise<ITimeRecordModel[]> {\n const trackDoc = await this.timeRecordsModel.findOne({ orgId });\n if (trackDoc && trackDoc.timeRecords) {\n return trackDoc.timeRecords;\n }\n return [];\n }\n\n public async getPlayingTimeRecord(userId: string, orgId: string): Promise<ITimeRecord> {\n const trackDoc = await this.timeRecordsModel.findOne({ orgId });\n if (trackDoc) {\n let res;\n if (trackDoc.timeRecords) res = trackDoc.timeRecords.find((tr) => tr.userId === userId && tr.endTime === null);\n return res;\n }\n return null;\n }\n\n public async createTimeRecord(\n userId: string,\n orgId: string,\n request: ITimeRecordRequest,\n ): Promise<Partial<ITimeRecords>> {\n try {\n const response = await this.timeRecordsModel.findOneAndUpdate(\n { orgId },\n { orgId, $push: { timeRecords: request } },\n {\n upsert: true,\n new: true,\n projection: { userId, orgId, timeRecords: { $elemMatch: { startTime: request.startTime } } },\n },\n );\n return response.toObject() as ITimeRecordsModel;\n } catch (err) {\n throw new Error(err.message);\n }\n }\n\n public async updateTimeRecord(\n userId: string,\n orgId: string,\n recordId: string,\n request: ITimeRecordRequest,\n ): Promise<Partial<ITimeRecordsModel>> {\n try {\n if (recordId === null || recordId === undefined) throw new Error('TimeRecord id not specified!');\n let setRequest = {};\n _.forIn(request,(value, key) => {\n setRequest = {\n ...setRequest,\n [`timeRecords.$.${key}`]: value,\n };\n });\n const response = await this.timeRecordsModel.findOneAndUpdate(\n { orgId, timeRecords: { $elemMatch: { _id: recordId } } },\n {\n $set: {\n ...setRequest,\n },\n },\n {\n new: true,\n projection: {\n userId,\n orgId,\n timeRecords: { $elemMatch: { _id: recordId } },\n },\n },\n );\n return response.toObject() as ITimeRecordsModel;\n } catch (err) {\n throw new Error(err.message);\n }\n }\n\n public async removeTimeRecord(userId: string, orgId: string, recordId: string) {\n try {\n const result = await this.timeRecordsModel.update(\n {\n orgId,\n },\n {\n $pull: { timeRecords: { _id: recordId } },\n },\n );\n if (result.nModified !== 1) {\n throw new Error('TimeRecord is not modified');\n }\n return { userId, orgId, timeRecords: [{ _id: recordId } as any] as ITimeRecord[] };\n } catch (err) {\n throw new Error(err.message);\n }\n }\n\n public async removeDurationTimeRecords(\n userId: string,\n orgId: string,\n startTime: Date,\n endTime: Date,\n projectId: string,\n ) {\n try {\n const trackerDoc = await this.timeRecordsModel.find({ orgId });\n if (trackerDoc && trackerDoc.length > 0) {\n const timeRecords = trackerDoc[0].timeRecords.filter(\n (tr) => tr.startTime < startTime || tr.startTime > endTime || tr.projectId !== projectId,\n );\n await this.timeRecordsModel.update(\n {\n orgId,\n },\n {\n timeRecords,\n },\n );\n return true;\n }\n return false;\n } catch (err) {\n throw new Error(err.message);\n }\n }\n\n public async approveTimeRecords(orgId: string, sheetId: string, startDate: Date, endDate: Date) {\n try {\n await this.timeRecordsModel.updateMany(\n {\n orgId,\n },\n { $set: { 'timeRecords.$[el].timesheetId': sheetId } },\n {\n multi: true,\n arrayFilters: [\n {\n 'el.startTime': { $gte: startDate },\n 'el.endTime': { $lte: endDate },\n 'el.timesheetId': null,\n },\n ],\n },\n );\n } catch (e) {\n this.logger.debug('approveTimeRecords =>', e.message);\n throw new Error(e.message);\n }\n }\n\n public async disapproveTimeRecords(orgId: string, sheetId: string) {\n try {\n await this.timeRecordsModel.updateMany(\n {\n orgId,\n },\n { $set: { 'timeRecords.$[el].timesheetId': null } },\n {\n multi: true,\n arrayFilters: [\n {\n 'el.timesheetId': sheetId,\n },\n ],\n },\n );\n } catch (e) {\n this.logger.debug('disapproveTimeRecords =>', e.message);\n throw new Error(e.message);\n }\n }\n}\n","import * as Logger from 'bunyan';\nimport { injectable, inject } from 'inversify';\nimport * as mongoose from 'mongoose';\nimport { ITimesheetCreateRequest, ITimesheetState } from '@admin-layout/timetracker-core';\nimport * as _ from 'lodash';\nimport { CommonType } from '@common-stack/core';\nimport { ServiceBroker } from 'moleculer';\nimport { TimesheetsModelFunc, TimesheetsModelType, ITimeSheetModel } from '../models/timesheets-model';\nimport { ITimesheetRepository } from '../../interfaces';\n\n@injectable()\nexport class TimesheetRepository implements ITimesheetRepository {\n private timesheetsModel: TimesheetsModelType;\n\n private logger: Logger;\n\n constructor(\n @inject('MongoDBConnection')\n db: mongoose.Connection,\n @inject('Logger')\n logger: Logger,\n @inject(CommonType.MOLECULER_BROKER)\n private broker: ServiceBroker,\n ) {\n this.logger = logger.child({ className: 'TimesheetRepository' });\n this.timesheetsModel = TimesheetsModelFunc(db);\n }\n\n public async getOrganizationTimesheets(orgId: string): Promise<ITimeSheetModel[]> {\n const trackDoc = await this.timesheetsModel.findOne({ orgId });\n if (trackDoc && trackDoc.timesheets) {\n return trackDoc.timesheets;\n }\n return [];\n }\n\n public async getTimesheets(orgId: string, userId?: string): Promise<ITimeSheetModel[]> {\n const timesheets = await this.getOrganizationTimesheets(orgId);\n return timesheets.filter((sheet) => !userId || sheet.userId === userId);\n }\n\n public async createTimesheet(userId: string, orgId: string, request: ITimesheetCreateRequest): Promise<boolean> {\n try {\n const response = await this.timesheetsModel.update(\n { orgId },\n { $push: { timesheets: request } },\n { upsert: true },\n );\n return true;\n } catch (err) {\n throw new Error(err.message);\n }\n }\n\n public async updateTimesheet(orgId: string, sheetId: string, request: ITimesheetCreateRequest) {\n try {\n let setRequest = {};\n _.forIn(request,(value, key) => {\n setRequest = {\n ...setRequest,\n [`timesheets.$.${key}`]: value,\n };\n });\n const response = await this.timesheetsModel.update(\n { orgId, timesheets: { $elemMatch: { _id: sheetId } } },\n { $set: { ...setRequest } },\n );\n return response;\n } catch (err) {\n throw new Error(err.message);\n }\n }\n\n public async updateTimesheetStatus(orgId: string, sheetId: string, state: ITimesheetState) {\n try {\n const response = await this.timesheetsModel.update(\n {\n orgId,\n $elemMatch: { 'timesheets.id': sheetId },\n },\n {\n $set: {\n 'timesheets.$.status': state,\n },\n },\n );\n return response;\n } catch (err) {\n throw new Error(err.message);\n }\n }\n\n public async removeTimesheet(userId: string, orgId: string, sheetId: string): Promise<boolean> {\n try {\n await this.timesheetsModel.update(\n {\n orgId,\n },\n {\n $pull: { timesheets: { _id: sheetId } },\n },\n );\n return true;\n } catch (err) {\n throw new Error(err.message);\n }\n }\n}\n","module.exports = require(\"@adminide-stack/core\");","module.exports = require(\"@common-stack/core\");","module.exports = require(\"@common-stack/server-core\");","module.exports = require(\"@vscode-alt/monaco-editor/esm/vs/nls\");","module.exports = require(\"@workbench-stack/core\");","module.exports = require(\"envalid\");","module.exports = require(\"graphql-subscriptions\");","module.exports = require(\"inversify\");","module.exports = require(\"lodash\");","module.exports = require(\"moment\");","module.exports = require(\"mongoose\");"],"sourceRoot":""}
@@ -1,11 +1,11 @@
1
- import { ITimeRecordRequest, ITimeRecord, ITimeTracker } from '@admin-layout/timetracker-core';
1
+ import { ITimeRecordRequest, ITimeRecord, ITimeRecords } from '@admin-layout/timetracker-core';
2
2
  export interface ITimeRecordRepository {
3
3
  getTimeRecords(orgId: string, userId?: string, startTime?: Date, endTime?: Date): Promise<Array<ITimeRecord>>;
4
4
  getOrganizationTimeRecords(orgId: string): Promise<Array<ITimeRecord>>;
5
5
  getPlayingTimeRecord(userId: string, orgId: string): Promise<ITimeRecord>;
6
- createTimeRecord(userId: string, orgId: string, request: ITimeRecordRequest): Promise<Partial<ITimeTracker>>;
7
- updateTimeRecord(userId: string, orgId: string, recordId: string, request: ITimeRecordRequest): Promise<Partial<ITimeTracker>>;
8
- removeTimeRecord(userId: string, orgId: string, recordId: string): Promise<Partial<ITimeTracker>>;
6
+ createTimeRecord(userId: string, orgId: string, request: ITimeRecordRequest): Promise<Partial<ITimeRecords>>;
7
+ updateTimeRecord(userId: string, orgId: string, recordId: string, request: ITimeRecordRequest): Promise<Partial<ITimeRecords>>;
8
+ removeTimeRecord(userId: string, orgId: string, recordId: string): Promise<Partial<ITimeRecords>>;
9
9
  removeDurationTimeRecords(userId: string, orgId: string, startTime: Date, endTime: Date, projectId: string): Promise<boolean>;
10
10
  approveTimeRecords(orgId: string, sheetId: string, startDate: Date, endDate: Date): any;
11
11
  disapproveTimeRecords(orgId: string, sheetId: string): any;
@@ -1,9 +1,9 @@
1
- import { ITimeRecord, ITimeRecordRequest, ITimeTracker } from '@admin-layout/timetracker-core';
1
+ import { ITimeRecord, ITimeRecordRequest, ITimeRecords } from '@admin-layout/timetracker-core';
2
2
  export interface ITimeRecordService {
3
3
  getTimeRecords(orgId: string, userId?: string): Promise<Array<ITimeRecord>>;
4
4
  getDurationTimeRecords(orgId: string, startTime: Date, endTime: Date, userId?: string): Promise<Array<ITimeRecord>>;
5
5
  getPlayingTimeRecord(userId: string, orgId: string): Promise<ITimeRecord>;
6
- createTimeRecord(userId: string, orgId: string, request: ITimeRecordRequest): Promise<Partial<ITimeTracker>>;
6
+ createTimeRecord(userId: string, orgId: string, request: ITimeRecordRequest): Promise<Partial<ITimeRecords>>;
7
7
  updateTimeRecord(userId: string, orgId: string, recordId: string, request: ITimeRecordRequest): Promise<boolean>;
8
8
  removeTimeRecord(userId: string, orgId: string, recordId: string): Promise<boolean>;
9
9
  removeDurationTimeRecords(userId: string, orgId: string, startTime: Date, endTime: Date, projectId: string): Promise<boolean>;
@@ -0,0 +1,12 @@
1
+ import { Model, Document, Connection } from 'mongoose';
2
+ import { ITimeRecords, ITimeRecord } from '@admin-layout/timetracker-core';
3
+ export declare type Maybe<T> = T | null;
4
+ export interface ITimeRecordModel extends ITimeRecord, Document {
5
+ id?: any;
6
+ }
7
+ export interface ITimeRecordsModel extends ITimeRecords, Document {
8
+ id: any;
9
+ timeRecords: ITimeRecordModel[];
10
+ }
11
+ export declare type TimeRecordsModelType = Model<ITimeRecordsModel>;
12
+ export declare const TimeRecordsModelFunc: (db: Connection) => TimeRecordsModelType;
@@ -0,0 +1,12 @@
1
+ import { Model, Document, Connection } from 'mongoose';
2
+ import { ITimesheets, ITimesheet } from '@admin-layout/timetracker-core';
3
+ export declare type Maybe<T> = T | null;
4
+ export interface ITimeSheetModel extends ITimesheet, Document {
5
+ id?: any;
6
+ }
7
+ export interface ITimesheetsModel extends ITimesheets, Document {
8
+ id: any;
9
+ timesheets: ITimeSheetModel[];
10
+ }
11
+ export declare type TimesheetsModelType = Model<ITimesheetsModel>;
12
+ export declare const TimesheetsModelFunc: (db: Connection) => TimesheetsModelType;
@@ -1,17 +1,17 @@
1
1
  import * as Logger from 'bunyan';
2
2
  import * as mongoose from 'mongoose';
3
- import { ITimeRecordRequest, ITimeRecord, ITimeTracker } from '@admin-layout/timetracker-core';
4
- import { ITimeRecordModel, ITimeTrackerModel } from '../models/timetracker-model';
3
+ import { ITimeRecordRequest, ITimeRecord, ITimeRecords } from '@admin-layout/timetracker-core';
5
4
  import { ITimeRecordRepository } from '../../interfaces';
5
+ import { ITimeRecordModel, ITimeRecordsModel } from '../models/timerecords-model';
6
6
  export declare class TimeRecordRepository implements ITimeRecordRepository {
7
- private timeTrackerModel;
7
+ private timeRecordsModel;
8
8
  private logger;
9
9
  constructor(db: mongoose.Connection, logger: Logger);
10
- getTimeRecords(orgId: string, userId?: string | RegExp, from?: Date, until?: Date): Promise<any>;
10
+ getTimeRecords(orgId: string, userId?: string | RegExp, from?: Date, until?: Date): Promise<Array<ITimeRecord>>;
11
11
  getOrganizationTimeRecords(orgId: string): Promise<ITimeRecordModel[]>;
12
12
  getPlayingTimeRecord(userId: string, orgId: string): Promise<ITimeRecord>;
13
- createTimeRecord(userId: string, orgId: string, request: ITimeRecordRequest): Promise<Partial<ITimeTracker>>;
14
- updateTimeRecord(userId: string, orgId: string, recordId: string, request: ITimeRecordRequest): Promise<Partial<ITimeTrackerModel>>;
13
+ createTimeRecord(userId: string, orgId: string, request: ITimeRecordRequest): Promise<Partial<ITimeRecords>>;
14
+ updateTimeRecord(userId: string, orgId: string, recordId: string, request: ITimeRecordRequest): Promise<Partial<ITimeRecordsModel>>;
15
15
  removeTimeRecord(userId: string, orgId: string, recordId: string): Promise<{
16
16
  userId: string;
17
17
  orgId: string;
@@ -2,11 +2,11 @@ import * as Logger from 'bunyan';
2
2
  import * as mongoose from 'mongoose';
3
3
  import { ITimesheetCreateRequest, ITimesheetState } from '@admin-layout/timetracker-core';
4
4
  import { ServiceBroker } from 'moleculer';
5
- import { ITimeSheetModel } from '../models/timetracker-model';
5
+ import { ITimeSheetModel } from '../models/timesheets-model';
6
6
  import { ITimesheetRepository } from '../../interfaces';
7
7
  export declare class TimesheetRepository implements ITimesheetRepository {
8
8
  private broker;
9
- private timeTrackerModel;
9
+ private timesheetsModel;
10
10
  private logger;
11
11
  constructor(db: mongoose.Connection, logger: Logger, broker: ServiceBroker);
12
12
  getOrganizationTimesheets(orgId: string): Promise<ITimeSheetModel[]>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@admin-layout/timetracker-module-server",
3
- "version": "1.0.3-alpha.19",
3
+ "version": "1.0.3-alpha.29",
4
4
  "description": "Sample core for higher packages to depend on",
5
5
  "license": "ISC",
6
6
  "author": "CDMBase LLC",
@@ -13,8 +13,6 @@
13
13
  "build:lib:watch": "npm run build:lib -- --watch",
14
14
  "jest": "./node_modules/.bin/jest",
15
15
  "prepublish": "npm run build",
16
- "schema:download": "./node_modules/.bin/apollo-codegen download-schema http://localhost:8080/graphql --output schema.json ",
17
- "schema:generate": "./node_modules/.bin/apollo-codegen generate src/browser/graphql/**/*.graphql --schema schema.json --target typescript --output src/browser/types/schema.ts",
18
16
  "test": "cross-env ENV_FILE=../../config/test/test.env jest",
19
17
  "test:debug": "npm test -- --runInBand",
20
18
  "test:watch": "npm test -- --watch",
@@ -40,7 +38,7 @@
40
38
  }
41
39
  },
42
40
  "dependencies": {
43
- "@admin-layout/timetracker-core": "1.0.3-alpha.19",
41
+ "@admin-layout/timetracker-core": "1.0.3-alpha.29",
44
42
  "@container-stack/mailing-api": "^0.0.26-61",
45
43
  "humanize-duration": "^3.24.0",
46
44
  "moment": "^2.29.1"
@@ -62,5 +60,5 @@
62
60
  "typescript": {
63
61
  "definition": "lib/index.d.ts"
64
62
  },
65
- "gitHead": "9a1cfd75131d796b52e71662fab5bff9035660f4"
63
+ "gitHead": "fcbb1ac3f3870c0244a5325d0801217c7a6dc412"
66
64
  }