@merkaly/api 0.5.10 → 0.5.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/dist/abstract.entity.d.ts +1 -1
  2. package/dist/abstract.repository.d.ts +3 -3
  3. package/dist/abstract.validator.d.ts +3 -1
  4. package/dist/abstract.validator.js +18 -15
  5. package/dist/finance/invoice/invoice.entity.d.ts +0 -1
  6. package/dist/finance/payment/payment.entity.d.ts +3 -3
  7. package/dist/finance/payment/payment.enum.d.ts +1 -2
  8. package/dist/finance/payment/payment.enum.js +0 -1
  9. package/dist/finance/payment/payment.transition.js +1 -2
  10. package/dist/finance/refund/refund.entity.d.ts +0 -1
  11. package/dist/finance/subscription/subscription.entity.d.ts +0 -1
  12. package/dist/index.d.ts +2 -0
  13. package/dist/inventory/catalog/product/product.validator.d.ts +3 -4
  14. package/dist/inventory/catalog/product/product.validator.js +1 -8
  15. package/dist/inventory/catalog/variant/variant.entity.d.ts +4 -2
  16. package/dist/inventory/catalog/variant/variant.validator.d.ts +0 -1
  17. package/dist/inventory/catalog/variant/variant.validator.js +0 -7
  18. package/dist/inventory/stock/balance/balance.entity.d.ts +11 -0
  19. package/dist/inventory/stock/balance/balance.validator.d.ts +13 -0
  20. package/dist/inventory/stock/balance/balance.validator.js +46 -0
  21. package/dist/inventory/stock/balance/index.d.ts +2 -0
  22. package/dist/inventory/stock/balance/index.js +1 -0
  23. package/dist/inventory/stock/transfer/transfer.entity.d.ts +1 -2
  24. package/dist/order/purchase/transaction/transaction.entity.d.ts +2 -13
  25. package/dist/order/purchase/transaction/transaction.validator.d.ts +2 -0
  26. package/dist/order/purchase/transaction/transaction.validator.js +9 -1
  27. package/dist/order/sale/transaction/transaction.entity.d.ts +2 -13
  28. package/dist/order/sale/transaction/transaction.validator.d.ts +2 -0
  29. package/dist/order/sale/transaction/transaction.validator.js +8 -0
  30. package/dist/order/service/item/index.d.ts +2 -0
  31. package/dist/order/service/item/index.js +1 -0
  32. package/dist/order/service/item/item.entity.d.ts +14 -0
  33. package/dist/order/service/item/item.validator.d.ts +9 -0
  34. package/dist/order/service/item/item.validator.js +51 -0
  35. package/dist/order/service/transaction/index.d.ts +4 -0
  36. package/dist/order/service/transaction/index.js +3 -0
  37. package/dist/order/service/transaction/transaction.entity.d.ts +9 -0
  38. package/dist/order/service/transaction/transaction.enum.d.ts +8 -0
  39. package/dist/order/service/transaction/transaction.enum.js +9 -0
  40. package/dist/order/service/transaction/transaction.transition.d.ts +6 -0
  41. package/dist/order/service/transaction/transaction.transition.js +13 -0
  42. package/dist/order/service/transaction/transaction.validator.d.ts +17 -0
  43. package/dist/order/service/transaction/transaction.validator.js +75 -0
  44. package/dist/status.plugin.d.ts +14 -0
  45. package/dist/transaction.entity.d.ts +13 -0
  46. package/package.json +1 -1
@@ -6,7 +6,7 @@ export type MongoEntity<T extends AbstractEntity> = T | string;
6
6
  export declare abstract class AbstractEntity extends Document<string> {
7
7
  _id: string;
8
8
  createdAt: Date;
9
- readonly updatedAt?: Date;
9
+ updatedAt?: Date;
10
10
  deletedAt?: Date;
11
11
  toString(): string;
12
12
  }
@@ -4,7 +4,7 @@ import { MongoService } from './mongo.service.js';
4
4
  import { AbstractEntity } from './abstract.entity.js';
5
5
  import { AbstractSchema } from './abstract.schema.js';
6
6
  import { AbstractValidator, SearchValidator } from './abstract.validator.js';
7
- import type { ClientSession, Document, FilterQuery, Model, PopulateOptions, RootFilterQuery, UpdateQuery } from 'mongoose';
7
+ import type { ClientSession, Document, FilterQuery, Model, PipelineStage, PopulateOptions, RootFilterQuery, UpdateQuery } from 'mongoose';
8
8
  type Equal<X, Y> = (<T>() => T extends X ? 1 : 2) extends <T>() => T extends Y ? 1 : 2 ? true : false;
9
9
  type SystemKeys = '_id' | 'createdAt' | 'updatedAt' | 'deletedAt' | keyof Document;
