@tomei/sso 0.15.1 → 0.15.2
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/dist/src/components/building/building.repository.js +1 -1
- package/dist/src/components/building/building.repository.js.map +1 -1
- package/dist/src/components/index.d.ts +1 -0
- package/dist/src/components/index.js +1 -0
- package/dist/src/components/index.js.map +1 -1
- package/dist/src/components/staff/index.d.ts +2 -0
- package/dist/src/components/staff/index.js +19 -0
- package/dist/src/components/staff/index.js.map +1 -0
- package/dist/src/components/staff/staff.d.ts +49 -0
- package/dist/src/components/staff/staff.js +102 -0
- package/dist/src/components/staff/staff.js.map +1 -0
- package/dist/src/components/staff/staff.repository.d.ts +6 -0
- package/dist/src/components/staff/staff.repository.js +38 -0
- package/dist/src/components/staff/staff.repository.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/components/building/building.repository.ts +1 -1
- package/src/components/index.ts +1 -0
- package/src/components/staff/index.ts +3 -0
- package/src/components/staff/staff.repository.ts +27 -0
- package/src/components/staff/staff.ts +153 -0
@@ -29,7 +29,7 @@ class BuildingRepository extends general_1.RepositoryBase {
|
|
29
29
|
return buildings;
|
30
30
|
}
|
31
31
|
catch (error) {
|
32
|
-
throw new Error(`An Error occured when retriving
|
32
|
+
throw new Error(`An Error occured when retriving buildings: ${error.message}`);
|
33
33
|
}
|
34
34
|
});
|
35
35
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"building.repository.js","sourceRoot":"","sources":["../../../../src/components/building/building.repository.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,kEAAoD;AACpD,4CAAiE;AAEjE,MAAa,kBACX,SAAQ,wBAAwB;IAGhC;QACE,KAAK,CAAC,yBAAQ,CAAC,CAAC;IAClB,CAAC;IAEK,eAAe,CAAC,OAAa;;YACjC,IAAI;gBACF,IAAI,SAAc,CAAC;gBACnB,IAAI,OAAO,EAAE;oBACX,SAAS,GAAG,MAAM,yBAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;iBACrD;qBAAM;oBACL,SAAS,GAAG,MAAM,yBAAQ,CAAC,eAAe,EAAE,CAAC;iBAC9C;gBACD,OAAO,SAAS,CAAC;aAClB;YAAC,OAAO,KAAK,EAAE;gBACd,MAAM,IAAI,KAAK,CACb,
|
1
|
+
{"version":3,"file":"building.repository.js","sourceRoot":"","sources":["../../../../src/components/building/building.repository.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,kEAAoD;AACpD,4CAAiE;AAEjE,MAAa,kBACX,SAAQ,wBAAwB;IAGhC;QACE,KAAK,CAAC,yBAAQ,CAAC,CAAC;IAClB,CAAC;IAEK,eAAe,CAAC,OAAa;;YACjC,IAAI;gBACF,IAAI,SAAc,CAAC;gBACnB,IAAI,OAAO,EAAE;oBACX,SAAS,GAAG,MAAM,yBAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;iBACrD;qBAAM;oBACL,SAAS,GAAG,MAAM,yBAAQ,CAAC,eAAe,EAAE,CAAC;iBAC9C;gBACD,OAAO,SAAS,CAAC;aAClB;YAAC,OAAO,KAAK,EAAE;gBACd,MAAM,IAAI,KAAK,CACb,8CAA8C,KAAK,CAAC,OAAO,EAAE,CAC9D,CAAC;aACH;QACH,CAAC;KAAA;CACF;AAvBD,gDAuBC"}
|
@@ -23,4 +23,5 @@ __exportStar(require("./user-group"), exports);
|
|
23
23
|
__exportStar(require("./user-user-group"), exports);
|
24
24
|
__exportStar(require("./building"), exports);
|
25
25
|
__exportStar(require("./building-type"), exports);
|
26
|
+
__exportStar(require("./staff"), exports);
|
26
27
|
//# sourceMappingURL=index.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAAgC;AAChC,+CAA6B;AAC7B,kDAAgC;AAChC,2CAAyB;AACzB,kDAAgC;AAChC,+CAA6B;AAC7B,oDAAkC;AAClC,6CAA2B;AAC3B,kDAAgC"}
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAAgC;AAChC,+CAA6B;AAC7B,kDAAgC;AAChC,2CAAyB;AACzB,kDAAgC;AAChC,+CAA6B;AAC7B,oDAAkC;AAClC,6CAA2B;AAC3B,kDAAgC;AAChC,0CAAwB"}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
3
|
+
if (k2 === undefined) k2 = k;
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
7
|
+
}
|
8
|
+
Object.defineProperty(o, k2, desc);
|
9
|
+
}) : (function(o, m, k, k2) {
|
10
|
+
if (k2 === undefined) k2 = k;
|
11
|
+
o[k2] = m[k];
|
12
|
+
}));
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
15
|
+
};
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
17
|
+
__exportStar(require("./staff"), exports);
|
18
|
+
__exportStar(require("./staff.repository"), exports);
|
19
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/staff/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AACA,0CAAwB;AACxB,qDAAmC"}
|
@@ -0,0 +1,49 @@
|
|
1
|
+
import { IAddress, IPerson, ObjectBase } from '@tomei/general';
|
2
|
+
import { LoginUser } from '../../..';
|
3
|
+
export declare class Staff extends ObjectBase implements IPerson {
|
4
|
+
ObjectId: string;
|
5
|
+
ObjectName: string;
|
6
|
+
TableName: 'sso_Staff';
|
7
|
+
FullName: string;
|
8
|
+
IDNo: string;
|
9
|
+
IDType: string;
|
10
|
+
Email: string;
|
11
|
+
ContactNo: string;
|
12
|
+
DefaultAddress: IAddress;
|
13
|
+
PreferredName: string;
|
14
|
+
StaffId: string;
|
15
|
+
StaffTypeId: number;
|
16
|
+
JobTitle: string;
|
17
|
+
CarPlate: string;
|
18
|
+
Mobile: string;
|
19
|
+
Floor: string;
|
20
|
+
Extension: string;
|
21
|
+
IsCharge: boolean;
|
22
|
+
Status: string;
|
23
|
+
CompanyId: number;
|
24
|
+
UserId: number;
|
25
|
+
BuildingId: number;
|
26
|
+
DepartmentId: number;
|
27
|
+
private _created_by_id;
|
28
|
+
private _updated_by_id;
|
29
|
+
private _created_at;
|
30
|
+
private _updated_at;
|
31
|
+
FullAddress: string;
|
32
|
+
private static _Repo;
|
33
|
+
getDetails(): Promise<{
|
34
|
+
FullName: string;
|
35
|
+
IDNo: string;
|
36
|
+
IDType: string;
|
37
|
+
Email: string;
|
38
|
+
ContactNo: string;
|
39
|
+
}> | {
|
40
|
+
FullName: string;
|
41
|
+
IDNo: string;
|
42
|
+
IDType: string;
|
43
|
+
Email: string;
|
44
|
+
ContactNo: string;
|
45
|
+
};
|
46
|
+
private constructor();
|
47
|
+
static init(dbTransaction: any, staff_id?: string): Promise<Staff | undefined>;
|
48
|
+
static findAll(loginUser: LoginUser, dbTransaction: any, page?: number, rows?: number, search?: {}): Promise<any>;
|
49
|
+
}
|
@@ -0,0 +1,102 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
9
|
+
});
|
10
|
+
};
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
12
|
+
exports.Staff = void 0;
|
13
|
+
const general_1 = require("@tomei/general");
|
14
|
+
const staff_repository_1 = require("./staff.repository");
|
15
|
+
const config_1 = require("@tomei/config");
|
16
|
+
const sequelize_1 = require("sequelize");
|
17
|
+
const staff_type_entity_1 = require("../../models/staff-type.entity");
|
18
|
+
const building_entity_1 = require("../../models/building.entity");
|
19
|
+
const department_entity_1 = require("../../models/department.entity");
|
20
|
+
const building_type_entity_1 = require("../../models/building-type.entity");
|
21
|
+
class Staff extends general_1.ObjectBase {
|
22
|
+
getDetails() {
|
23
|
+
throw new Error('Method not implemented.');
|
24
|
+
}
|
25
|
+
constructor(staffInfo) {
|
26
|
+
super();
|
27
|
+
if (staffInfo) {
|
28
|
+
this.ObjectId = staffInfo.id;
|
29
|
+
this.UserId = staffInfo.user_id;
|
30
|
+
this.StaffId = staffInfo.staff_id;
|
31
|
+
this.FullName = staffInfo.full_name;
|
32
|
+
this.PreferredName = staffInfo.preferred_name;
|
33
|
+
this.IDNo = staffInfo.IdNo;
|
34
|
+
this.FullAddress = staffInfo.FullAddress;
|
35
|
+
this.StaffTypeId = staffInfo.staff_type_id;
|
36
|
+
this.Email = staffInfo.email;
|
37
|
+
this.CarPlate = staffInfo.car_plate;
|
38
|
+
this.Mobile = staffInfo.mobile;
|
39
|
+
this.Floor = staffInfo.floor;
|
40
|
+
this.Extension = staffInfo.extension;
|
41
|
+
this.IsCharge = staffInfo.is_charge;
|
42
|
+
this.BuildingId = staffInfo.building_id;
|
43
|
+
this.DepartmentId = staffInfo.department_id;
|
44
|
+
}
|
45
|
+
}
|
46
|
+
static init(dbTransaction, staff_id) {
|
47
|
+
return __awaiter(this, void 0, void 0, function* () {
|
48
|
+
if (staff_id) {
|
49
|
+
const staff = yield Staff._Repo.findOne({
|
50
|
+
where: {
|
51
|
+
staff_id: staff_id,
|
52
|
+
},
|
53
|
+
});
|
54
|
+
if (!staff) {
|
55
|
+
throw Error('Building not found.');
|
56
|
+
}
|
57
|
+
return new Staff(staff);
|
58
|
+
}
|
59
|
+
});
|
60
|
+
}
|
61
|
+
static findAll(loginUser, dbTransaction, page, rows, search = {}) {
|
62
|
+
return __awaiter(this, void 0, void 0, function* () {
|
63
|
+
try {
|
64
|
+
const systemCode = config_1.ApplicationConfig.getComponentConfigValue('system-code');
|
65
|
+
const isPrivileged = yield loginUser.checkPrivileges(systemCode, 'Staff - View');
|
66
|
+
if (!isPrivileged) {
|
67
|
+
throw new Error('You do not have permission to view Building.');
|
68
|
+
}
|
69
|
+
const whereObj = {};
|
70
|
+
Object.keys(search).forEach((key) => {
|
71
|
+
if (search[key]) {
|
72
|
+
whereObj[key] = {
|
73
|
+
[sequelize_1.Op.substring]: search[key],
|
74
|
+
};
|
75
|
+
}
|
76
|
+
});
|
77
|
+
let options = {
|
78
|
+
where: whereObj,
|
79
|
+
include: [
|
80
|
+
staff_type_entity_1.default,
|
81
|
+
{ model: building_entity_1.default, include: [building_type_entity_1.default] },
|
82
|
+
department_entity_1.default,
|
83
|
+
],
|
84
|
+
order: [['created_at', 'DESC']],
|
85
|
+
transaction: dbTransaction,
|
86
|
+
};
|
87
|
+
if (page && rows) {
|
88
|
+
const offset = rows * (page - 1);
|
89
|
+
options = Object.assign(Object.assign({}, options), { offset, limit: rows });
|
90
|
+
}
|
91
|
+
const result = yield Staff._Repo.findAndCountAll(options);
|
92
|
+
return result;
|
93
|
+
}
|
94
|
+
catch (error) {
|
95
|
+
throw error;
|
96
|
+
}
|
97
|
+
});
|
98
|
+
}
|
99
|
+
}
|
100
|
+
exports.Staff = Staff;
|
101
|
+
Staff._Repo = new staff_repository_1.StaffRepository();
|
102
|
+
//# sourceMappingURL=staff.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"staff.js","sourceRoot":"","sources":["../../../../src/components/staff/staff.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,6 @@
|
|
1
|
+
import Staff from '../../models/staff.entity';
|
2
|
+
import { RepositoryBase, IRepositoryBase } from '@tomei/general';
|
3
|
+
export declare class StaffRepository extends RepositoryBase<Staff> implements IRepositoryBase<Staff> {
|
4
|
+
constructor();
|
5
|
+
findAndCountAll(options?: any): Promise<any>;
|
6
|
+
}
|
@@ -0,0 +1,38 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
9
|
+
});
|
10
|
+
};
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
12
|
+
exports.StaffRepository = void 0;
|
13
|
+
const staff_entity_1 = require("../../models/staff.entity");
|
14
|
+
const general_1 = require("@tomei/general");
|
15
|
+
class StaffRepository extends general_1.RepositoryBase {
|
16
|
+
constructor() {
|
17
|
+
super(staff_entity_1.default);
|
18
|
+
}
|
19
|
+
findAndCountAll(options) {
|
20
|
+
return __awaiter(this, void 0, void 0, function* () {
|
21
|
+
try {
|
22
|
+
let staffs;
|
23
|
+
if (options) {
|
24
|
+
staffs = yield staff_entity_1.default.findAndCountAll(options);
|
25
|
+
}
|
26
|
+
else {
|
27
|
+
staffs = yield staff_entity_1.default.findAndCountAll();
|
28
|
+
}
|
29
|
+
return staffs;
|
30
|
+
}
|
31
|
+
catch (error) {
|
32
|
+
throw new Error(`An Error occured when retriving staffs: ${error.message}`);
|
33
|
+
}
|
34
|
+
});
|
35
|
+
}
|
36
|
+
}
|
37
|
+
exports.StaffRepository = StaffRepository;
|
38
|
+
//# sourceMappingURL=staff.repository.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"staff.repository.js","sourceRoot":"","sources":["../../../../src/components/staff/staff.repository.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,4DAA8C;AAC9C,4CAAiE;AAEjE,MAAa,eACX,SAAQ,wBAAqB;IAG7B;QACE,KAAK,CAAC,sBAAK,CAAC,CAAC;IACf,CAAC;IAEK,eAAe,CAAC,OAAa;;YACjC,IAAI;gBACF,IAAI,MAAW,CAAC;gBAChB,IAAI,OAAO,EAAE;oBACX,MAAM,GAAG,MAAM,sBAAK,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;iBAC/C;qBAAM;oBACL,MAAM,GAAG,MAAM,sBAAK,CAAC,eAAe,EAAE,CAAC;iBACxC;gBACD,OAAO,MAAM,CAAC;aACf;YAAC,OAAO,KAAK,EAAE;gBACd,MAAM,IAAI,KAAK,CACb,2CAA2C,KAAK,CAAC,OAAO,EAAE,CAC3D,CAAC;aACH;QACH,CAAC;KAAA;CACF;AAvBD,0CAuBC"}
|