10
10
  export type CreateEntityArgs<T> = {
@@ -45,13 +45,12 @@ export declare abstract class AbstractRepository<E extends AbstractEntity = Abst
45
45
  protected readonly $logger: LoggerService;
46
46
  protected readonly $mongo: MongoService<E>;
47
47
  protected readonly $event: EventEmitter2;
48
- protected readonly $joins: Record<string, AbstractSchema<any> | null>;
49
48
  get $builder(): Model<E>;
50
49
  get $user(): any;
51
50
  get $identity(): string;
52
51
  private sanitizePaths;
53
- private removeNonDeclaredSchemas;
54
52
  private applyPopulate;
53
+ private handlePopulateError;
55
54
  count(filters?: FilterQuery<E>, session?: ClientSession): Promise<number>;
56
55
  search(validator?: SearchValidator<E>, session?: ClientSession): Promise<{
57
56
  data: import("mongoose").IfAny<E, any, Document<unknown, {}, E, {}, {}> & (import("mongoose").Require_id<E> extends infer T ? T extends import("mongoose").Require_id<E> ? T extends {
@@ -63,6 +62,7 @@ export declare abstract class AbstractRepository<E extends AbstractEntity = Abst
63
62
  pages: number;
64
63
  total: number;
65
64
  }>;
65
+ aggregate<R = unknown>(pipeline: PipelineStage[], session?: ClientSession): Promise<R[]>;
66
66
  read(locator: EntityLocator<E>, options?: ReadMethodOptions): Promise<E>;
67
67
  private hasUpdateOperators;
68
68
  protected save({ param, payload, join, session }: SaveMethodOptions<E>): Promise<E>;
@@ -15,12 +15,14 @@ export declare class PaginationValidator {
15
15
  limit?: number;
16
16
  page?: number;
17
17
  }
18
- export declare class SearchValidator<E = AbstractEntity> {
18
+ export declare class QueryValidator<E = AbstractEntity> {
19
19
  pagination?: PaginationValidator;
20
20
  sort?: {
21
21
  [key: string]: SortOrder;
22
22
  };
23
23
  filters?: FilterQuery<E>;
24
+ }
25
+ export declare class SearchValidator<E = AbstractEntity> extends QueryValidator<E> {
24
26
  join?: PopulateOptions[];
25
27
  }
26
28
  export {};
@@ -41,6 +41,15 @@ export function transformJoinsIntoPopulate(value) {
41
41
  }
42
42
  return transform(value);
43
43
  }
44
+ function transformStructuredValue(value) {
45
+ if (!value) {
46
+ return undefined;
47
+ }
48
+ if ((0, class_validator_1.isObject)(value) || (0, class_validator_1.isArray)(value)) {
49
+ return value;
50
+ }
51
+ return JSON.parse(value);
52
+ }
44
53
  export class ReadValidator extends AbstractValidator {
45
54
  join = [];
46
55
  }
@@ -65,11 +74,10 @@ __decorate([
65
74
  (0, class_validator_1.IsOptional)(),
66
75
  __metadata("design:type", Number)
67
76
  ], PaginationValidator.prototype, "page", void 0);
68
- export class SearchValidator {
77
+ export class QueryValidator {
69
78
  pagination = new PaginationValidator();
70
79
  sort = {};
71
80
  filters = {};
72
- join = [];
73
81
  }
74
82
  __decorate([
75
83
  (0, class_transformer_1.Transform)(({ value }) => {
@@ -83,27 +91,22 @@ __decorate([
83
91
  (0, class_transformer_1.Type)(() => PaginationValidator),
84
92
  (0, class_validator_1.IsOptional)(),
85
93
  __metadata("design:type", PaginationValidator)
86
- ], SearchValidator.prototype, "pagination", void 0);
94
+ ], QueryValidator.prototype, "pagination", void 0);
87
95
  __decorate([
88
- (0, class_transformer_1.Transform)(({ value }) => {
89
- if ((0, class_validator_1.isObject)(value)) {
90
- return value;
91
- }
92
- return value && JSON.parse(value);
93
- }),
96
+ (0, class_transformer_1.Transform)(({ value }) => transformStructuredValue(value)),
94
97
  (0, class_validator_1.IsOptional)(),
95
98
  __metadata("design:type", Object)
96
- ], SearchValidator.prototype, "sort", void 0);
99
+ ], QueryValidator.prototype, "sort", void 0);
97
100
  __decorate([
98
101
  (0, class_transformer_1.Transform)(({ value }) => {
99
- if ((0, class_validator_1.isObject)(value)) {
100
- return value;
101
- }
102
- return value && JSON.parse(value);
102
+ return transformStructuredValue(value);
103
103
  }),
104
104
  (0, class_validator_1.IsOptional)(),
105
105
  __metadata("design:type", Object)
106
- ], SearchValidator.prototype, "filters", void 0);
106
+ ], QueryValidator.prototype, "filters", void 0);
107
+ export class SearchValidator extends QueryValidator {
108
+ join = [];
109
+ }
107
110
  __decorate([
108
111
  (0, class_validator_1.IsOptional)(),
109
112
  (0, class_transformer_1.Transform)(({ value }) => transformJoinsIntoPopulate(value)),
@@ -10,6 +10,5 @@ export declare class FinanceInvoiceEntity extends AbstractEntity {
10
10
  type: FinanceInvoiceTypeEnum;
11
11
  dueDate?: Date;
12
12
  notes?: string;
13
- sequence: number;
14
13
  readonly number: string;
15
14
  }
@@ -1,18 +1,18 @@
1
1
  import { PurchaseTransactionEntity } from '../../order/purchase/transaction';
2
2
  import { SaleTransactionEntity } from '../../order/sale/transaction';
3
- import { ServiceTransactionEntity } from '../..';
3
+ import { ServiceTransactionEntity } from '../../order/service/transaction';
4
4
  import { AbstractEntity, MongoEntity } from '../..';
5
5
  import { StatusEntity } from '../..';
6
6
  import { FinancePaymentMethodEnum, FinancePaymentStatusEnum, FinancePaymentTypeEnum } from './payment.enum.js';
7
+ export type OrderEntity = SaleTransactionEntity | PurchaseTransactionEntity | ServiceTransactionEntity;
7
8
  export declare class FinancePaymentEntity extends AbstractEntity {
8
9
  type: FinancePaymentTypeEnum;
9
10
  target: string;
10
- order: MongoEntity<SaleTransactionEntity | PurchaseTransactionEntity | ServiceTransactionEntity>;
11
+ order: MongoEntity<OrderEntity>;
11
12
  total: number;
12
13
  fee: number;
13
14
  method?: FinancePaymentMethodEnum;
14
15
  status: FinancePaymentStatusEnum;
15
16
  history: StatusEntity<FinancePaymentStatusEnum>[];
16
- sequence: number;
17
17
  readonly number: string;
18
18
  }
@@ -1,8 +1,7 @@
1
1
  export declare enum FinancePaymentStatusEnum {
2
2
  PENDING = "PENDING",
3
3
  PAID = "PAID",
4
- CANCELLED = "CANCELLED",
5
- REFUNDED = "REFUNDED"
4
+ CANCELLED = "CANCELLED"
6
5
  }
7
6
  export declare enum FinancePaymentMethodEnum {
8
7
  CARD = "CARD",
@@ -3,7 +3,6 @@ export var FinancePaymentStatusEnum;
3
3
  FinancePaymentStatusEnum["PENDING"] = "PENDING";
4
4
  FinancePaymentStatusEnum["PAID"] = "PAID";
5
5
  FinancePaymentStatusEnum["CANCELLED"] = "CANCELLED";
6
- FinancePaymentStatusEnum["REFUNDED"] = "REFUNDED";
7
6
  })(FinancePaymentStatusEnum || (FinancePaymentStatusEnum = {}));
8
7
  export var FinancePaymentMethodEnum;
9
8
  (function (FinancePaymentMethodEnum) {
@@ -7,8 +7,7 @@ export class FinancePaymentTransition extends AbstractTransition {
7
7
  payment_enum_1.FinancePaymentStatusEnum.PAID,
8
8
  payment_enum_1.FinancePaymentStatusEnum.CANCELLED,
9
9
  ],
10
- [payment_enum_1.FinancePaymentStatusEnum.PAID]: [payment_enum_1.FinancePaymentStatusEnum.REFUNDED],
11
- [payment_enum_1.FinancePaymentStatusEnum.REFUNDED]: [],
10
+ [payment_enum_1.FinancePaymentStatusEnum.PAID]: [],
12
11
  [payment_enum_1.FinancePaymentStatusEnum.CANCELLED]: [],
13
12
  };
14
13
  }
@@ -9,6 +9,5 @@ export declare class FinanceRefundEntity extends AbstractEntity {
9
9
  reason: FinanceRefundReasonEnum;
10
10
  notes?: string;
11
11
  history: StatusEntity<FinanceRefundStatusEnum>[];
12
- sequence: number;
13
12
  readonly number: string;
14
13
  }
@@ -10,6 +10,5 @@ export declare class FinanceSubscriptionEntity extends AbstractEntity {
10
10
  currentPeriodStart?: Date;
11
11
  currentPeriodEnd?: Date;
12
12
  cancelledAt?: Date;
13
- sequence: number;
14
13
  readonly number: string;
15
14
  }
package/dist/index.d.ts CHANGED
@@ -4,5 +4,7 @@ export * from './abstract.validator';
4
4
  export * from './abstract.repository';
5
5
  export * from './not-equal-to.decorator';
6
6
  export * from './address.entity';
7
+ export * from './transaction.entity';
7
8
  export * from './address.validator';
9
+ export type { StatusEntity } from './status.plugin';
8
10
  export type { CreateEntityArgs } from './repository.types';
@@ -14,11 +14,10 @@ export declare class SaveCatalogProductValidator extends AbstractValidator {
14
14
  sku: string;
15
15
  description: string;
16
16
  price: number;
17
- stock: number;
18
17
  measure: {
19
- amount: number;
20
- kind: string;
21
- unit: string;
18
+ amount: any;
19
+ kind: any;
20
+ unit: any;
22
21
  };
23
22
  pictures: string[];
24
23
  category: string;
@@ -47,8 +47,7 @@ export class SaveCatalogProductValidator extends abstract_validator_1.AbstractVa
47
47
  sku;
48
48
  description;
49
49
  price;
50
- stock;
51
- measure = { amount: 0, kind: '', unit: '' };
50
+ measure = { amount: undefined, kind: undefined, unit: undefined };
52
51
  pictures = [];
53
52
  category;
54
53
  brand;
@@ -79,12 +78,6 @@ __decorate([
79
78
  (0, class_validator_1.IsOptional)({ groups: ['update'] }),
80
79
  __metadata("design:type", Number)
81
80
  ], SaveCatalogProductValidator.prototype, "price", void 0);
82
- __decorate([
83
- (0, class_validator_1.IsInt)({ groups: ['create'] }),
84
- (0, class_validator_1.Min)(0, { groups: ['create'] }),
85
- (0, class_validator_1.IsOptional)({ groups: ['create'] }),
86
- __metadata("design:type", Number)
87
- ], SaveCatalogProductValidator.prototype, "stock", void 0);
88
81
  __decorate([
89
82
  (0, class_validator_1.IsObject)(),
90
83
  (0, class_validator_1.IsOptional)({ groups: ['update'] }),
@@ -2,12 +2,12 @@ import { AssetEntity } from '../../../assets/asset';
2
2
  import { AbstractEntity } from '../../..';
3
3
  import type { CatalogAttributeEntity } from '../attribute';
4
4
  import type { CatalogProductEntity } from '../product';
5
+ import type { StockBalanceEntity } from '../../stock/balance';
5
6
  import type { MongoEntity } from '../../..';
6
7
  export declare class CatalogVariantEntity extends AbstractEntity {
7
8
  product?: MongoEntity<CatalogProductEntity>;
8
9
  sku?: string;
9
10
  price: number;
10
- stock: number;
11
11
  options: {
12
12
  type: MongoEntity<CatalogAttributeEntity>;
13
13
  value: string;
@@ -15,5 +15,7 @@ export declare class CatalogVariantEntity extends AbstractEntity {
15
15
  active: boolean;
16
16
  barcode?: string;
17
17
  pictures: MongoEntity<AssetEntity>[];
18
- readonly finalPrice: number;
18
+ readonly total: number;
19
+ readonly stock: number;
20
+ readonly balances: MongoEntity<StockBalanceEntity>[];
19
21
  }
@@ -12,7 +12,6 @@ export declare class SaveCatalogVariantValidator extends AbstractValidator {
12
12
  product?: string;
13
13
  sku?: string;
14
14
  price?: number;
15
- stock?: number;
16
15
  options?: VariantOptionValidator[];
17
16
  active?: boolean;
18
17
  barcode?: string;
@@ -32,7 +32,6 @@ export class SaveCatalogVariantValidator extends abstract_validator_1.AbstractVa
32
32
  product;
33
33
  sku;
34
34
  price;
35
- stock;
36
35
  options = [];
37
36
  active;
38
37
  barcode;
@@ -53,12 +52,6 @@ __decorate([
53
52
  (0, class_validator_1.IsOptional)(),
54
53
  __metadata("design:type", Number)
55
54
  ], SaveCatalogVariantValidator.prototype, "price", void 0);
56
- __decorate([
57
- (0, class_validator_1.IsInt)(),
58
- (0, class_validator_1.Min)(0),
59
- (0, class_validator_1.IsOptional)(),
60
- __metadata("design:type", Number)
61
- ], SaveCatalogVariantValidator.prototype, "stock", void 0);
62
55
  __decorate([
63
56
  (0, class_validator_1.IsArray)(),
64
57
  (0, class_validator_1.IsOptional)(),
@@ -0,0 +1,11 @@
1
+ import { CatalogProductEntity } from '../../catalog/product';
2
+ import { CatalogVariantEntity } from '../../catalog/variant';
3
+ import { StockWarehouseEntity } from '../warehouse';
4
+ import { AbstractEntity } from '../../..';
5
+ import type { MongoEntity } from '../../..';
6
+ export declare class StockBalanceEntity extends AbstractEntity {
7
+ warehouse: MongoEntity<StockWarehouseEntity>;
8
+ product: MongoEntity<CatalogProductEntity>;
9
+ variant: MongoEntity<CatalogVariantEntity>;
10
+ quantity: number;
11
+ }
@@ -0,0 +1,13 @@
1
+ import { StockBalanceEntity } from './';
2
+ import { AbstractValidator, ReadValidator, SearchValidator } from '../../..';
3
+ export declare class SearchStockBalanceValidator extends SearchValidator<StockBalanceEntity> {
4
+ }
5
+ export declare class ReadStockBalanceValidator extends ReadValidator<StockBalanceEntity> {
6
+ }
7
+ export declare class SaveStockBalanceValidator extends AbstractValidator {
8
+ constructor(entity?: Partial<StockBalanceEntity>);
9
+ product: string;
10
+ variant: string;
11
+ warehouse: string;
12
+ quantity: number;
13
+ }
@@ -0,0 +1,46 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import * as class_validator_1 from "class-validator";
11
+ import * as abstract_validator_1 from '../../..';
12
+ export class SearchStockBalanceValidator extends abstract_validator_1.SearchValidator {
13
+ }
14
+ export class ReadStockBalanceValidator extends abstract_validator_1.ReadValidator {
15
+ }
16
+ export class SaveStockBalanceValidator extends abstract_validator_1.AbstractValidator {
17
+ constructor(entity) {
18
+ super();
19
+ if (!entity)
20
+ return;
21
+ this.product = entity.product?.toString?.() ?? '';
22
+ this.variant = entity.variant?.toString?.() ?? '';
23
+ this.warehouse = entity.warehouse?.toString?.() ?? '';
24
+ this.quantity = Number(entity.quantity ?? this.quantity);
25
+ }
26
+ product;
27
+ variant;
28
+ warehouse;
29
+ quantity = 0;
30
+ }
31
+ __decorate([
32
+ (0, class_validator_1.IsMongoId)(),
33
+ __metadata("design:type", String)
34
+ ], SaveStockBalanceValidator.prototype, "product", void 0);
35
+ __decorate([
36
+ (0, class_validator_1.IsMongoId)(),
37
+ __metadata("design:type", String)
38
+ ], SaveStockBalanceValidator.prototype, "variant", void 0);
39
+ __decorate([
40
+ (0, class_validator_1.IsMongoId)(),
41
+ __metadata("design:type", String)
42
+ ], SaveStockBalanceValidator.prototype, "warehouse", void 0);
43
+ __decorate([
44
+ (0, class_validator_1.Min)(0),
45
+ __metadata("design:type", Object)
46
+ ], SaveStockBalanceValidator.prototype, "quantity", void 0);
@@ -0,0 +1,2 @@
1
+ export * from './balance.entity';
2
+ export * from './balance.validator';
@@ -0,0 +1 @@
1
+ export * from './balance.validator.js';
@@ -1,10 +1,10 @@
1
1
  import { AccountUserEntity } from '../../../account/user';
2
2
  import { CatalogProductEntity } from '../../catalog/product';
3
+ import { CatalogVariantEntity } from '../../catalog/variant';
3
4
  import { StockWarehouseEntity } from '../warehouse';
4
5
  import { TransferStatusEnum } from './';
5
6
  import { AbstractEntity } from '../../..';
6
7
  import { StatusEntity } from '../../..';
7
- import { CatalogVariantEntity } from '../../catalog/variant';
8
8
  import type { MongoEntity } from '../../..';
9
9
  export declare class StockTransferItemEntity {
10
10
  product: MongoEntity<CatalogProductEntity>;
@@ -22,5 +22,4 @@ export declare class StockTransferEntity extends AbstractEntity {
22
22
  user: MongoEntity<AccountUserEntity>;
23
23
  readonly type: 'in' | 'out';
24
24
  readonly number: string;
25
- sequence: number;
26
25
  }
@@ -1,20 +1,9 @@
1
- import { AccountUserEntity } from '../../../account/user';
2
- import { FinancePaymentEntity } from '../../../finance/payment';
3
- import { AbstractEntity } from '../../..';
4
- import { StatusEntity } from '../../..';
1
+ import { TransactionEntity } from '../../..';
5
2
  import { PurchaseTransactionStatusEnum } from './transaction.enum.js';
6
3
  import { PurchaseItemEntity } from '../item';
7
4
  import { PurchaseVendorEntity } from '../vendor';
8
5
  import type { MongoEntity } from '../../..';
9
- export declare class PurchaseTransactionEntity extends AbstractEntity {
10
- user: MongoEntity<AccountUserEntity>;
6
+ export declare class PurchaseTransactionEntity extends TransactionEntity<PurchaseTransactionStatusEnum> {
11
7
  vendor: MongoEntity<PurchaseVendorEntity>;
12
8
  items: PurchaseItemEntity[];
13
- notes?: string;
14
- status: PurchaseTransactionStatusEnum;
15
- history: StatusEntity<PurchaseTransactionStatusEnum>[];
16
- sequence: number;
17
- readonly number: string;
18
- readonly total: number;
19
- readonly payment: FinancePaymentEntity;
20
9
  }
@@ -1,5 +1,6 @@
1
1
  import { FinancePaymentStatusEnum } from '../../../finance/payment';
2
2
  import { PurchaseTransactionEntity } from './';
3
+ import { PurchaseTransactionStatusEnum } from './';
3
4
  import { AbstractValidator, ReadValidator, SearchValidator } from '../../..';
4
5
  import { PurchaseItemValidator } from '../item';
5
6
  export declare class SearchPurchaseTransactionValidator extends SearchValidator<PurchaseTransactionEntity> {
@@ -12,5 +13,6 @@ export declare class SavePurchaseTransactionValidator extends AbstractValidator
12
13
  notes: string;
13
14
  vendor?: string;
14
15
  payment?: FinancePaymentStatusEnum;
16
+ status?: PurchaseTransactionStatusEnum;
15
17
  get total(): number;
16
18
  }
@@ -10,6 +10,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
10
10
  import * as class_transformer_1 from "class-transformer";
11
11
  import * as class_validator_1 from "class-validator";
12
12
  import * as payment_enum_1 from '../../../finance/payment';
13
+ import * as transaction_enum_1 from './transaction.enum.js';
13
14
  import * as abstract_validator_1 from '../../..';
14
15
  import * as item_validator_1 from '../item';
15
16
  export class SearchPurchaseTransactionValidator extends abstract_validator_1.SearchValidator {
@@ -32,13 +33,14 @@ export class SavePurchaseTransactionValidator extends abstract_validator_1.Abstr
32
33
  warehouse: (0, abstract_validator_1.toId)(item.warehouse),
33
34
  }));
34
35
  this.notes = entity.notes;
35
- this.payment = payment?.status;
36
+ this.payment = typeof payment !== 'string' ? payment?.status : undefined;
36
37
  this.vendor = (0, abstract_validator_1.toId)(entity.vendor);
37
38
  }
38
39
  items = [];
39
40
  notes;
40
41
  vendor;
41
42
  payment = payment_enum_1.FinancePaymentStatusEnum.PENDING;
43
+ status;
42
44
  get total() {
43
45
  return this.items.reduce((sum, item) => sum + item.total, 0);
44
46
  }
@@ -67,3 +69,9 @@ __decorate([
67
69
  (0, class_validator_1.IsDefined)({ groups: ['create'] }),
68
70
  __metadata("design:type", String)
69
71
  ], SavePurchaseTransactionValidator.prototype, "payment", void 0);
72
+ __decorate([
73
+ (0, class_validator_1.IsEnum)(transaction_enum_1.PurchaseTransactionStatusEnum),
74
+ (0, class_validator_1.IsDefined)({ groups: ['create'] }),
75
+ (0, class_validator_1.IsOptional)(),
76
+ __metadata("design:type", String)
77
+ ], SavePurchaseTransactionValidator.prototype, "status", void 0);
@@ -1,21 +1,10 @@
1
- import { AccountUserEntity } from '../../../account/user';
2
- import { FinancePaymentEntity } from '../../../finance/payment';
3
- import { AbstractEntity } from '../../..';
4
- import { StatusEntity } from '../../..';
1
+ import { TransactionEntity } from '../../..';
5
2
  import { SaleTransactionStatusEnum } from './transaction.enum.js';
6
3
  import { SaleCustomerEntity } from '../customer';
7
4
  import { SaleItemEntity } from '../item';
8
5
  import type { MongoEntity } from '../../..';
9
- export declare class SaleTransactionEntity extends AbstractEntity {
10
- user: MongoEntity<AccountUserEntity>;
6
+ export declare class SaleTransactionEntity extends TransactionEntity<SaleTransactionStatusEnum> {
11
7
  customer: MongoEntity<SaleCustomerEntity>;
12
8
  items: SaleItemEntity[];
13
- notes?: string;
14
- status: SaleTransactionStatusEnum;
15
- history: StatusEntity<SaleTransactionStatusEnum>[];
16
- sequence: number;
17
- readonly number: string;
18
9
  readonly subtotal: number;
19
- readonly total: number;
20
- readonly payment?: MongoEntity<FinancePaymentEntity>;
21
10
  }
@@ -1,5 +1,6 @@
1
1
  import { FinancePaymentStatusEnum } from '../../../finance/payment';
2
2
  import { SaleTransactionEntity } from './';
3
+ import { SaleTransactionStatusEnum } from './';
3
4
  import { AbstractValidator, ReadValidator, SearchValidator } from '../../..';
4
5
  import { SaleItemValidator } from '../item';
5
6
  export declare class SearchSaleTransactionValidator extends SearchValidator<SaleTransactionEntity> {
@@ -12,5 +13,6 @@ export declare class SaveSaleTransactionValidator extends AbstractValidator {
12
13
  notes: string;
13
14
  customer?: string;
14
15
  payment?: FinancePaymentStatusEnum;
16
+ status?: SaleTransactionStatusEnum;
15
17
  get total(): number;
16
18
  }
@@ -10,6 +10,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
10
10
  import * as class_transformer_1 from "class-transformer";
11
11
  import * as class_validator_1 from "class-validator";
12
12
  import * as payment_enum_1 from '../../../finance/payment';
13
+ import * as transaction_enum_1 from './transaction.enum.js';
13
14
  import * as abstract_validator_1 from '../../..';
14
15
  import * as item_validator_1 from '../item';
15
16
  export class SearchSaleTransactionValidator extends abstract_validator_1.SearchValidator {
@@ -38,6 +39,7 @@ export class SaveSaleTransactionValidator extends abstract_validator_1.AbstractV
38
39
  notes;
39
40
  customer;
40
41
  payment = payment_enum_1.FinancePaymentStatusEnum.PENDING;
42
+ status;
41
43
  get total() {
42
44
  return this.items.reduce((sum, item) => sum + item.total, 0);
43
45
  }
@@ -66,3 +68,9 @@ __decorate([
66
68
  (0, class_validator_1.IsDefined)({ groups: ['create'] }),
67
69
  __metadata("design:type", String)
68
70
  ], SaveSaleTransactionValidator.prototype, "payment", void 0);
71
+ __decorate([
72
+ (0, class_validator_1.IsEnum)(transaction_enum_1.SaleTransactionStatusEnum),
73
+ (0, class_validator_1.IsDefined)({ groups: ['create'] }),
74
+ (0, class_validator_1.IsOptional)(),
75
+ __metadata("design:type", String)
76
+ ], SaveSaleTransactionValidator.prototype, "status", void 0);
@@ -0,0 +1,2 @@
1
+ export * from './item.entity';
2
+ export * from './item.validator';
@@ -0,0 +1 @@
1
+ export * from './item.validator.js';
@@ -0,0 +1,14 @@
1
+ import { CatalogProductEntity } from '../../../inventory/catalog/product';
2
+ import { CatalogVariantEntity } from '../../../inventory/catalog/variant';
3
+ import { StockWarehouseEntity } from '../../../inventory/stock/warehouse';
4
+ import { AbstractEntity } from '../../..';
5
+ import type { MongoEntity } from '../../..';
6
+ export declare class ServiceItemEntity extends AbstractEntity {
7
+ product: MongoEntity<CatalogProductEntity>;
8
+ variant: MongoEntity<CatalogVariantEntity>;
9
+ warehouse: MongoEntity<StockWarehouseEntity>;
10
+ quantity: number;
11
+ price: number;
12
+ notes?: string;
13
+ readonly total: number;
14
+ }
@@ -0,0 +1,9 @@
1
+ export declare class ServiceItemValidator {
2
+ product: string;
3
+ variant: string;
4
+ warehouse: string;
5
+ quantity: number;
6
+ price: number;
7
+ notes?: string;
8
+ get total(): number;
9
+ }
@@ -0,0 +1,51 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import * as class_transformer_1 from "class-transformer";
11
+ import * as class_validator_1 from "class-validator";
12
+ export class ServiceItemValidator {
13
+ product;
14
+ variant;
15
+ warehouse;
16
+ quantity = 1;
17
+ price = 0;
18
+ notes;
19
+ get total() {
20
+ return Math.trunc(this.quantity * this.price) || 0;
21
+ }
22
+ }
23
+ __decorate([
24
+ (0, class_validator_1.IsMongoId)(),
25
+ __metadata("design:type", String)
26
+ ], ServiceItemValidator.prototype, "product", void 0);
27
+ __decorate([
28
+ (0, class_validator_1.IsMongoId)(),
29
+ __metadata("design:type", String)
30
+ ], ServiceItemValidator.prototype, "variant", void 0);
31
+ __decorate([
32
+ (0, class_validator_1.IsMongoId)(),
33
+ __metadata("design:type", String)
34
+ ], ServiceItemValidator.prototype, "warehouse", void 0);
35
+ __decorate([
36
+ (0, class_validator_1.IsInt)(),
37
+ (0, class_validator_1.Min)(1),
38
+ __metadata("design:type", Object)
39
+ ], ServiceItemValidator.prototype, "quantity", void 0);
40
+ __decorate([
41
+ (0, class_transformer_1.Transform)(({ obj, value }) => value ?? obj?.cost ?? 0),
42
+ (0, class_validator_1.IsNumber)(),
43
+ (0, class_validator_1.Min)(0),
44
+ __metadata("design:type", Object)
45
+ ], ServiceItemValidator.prototype, "price", void 0);
46
+ __decorate([
47
+ (0, class_validator_1.IsString)(),
48
+ (0, class_validator_1.Length)(0, 500),
49
+ (0, class_validator_1.IsOptional)(),
50
+ __metadata("design:type", String)
51
+ ], ServiceItemValidator.prototype, "notes", void 0);
@@ -0,0 +1,4 @@
1
+ export * from './transaction.entity';
2
+ export * from './transaction.validator';
3
+ export * from './transaction.enum';
4
+ export * from './transaction.transition';
@@ -0,0 +1,3 @@
1
+ export * from './transaction.validator.js';
2
+ export * from './transaction.enum.js';
3
+ export * from './transaction.transition.js';
@@ -0,0 +1,9 @@
1
+ import { SaleCustomerEntity } from '../../sale/customer';
2
+ import { TransactionEntity } from '../../..';
3
+ import { ServiceTransactionStatusEnum } from './transaction.enum.js';
4
+ import { ServiceItemEntity } from '../item';
5
+ import type { MongoEntity } from '../../..';
6
+ export declare class ServiceTransactionEntity extends TransactionEntity<ServiceTransactionStatusEnum> {
7
+ customer?: MongoEntity<SaleCustomerEntity>;
8
+ items: ServiceItemEntity[];
9
+ }
@@ -0,0 +1,8 @@
1
+ export declare enum ServiceTransactionStatusEnum {
2
+ OPEN = "OPEN",
3
+ SCHEDULED = "SCHEDULED",
4
+ IN_PROGRESS = "IN_PROGRESS",
5
+ PAUSED = "PAUSED",
6
+ FINISHED = "FINISHED",
7
+ CANCELLED = "CANCELLED"
8
+ }
@@ -0,0 +1,9 @@
1
+ export var ServiceTransactionStatusEnum;
2
+ (function (ServiceTransactionStatusEnum) {
3
+ ServiceTransactionStatusEnum["OPEN"] = "OPEN";
4
+ ServiceTransactionStatusEnum["SCHEDULED"] = "SCHEDULED";
5
+ ServiceTransactionStatusEnum["IN_PROGRESS"] = "IN_PROGRESS";
6
+ ServiceTransactionStatusEnum["PAUSED"] = "PAUSED";
7
+ ServiceTransactionStatusEnum["FINISHED"] = "FINISHED";
8
+ ServiceTransactionStatusEnum["CANCELLED"] = "CANCELLED";
9
+ })(ServiceTransactionStatusEnum || (ServiceTransactionStatusEnum = {}));
@@ -0,0 +1,6 @@
1
+ import { AbstractTransition } from '../../../abstract.transition.js';
2
+ import { ServiceTransactionStatusEnum as Status } from './transaction.enum.js';
3
+
4
+ export declare class ServiceTransactionTransition extends AbstractTransition<Status, unknown> {
5
+ protected readonly $states: Readonly<Record<Status, readonly Status[]>>;
6
+ }
@@ -0,0 +1,13 @@
1
+ import { AbstractTransition } from '../../../abstract.transition.js';
2
+ import * as transaction_enum_1 from './transaction.enum.js';
3
+
4
+ export class ServiceTransactionTransition extends AbstractTransition {
5
+ $states = {
6
+ [transaction_enum_1.ServiceTransactionStatusEnum.OPEN]: [transaction_enum_1.ServiceTransactionStatusEnum.SCHEDULED, transaction_enum_1.ServiceTransactionStatusEnum.CANCELLED],
7
+ [transaction_enum_1.ServiceTransactionStatusEnum.SCHEDULED]: [transaction_enum_1.ServiceTransactionStatusEnum.IN_PROGRESS, transaction_enum_1.ServiceTransactionStatusEnum.CANCELLED],
8
+ [transaction_enum_1.ServiceTransactionStatusEnum.IN_PROGRESS]: [transaction_enum_1.ServiceTransactionStatusEnum.PAUSED, transaction_enum_1.ServiceTransactionStatusEnum.FINISHED, transaction_enum_1.ServiceTransactionStatusEnum.CANCELLED],
9
+ [transaction_enum_1.ServiceTransactionStatusEnum.PAUSED]: [transaction_enum_1.ServiceTransactionStatusEnum.IN_PROGRESS, transaction_enum_1.ServiceTransactionStatusEnum.CANCELLED],
10
+ [transaction_enum_1.ServiceTransactionStatusEnum.FINISHED]: [],
11
+ [transaction_enum_1.ServiceTransactionStatusEnum.CANCELLED]: [],
12
+ };
13
+ }
@@ -0,0 +1,17 @@
1
+ import { ServiceTransactionEntity } from './';
2
+ import { ServiceTransactionStatusEnum } from './';
3
+ import { AbstractValidator, ReadValidator, SearchValidator } from '../../..';
4
+ import { ServiceItemValidator } from '../item';
5
+ export declare class SearchServiceTransactionValidator extends SearchValidator<ServiceTransactionEntity> {
6
+ }
7
+ export declare class ReadServiceTransactionValidator extends ReadValidator<ServiceTransactionEntity> {
8
+ }
9
+ export declare class SaveServiceTransactionValidator extends AbstractValidator {
10
+ constructor(entity?: ServiceTransactionEntity);
11
+ items: ServiceItemValidator[];
12
+ notes: string;
13
+ customer?: string;
14
+ user?: string;
15
+ status?: ServiceTransactionStatusEnum;
16
+ get total(): number;
17
+ }
@@ -0,0 +1,75 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import * as class_transformer_1 from "class-transformer";
11
+ import * as class_validator_1 from "class-validator";
12
+ import * as transaction_enum_1 from './transaction.enum.js';
13
+ import * as abstract_validator_1 from '../../..';
14
+ import * as item_validator_1 from '../item';
15
+ export class SearchServiceTransactionValidator extends abstract_validator_1.SearchValidator {
16
+ }
17
+ export class ReadServiceTransactionValidator extends abstract_validator_1.ReadValidator {
18
+ }
19
+ export class SaveServiceTransactionValidator extends abstract_validator_1.AbstractValidator {
20
+ constructor(entity) {
21
+ super();
22
+ if (!entity)
23
+ return;
24
+ this.items = (entity.items || []).map((item) => ({
25
+ price: item.price ?? item.cost,
26
+ notes: item.notes,
27
+ product: (0, abstract_validator_1.toId)(item.product),
28
+ quantity: item.quantity,
29
+ total: item.total,
30
+ variant: (0, abstract_validator_1.toId)(item.variant),
31
+ warehouse: (0, abstract_validator_1.toId)(item.warehouse),
32
+ }));
33
+ this.customer = (0, abstract_validator_1.toId)(entity.customer);
34
+ this.user = (0, abstract_validator_1.toId)(entity.user);
35
+ this.notes = entity.notes;
36
+ }
37
+ items = [];
38
+ notes;
39
+ customer;
40
+ user;
41
+ status;
42
+ get total() {
43
+ return this.items.reduce((sum, item) => sum + item.total, 0);
44
+ }
45
+ }
46
+ __decorate([
47
+ (0, class_validator_1.IsArray)(),
48
+ (0, class_validator_1.ArrayNotEmpty)(),
49
+ (0, class_transformer_1.Type)(() => item_validator_1.ServiceItemValidator),
50
+ (0, class_validator_1.ValidateNested)(),
51
+ (0, class_validator_1.IsOptional)({ groups: ['update'] }),
52
+ __metadata("design:type", Array)
53
+ ], SaveServiceTransactionValidator.prototype, "items", void 0);
54
+ __decorate([
55
+ (0, class_validator_1.IsString)(),
56
+ (0, class_validator_1.Length)(0, 500),
57
+ (0, class_validator_1.IsOptional)(),
58
+ __metadata("design:type", String)
59
+ ], SaveServiceTransactionValidator.prototype, "notes", void 0);
60
+ __decorate([
61
+ (0, class_validator_1.IsMongoId)(),
62
+ (0, class_validator_1.IsOptional)(),
63
+ __metadata("design:type", String)
64
+ ], SaveServiceTransactionValidator.prototype, "customer", void 0);
65
+ __decorate([
66
+ (0, class_validator_1.IsMongoId)(),
67
+ (0, class_validator_1.IsOptional)(),
68
+ __metadata("design:type", String)
69
+ ], SaveServiceTransactionValidator.prototype, "user", void 0);
70
+ __decorate([
71
+ (0, class_validator_1.IsEnum)(transaction_enum_1.ServiceTransactionStatusEnum),
72
+ (0, class_validator_1.IsDefined)({ groups: ['create'] }),
73
+ (0, class_validator_1.IsOptional)(),
74
+ __metadata("design:type", String)
75
+ ], SaveServiceTransactionValidator.prototype, "status", void 0);
@@ -0,0 +1,14 @@
1
+ import { Schema, Types } from 'mongoose';
2
+ type EnumSource = Record<string, string> | readonly string[];
3
+ interface StatusPluginOptions {
4
+ default: string;
5
+ enum: EnumSource;
6
+ }
7
+ export interface StatusEntity<TEnum extends string = string> {
8
+ _id: Types.ObjectId;
9
+ date: Date;
10
+ name: TEnum;
11
+ user: string;
12
+ }
13
+ export declare function statusPlugin(schema: Schema, options: StatusPluginOptions): void;
14
+ export {};
@@ -0,0 +1,13 @@
1
+ import { AccountUserEntity } from './account/user';
2
+ import { FinancePaymentEntity } from './finance/payment';
3
+ import { AbstractEntity, type MongoEntity } from './';
4
+ import { StatusEntity } from './status.plugin.js';
5
+ export declare class TransactionEntity<S extends string = string> extends AbstractEntity {
6
+ user: MongoEntity<AccountUserEntity>;
7
+ notes?: string;
8
+ status: S;
9
+ readonly number: string;
10
+ readonly total: number;
11
+ readonly payment?: MongoEntity<FinancePaymentEntity>;
12
+ readonly history: StatusEntity<S>[];
13
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@merkaly/api",
3
- "version": "0.5.10",
3
+ "version": "0.5.12",
4
4
  "type": "module",
5
5
  "description": "Shared TypeScript interfaces and enums for Merkaly API",
6
6
  "exports": {