@softwear/latestcollectioncore 1.0.89 → 1.0.91

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.
@@ -8,9 +8,8 @@ const types_1 = require("./types");
8
8
  const transaction_1 = __importDefault(require("./transaction"));
9
9
  const date_fns_1 = require("date-fns");
10
10
  // fields in Vector
11
- const { QTY_TRANSACTION, QTY_STOCK, AMOUNT_STOCK, QTY_SHELF_STOCK, AMOUNT_SHELF_STOCK, AMOUNT_REVALUATE, QTY_RECIEVED, AMOUNT_RECIEVED, QTY_SOLD, AMOUNT_SOLD, AMOUNT_SOLD_EXCL, COSTPRICE_SOLD, QTY_CHANGE, AMOUNT_CHANGE, QTY_TRANSIT, AMOUNT_TRANSIT, QTY_PO, AMOUNT_PO, QTY_PO_COMPLETE, AMOUNT_PO_COMPLETE, QTY_MINIMUM_STOCK, AMOUNT_MINIMUM_STOCK, QTY_CONSIGNMENT, AMOUNT_CONSIGNMENT, COSTPRICE_CONSIGNMENT, QTY_PREPICKLIST, AMOUNT_PREPICKLIST, COSTPRICE_PREPICKLIST, QTY_PICKLIST, AMOUNT_PICKLIST, COSTPRICE_PICKLIST, QTY_PREORDER, AMOUNT_PREORDER, COSTPRICE_PREORDER, QTY_ORDER, AMOUNT_ORDER, COSTPRICE_ORDER, QTY_PRESOLD, AMOUNT_PRESOLD, COSTPRICE_PRESOLD, QTY_B2B_RETURN, AMOUNT_B2B_RETURN, COSTPRICE_B2B_RETURN, } = transaction_1.default.transactionVector;
12
- const DATABASE_VECTOR_LENGTH = 25; // For retail-only transactions
13
- // const DATABASE_VECTOR_LENGTH = 40 // For wholesale (+retail) transactions
11
+ const { QTY_TRANSACTION, QTY_STOCK, AMOUNT_STOCK, QTY_SHELF_STOCK, AMOUNT_SHELF_STOCK, AMOUNT_REVALUATE, QTY_RECIEVED, AMOUNT_RECIEVED, QTY_SOLD, AMOUNT_SOLD, AMOUNT_SOLD_EXCL, COSTPRICE_SOLD, QTY_CHANGE, AMOUNT_CHANGE, QTY_TRANSIT, AMOUNT_TRANSIT, QTY_PO, AMOUNT_PO, QTY_PO_COMPLETE, AMOUNT_PO_COMPLETE, QTY_MINIMUM_STOCK, AMOUNT_MINIMUM_STOCK, QTY_CONSIGNMENT, AMOUNT_CONSIGNMENT, COSTPRICE_CONSIGNMENT, QTY_PREPICKLIST, AMOUNT_PREPICKLIST, COSTPRICE_PREPICKLIST, QTY_PICKLIST, AMOUNT_PICKLIST, COSTPRICE_PICKLIST, QTY_PREORDER, AMOUNT_PREORDER, COSTPRICE_PREORDER, QTY_ORDER, AMOUNT_ORDER, COSTPRICE_ORDER, QTY_PRESOLD, AMOUNT_PRESOLD, COSTPRICE_PRESOLD, QTY_B2B_RETURN, AMOUNT_B2B_RETURN, COSTPRICE_B2B_RETURN, } = transaction_1.default.dbTransactionVector;
12
+ const DATABASE_VECTOR_LENGTH = 40;
14
13
  // DERIVED FIELDS
15
14
  const AMOUNT_SOLD_MAX = DATABASE_VECTOR_LENGTH + 0;
16
15
  const AMOUNT_SOLD_DISCOUNT = DATABASE_VECTOR_LENGTH + 1;
@@ -85,8 +84,11 @@ function addTransactionToAggregations(beginTimestamp, endTimestamp, aggregateKey
85
84
  const vector = transaction.vector;
86
85
  if (transaction.type == '1' && transaction.time > aggregateVector[MAX_RECIEVE_TIMESTAMP])
87
86
  aggregateVector[MAX_RECIEVE_TIMESTAMP] = transaction.time;
88
- if (transaction.time <= beginTimestamp)
89
- return addVectors(aggregateVector, vector, BEGIN_STOCK_VECTOR_START, BEGIN_STOCK_VECTOR_END);
87
+ if (transaction.time <= beginTimestamp) {
88
+ addVectors(aggregateVector, vector, BEGIN_STOCK_VECTOR_START, BEGIN_STOCK_VECTOR_END);
89
+ addVectors(aggregateVector, vector, QTY_CONSIGNMENT, COSTPRICE_CONSIGNMENT + 1);
90
+ return;
91
+ }
90
92
  if (transaction.time > endTimestamp)
91
93
  return;
92
94
  addVectors(aggregateVector, vector, BEGIN_STOCK_VECTOR_END, vector.length);
@@ -248,10 +250,11 @@ function whichShardsToProcess(dateRange, granularity) {
248
250
  * Calculate all derived columns on a given vector.
249
251
  */
250
252
  function postAgg(v, timeFrame) {
251
- v[QTY_END_STOCK] = v[QTY_STOCK] + v[QTY_RECIEVED] - v[QTY_SOLD] + v[QTY_CHANGE] + v[QTY_TRANSIT];
252
- v[AMOUNT_END_STOCK] = v[AMOUNT_STOCK] + v[AMOUNT_RECIEVED] - v[COSTPRICE_SOLD] + v[AMOUNT_CHANGE] + v[AMOUNT_TRANSIT] + v[AMOUNT_REVALUATE];
253
- v[QTY_END_SHELF_STOCK] = v[QTY_SHELF_STOCK] + v[QTY_RECIEVED] - v[QTY_SOLD] - v[QTY_CONSIGNMENT] + v[QTY_CHANGE] + v[QTY_TRANSIT];
254
- v[AMOUNT_END_SHELF_STOCK] = v[AMOUNT_SHELF_STOCK] + v[AMOUNT_RECIEVED] - v[COSTPRICE_SOLD] + v[COSTPRICE_CONSIGNMENT] + v[AMOUNT_CHANGE] + v[AMOUNT_TRANSIT];
253
+ v[QTY_END_STOCK] = v[QTY_STOCK] + v[QTY_RECIEVED] - v[QTY_SOLD] + v[QTY_CHANGE] + v[QTY_TRANSIT] - v[QTY_PRESOLD] + v[QTY_B2B_RETURN];
254
+ v[AMOUNT_END_STOCK] =
255
+ v[AMOUNT_STOCK] + v[AMOUNT_RECIEVED] - v[COSTPRICE_SOLD] + v[AMOUNT_CHANGE] + v[AMOUNT_TRANSIT] + v[AMOUNT_REVALUATE] - v[COSTPRICE_PRESOLD] + v[COSTPRICE_B2B_RETURN];
256
+ v[QTY_END_SHELF_STOCK] = v[QTY_END_STOCK] - v[QTY_CONSIGNMENT];
257
+ v[AMOUNT_END_SHELF_STOCK] = v[AMOUNT_END_STOCK] - v[COSTPRICE_CONSIGNMENT];
255
258
  v[SELLOUT_PERCENTAGE] = (v[QTY_SOLD] / (v[QTY_SOLD] + v[QTY_END_STOCK])) * 100;
256
259
  v[ROI] = v[AMOUNT_SOLD_EXCL] - v[AMOUNT_RECIEVED] + v[AMOUNT_TRANSIT];
257
260
  v[QTY_AVG_STOCK] = (v[QTY_STOCK] * timeFrame + v[STOCK_TIME_PRODUCT]) / timeFrame;
@@ -1,6 +1,6 @@
1
1
  import { dbTransactionI, TransactionI } from './types';
2
2
  declare const _default: {
3
- transactionVector: {
3
+ dbTransactionVector: {
4
4
  QTY_TRANSACTION: number;
5
5
  QTY_STOCK: number;
6
6
  AMOUNT_STOCK: number;
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const types_1 = require("./types");
4
4
  const index_1 = require("./index");
5
5
  // fields in Vector
6
- const transactionVector = {
6
+ const dbTransactionVector = {
7
7
  QTY_TRANSACTION: 0,
8
8
  QTY_STOCK: 1,
9
9
  AMOUNT_STOCK: 2,
@@ -48,8 +48,7 @@ const transactionVector = {
48
48
  AMOUNT_B2B_RETURN: 38,
49
49
  COSTPRICE_B2B_RETURN: 39,
50
50
  };
51
- // destructure constants for ease of use locally in this file
52
- const { QTY_TRANSACTION, QTY_STOCK, AMOUNT_STOCK, QTY_SHELF_STOCK, AMOUNT_SHELF_STOCK, AMOUNT_REVALUATE, QTY_RECIEVED, AMOUNT_RECIEVED, QTY_SOLD, AMOUNT_SOLD, AMOUNT_SOLD_EXCL, COSTPRICE_SOLD, QTY_CHANGE, AMOUNT_CHANGE, QTY_TRANSIT, AMOUNT_TRANSIT, QTY_PO, AMOUNT_PO, QTY_PO_COMPLETE, AMOUNT_PO_COMPLETE, QTY_MINIMUM_STOCK, AMOUNT_MINIMUM_STOCK, QTY_CONSIGNMENT, AMOUNT_CONSIGNMENT, COSTPRICE_CONSIGNMENT, } = transactionVector;
51
+ const tv = dbTransactionVector;
53
52
  /**
54
53
  *
55
54
  * Build a BI transaction object
@@ -72,109 +71,109 @@ const buildTransaction = function (transaction) {
72
71
  if (transaction.agent)
73
72
  dbTransaction.agent = transaction.agent;
74
73
  if (transaction.type == types_1.transactionTypeE.RECEIVING) {
75
- const vector = new Array(AMOUNT_RECIEVED + 1);
74
+ const vector = new Array(tv.AMOUNT_RECIEVED + 1);
76
75
  vector.fill(0);
77
- vector[QTY_TRANSACTION] = transaction.qty;
78
- vector[QTY_STOCK] = transaction.qty;
79
- vector[AMOUNT_STOCK] = (0, index_1.round2)(transaction.buyprice * transaction.qty);
80
- vector[QTY_SHELF_STOCK] = transaction.qty;
81
- vector[AMOUNT_SHELF_STOCK] = (0, index_1.round2)(transaction.buyprice * transaction.qty);
82
- vector[QTY_RECIEVED] = transaction.qty;
83
- vector[AMOUNT_RECIEVED] = (0, index_1.round2)(transaction.buyprice * transaction.qty);
76
+ vector[tv.QTY_TRANSACTION] = transaction.qty;
77
+ vector[tv.QTY_STOCK] = transaction.qty;
78
+ vector[tv.AMOUNT_STOCK] = (0, index_1.round2)(transaction.buyprice * transaction.qty);
79
+ vector[tv.QTY_SHELF_STOCK] = transaction.qty;
80
+ vector[tv.AMOUNT_SHELF_STOCK] = (0, index_1.round2)(transaction.buyprice * transaction.qty);
81
+ vector[tv.QTY_RECIEVED] = transaction.qty;
82
+ vector[tv.AMOUNT_RECIEVED] = (0, index_1.round2)(transaction.buyprice * transaction.qty);
84
83
  dbTransaction.vector = vector;
85
84
  return dbTransaction;
86
85
  }
87
86
  if (transaction.type == types_1.transactionTypeE.SALE) {
88
- const vector = new Array(COSTPRICE_SOLD + 1);
87
+ const vector = new Array(tv.COSTPRICE_SOLD + 1);
89
88
  vector.fill(0);
90
- vector[QTY_TRANSACTION] = transaction.qty;
91
- vector[QTY_STOCK] = -transaction.qty;
92
- vector[AMOUNT_STOCK] = (0, index_1.round2)(-transaction.buyprice * transaction.qty);
93
- vector[QTY_SHELF_STOCK] = -transaction.qty;
94
- vector[AMOUNT_SHELF_STOCK] = (0, index_1.round2)(-transaction.buyprice * transaction.qty);
95
- vector[QTY_SOLD] = transaction.qty;
96
- vector[AMOUNT_SOLD] = (0, index_1.round2)(transaction.sellprice * transaction.qty);
97
- vector[AMOUNT_SOLD_EXCL] = (0, index_1.round2)((transaction.sellprice / ((100 + (transaction.vat || 0)) / 100)) * transaction.qty);
98
- vector[COSTPRICE_SOLD] = (0, index_1.round2)(transaction.buyprice * transaction.qty);
89
+ vector[tv.QTY_TRANSACTION] = transaction.qty;
90
+ vector[tv.QTY_STOCK] = -transaction.qty;
91
+ vector[tv.AMOUNT_STOCK] = (0, index_1.round2)(-transaction.buyprice * transaction.qty);
92
+ vector[tv.QTY_SHELF_STOCK] = -transaction.qty;
93
+ vector[tv.AMOUNT_SHELF_STOCK] = (0, index_1.round2)(-transaction.buyprice * transaction.qty);
94
+ vector[tv.QTY_SOLD] = transaction.qty;
95
+ vector[tv.AMOUNT_SOLD] = (0, index_1.round2)(transaction.sellprice * transaction.qty);
96
+ vector[tv.AMOUNT_SOLD_EXCL] = (0, index_1.round2)((transaction.sellprice / ((100 + (transaction.vat || 0)) / 100)) * transaction.qty);
97
+ vector[tv.COSTPRICE_SOLD] = (0, index_1.round2)(transaction.buyprice * transaction.qty);
99
98
  dbTransaction.vector = vector;
100
99
  return dbTransaction;
101
100
  }
102
101
  if (transaction.type == types_1.transactionTypeE.TRANSIT) {
103
- const vector = new Array(AMOUNT_TRANSIT + 1);
102
+ const vector = new Array(tv.AMOUNT_TRANSIT + 1);
104
103
  vector.fill(0);
105
- vector[QTY_TRANSACTION] = transaction.qty;
106
- vector[QTY_STOCK] = transaction.qty;
107
- vector[AMOUNT_STOCK] = (0, index_1.round2)(transaction.buyprice * transaction.qty);
108
- vector[QTY_SHELF_STOCK] = transaction.qty;
109
- vector[AMOUNT_SHELF_STOCK] = (0, index_1.round2)(transaction.buyprice * transaction.qty);
110
- vector[QTY_TRANSIT] = transaction.qty;
111
- vector[AMOUNT_TRANSIT] = (0, index_1.round2)(transaction.buyprice * transaction.qty);
104
+ vector[tv.QTY_TRANSACTION] = transaction.qty;
105
+ vector[tv.QTY_STOCK] = transaction.qty;
106
+ vector[tv.AMOUNT_STOCK] = (0, index_1.round2)(transaction.buyprice * transaction.qty);
107
+ vector[tv.QTY_SHELF_STOCK] = transaction.qty;
108
+ vector[tv.AMOUNT_SHELF_STOCK] = (0, index_1.round2)(transaction.buyprice * transaction.qty);
109
+ vector[tv.QTY_TRANSIT] = transaction.qty;
110
+ vector[tv.AMOUNT_TRANSIT] = (0, index_1.round2)(transaction.buyprice * transaction.qty);
112
111
  dbTransaction.vector = vector;
113
112
  return dbTransaction;
114
113
  }
115
114
  if (transaction.type == types_1.transactionTypeE.CHANGE || transaction.type == types_1.transactionTypeE.START_STOCK) {
116
- const vector = new Array(AMOUNT_CHANGE + 1);
115
+ const vector = new Array(tv.AMOUNT_CHANGE + 1);
117
116
  vector.fill(0);
118
- vector[QTY_TRANSACTION] = transaction.qty;
119
- vector[QTY_STOCK] = transaction.qty;
120
- vector[AMOUNT_STOCK] = (0, index_1.round2)(transaction.buyprice * transaction.qty);
121
- vector[QTY_SHELF_STOCK] = transaction.qty;
122
- vector[AMOUNT_SHELF_STOCK] = (0, index_1.round2)(transaction.buyprice * transaction.qty);
123
- vector[QTY_CHANGE] = transaction.qty;
124
- vector[AMOUNT_CHANGE] = (0, index_1.round2)(transaction.buyprice * transaction.qty);
117
+ vector[tv.QTY_TRANSACTION] = transaction.qty;
118
+ vector[tv.QTY_STOCK] = transaction.qty;
119
+ vector[tv.AMOUNT_STOCK] = (0, index_1.round2)(transaction.buyprice * transaction.qty);
120
+ vector[tv.QTY_SHELF_STOCK] = transaction.qty;
121
+ vector[tv.AMOUNT_SHELF_STOCK] = (0, index_1.round2)(transaction.buyprice * transaction.qty);
122
+ vector[tv.QTY_CHANGE] = transaction.qty;
123
+ vector[tv.AMOUNT_CHANGE] = (0, index_1.round2)(transaction.buyprice * transaction.qty);
125
124
  dbTransaction.vector = vector;
126
125
  return dbTransaction;
127
126
  }
128
127
  if (transaction.type == types_1.transactionTypeE.RE_VALUATION) {
129
- const vector = new Array(AMOUNT_REVALUATE + 1);
128
+ const vector = new Array(tv.AMOUNT_REVALUATE + 1);
130
129
  vector.fill(0);
131
- vector[QTY_TRANSACTION] = transaction.qty;
132
- vector[AMOUNT_STOCK] = (0, index_1.round2)(transaction.buyprice * transaction.qty);
133
- vector[AMOUNT_SHELF_STOCK] = (0, index_1.round2)(transaction.buyprice * transaction.qty);
134
- vector[AMOUNT_REVALUATE] = (0, index_1.round2)(transaction.buyprice * transaction.qty);
130
+ vector[tv.QTY_TRANSACTION] = transaction.qty;
131
+ vector[tv.AMOUNT_STOCK] = (0, index_1.round2)(transaction.buyprice * transaction.qty);
132
+ vector[tv.AMOUNT_SHELF_STOCK] = (0, index_1.round2)(transaction.buyprice * transaction.qty);
133
+ vector[tv.AMOUNT_REVALUATE] = (0, index_1.round2)(transaction.buyprice * transaction.qty);
135
134
  dbTransaction.vector = vector;
136
135
  return dbTransaction;
137
136
  }
138
137
  if (transaction.type == types_1.transactionTypeE.START_SHELF_STOCK) {
139
138
  dbTransaction.type = types_1.transactionTypeE.START_STOCK;
140
- const vector = new Array(AMOUNT_SHELF_STOCK + 1);
139
+ const vector = new Array(tv.AMOUNT_SHELF_STOCK + 1);
141
140
  vector.fill(0);
142
- vector[QTY_TRANSACTION] = transaction.qty;
143
- vector[QTY_SHELF_STOCK] = transaction.qty;
144
- vector[AMOUNT_SHELF_STOCK] = (0, index_1.round2)(transaction.buyprice * transaction.qty);
141
+ vector[tv.QTY_TRANSACTION] = transaction.qty;
142
+ vector[tv.QTY_SHELF_STOCK] = transaction.qty;
143
+ vector[tv.AMOUNT_SHELF_STOCK] = (0, index_1.round2)(transaction.buyprice * transaction.qty);
145
144
  dbTransaction.vector = vector;
146
145
  return dbTransaction;
147
146
  }
148
147
  if (transaction.type == types_1.transactionTypeE.PURCHASE_ORDER) {
149
- const vector = new Array(AMOUNT_PO + 1);
148
+ const vector = new Array(tv.AMOUNT_PO + 1);
150
149
  vector.fill(0);
151
- vector[QTY_TRANSACTION] = transaction.qty;
152
- vector[QTY_PO] = transaction.qty;
153
- vector[AMOUNT_PO] = (0, index_1.round2)(transaction.buyprice * transaction.qty);
150
+ vector[tv.QTY_TRANSACTION] = transaction.qty;
151
+ vector[tv.QTY_PO] = transaction.qty;
152
+ vector[tv.AMOUNT_PO] = (0, index_1.round2)(transaction.buyprice * transaction.qty);
154
153
  dbTransaction.vector = vector;
155
154
  return dbTransaction;
156
155
  }
157
156
  if (transaction.type == types_1.transactionTypeE.PURCHASE_ORDER_COMPLETE) {
158
- const vector = new Array(AMOUNT_PO_COMPLETE + 1);
157
+ const vector = new Array(tv.AMOUNT_PO_COMPLETE + 1);
159
158
  vector.fill(0);
160
- vector[QTY_TRANSACTION] = transaction.qty;
161
- vector[QTY_PO_COMPLETE] = transaction.qty;
162
- vector[AMOUNT_PO_COMPLETE] = (0, index_1.round2)(transaction.buyprice * transaction.qty);
159
+ vector[tv.QTY_TRANSACTION] = transaction.qty;
160
+ vector[tv.QTY_PO_COMPLETE] = transaction.qty;
161
+ vector[tv.AMOUNT_PO_COMPLETE] = (0, index_1.round2)(transaction.buyprice * transaction.qty);
163
162
  dbTransaction.vector = vector;
164
163
  return dbTransaction;
165
164
  }
166
165
  if (transaction.type == types_1.transactionTypeE.MINIMUM_STOCK) {
167
- const vector = new Array(AMOUNT_MINIMUM_STOCK + 1);
166
+ const vector = new Array(tv.AMOUNT_MINIMUM_STOCK + 1);
168
167
  vector.fill(0);
169
- vector[QTY_TRANSACTION] = transaction.qty;
170
- vector[QTY_MINIMUM_STOCK] = transaction.qty;
171
- vector[AMOUNT_MINIMUM_STOCK] = (0, index_1.round2)(transaction.buyprice * transaction.qty);
168
+ vector[tv.QTY_TRANSACTION] = transaction.qty;
169
+ vector[tv.QTY_MINIMUM_STOCK] = transaction.qty;
170
+ vector[tv.AMOUNT_MINIMUM_STOCK] = (0, index_1.round2)(transaction.buyprice * transaction.qty);
172
171
  dbTransaction.vector = vector;
173
172
  return dbTransaction;
174
173
  }
175
174
  return undefined;
176
175
  };
177
- exports.default = { transactionVector, buildTransaction };
176
+ exports.default = { dbTransactionVector, buildTransaction };
178
177
  /**
179
178
  TODO:
180
179
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@softwear/latestcollectioncore",
3
- "version": "1.0.89",
3
+ "version": "1.0.91",
4
4
  "description": "Core functions for LatestCollections applications",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -48,10 +48,9 @@ const {
48
48
  QTY_B2B_RETURN,
49
49
  AMOUNT_B2B_RETURN,
50
50
  COSTPRICE_B2B_RETURN,
51
- } = transaction.transactionVector
51
+ } = transaction.dbTransactionVector
52
52
 
53
- const DATABASE_VECTOR_LENGTH = 25 // For retail-only transactions
54
- // const DATABASE_VECTOR_LENGTH = 40 // For wholesale (+retail) transactions
53
+ const DATABASE_VECTOR_LENGTH = 40
55
54
 
56
55
  // DERIVED FIELDS
57
56
  const AMOUNT_SOLD_MAX = DATABASE_VECTOR_LENGTH + 0
@@ -131,7 +130,11 @@ function addTransactionToAggregations(beginTimestamp: number, endTimestamp: numb
131
130
  }
132
131
  const vector = transaction.vector
133
132
  if (transaction.type == '1' && transaction.time > aggregateVector[MAX_RECIEVE_TIMESTAMP]) aggregateVector[MAX_RECIEVE_TIMESTAMP] = transaction.time
134
- if (transaction.time <= beginTimestamp) return addVectors(aggregateVector, vector, BEGIN_STOCK_VECTOR_START, BEGIN_STOCK_VECTOR_END)
133
+ if (transaction.time <= beginTimestamp) {
134
+ addVectors(aggregateVector, vector, BEGIN_STOCK_VECTOR_START, BEGIN_STOCK_VECTOR_END)
135
+ addVectors(aggregateVector, vector, QTY_CONSIGNMENT, COSTPRICE_CONSIGNMENT + 1)
136
+ return
137
+ }
135
138
  if (transaction.time > endTimestamp) return
136
139
  addVectors(aggregateVector, vector, BEGIN_STOCK_VECTOR_END, vector.length)
137
140
 
@@ -312,10 +315,11 @@ function whichShardsToProcess(dateRange: any, granularity: 'year' | 'month'): an
312
315
  * Calculate all derived columns on a given vector.
313
316
  */
314
317
  function postAgg(v: any, timeFrame: number): void {
315
- v[QTY_END_STOCK] = v[QTY_STOCK] + v[QTY_RECIEVED] - v[QTY_SOLD] + v[QTY_CHANGE] + v[QTY_TRANSIT]
316
- v[AMOUNT_END_STOCK] = v[AMOUNT_STOCK] + v[AMOUNT_RECIEVED] - v[COSTPRICE_SOLD] + v[AMOUNT_CHANGE] + v[AMOUNT_TRANSIT] + v[AMOUNT_REVALUATE]
317
- v[QTY_END_SHELF_STOCK] = v[QTY_SHELF_STOCK] + v[QTY_RECIEVED] - v[QTY_SOLD] - v[QTY_CONSIGNMENT] + v[QTY_CHANGE] + v[QTY_TRANSIT]
318
- v[AMOUNT_END_SHELF_STOCK] = v[AMOUNT_SHELF_STOCK] + v[AMOUNT_RECIEVED] - v[COSTPRICE_SOLD] + v[COSTPRICE_CONSIGNMENT] + v[AMOUNT_CHANGE] + v[AMOUNT_TRANSIT]
318
+ v[QTY_END_STOCK] = v[QTY_STOCK] + v[QTY_RECIEVED] - v[QTY_SOLD] + v[QTY_CHANGE] + v[QTY_TRANSIT] - v[QTY_PRESOLD] + v[QTY_B2B_RETURN]
319
+ v[AMOUNT_END_STOCK] =
320
+ v[AMOUNT_STOCK] + v[AMOUNT_RECIEVED] - v[COSTPRICE_SOLD] + v[AMOUNT_CHANGE] + v[AMOUNT_TRANSIT] + v[AMOUNT_REVALUATE] - v[COSTPRICE_PRESOLD] + v[COSTPRICE_B2B_RETURN]
321
+ v[QTY_END_SHELF_STOCK] = v[QTY_END_STOCK] - v[QTY_CONSIGNMENT]
322
+ v[AMOUNT_END_SHELF_STOCK] = v[AMOUNT_END_STOCK] - v[COSTPRICE_CONSIGNMENT]
319
323
  v[SELLOUT_PERCENTAGE] = (v[QTY_SOLD] / (v[QTY_SOLD] + v[QTY_END_STOCK])) * 100
320
324
  v[ROI] = v[AMOUNT_SOLD_EXCL] - v[AMOUNT_RECIEVED] + v[AMOUNT_TRANSIT]
321
325
  v[QTY_AVG_STOCK] = (v[QTY_STOCK] * timeFrame + v[STOCK_TIME_PRODUCT]) / timeFrame
@@ -2,7 +2,7 @@ import { dbTransactionI, TransactionI, transactionTypeE } from './types'
2
2
  import { round2 } from './index'
3
3
 
4
4
  // fields in Vector
5
- const transactionVector = {
5
+ const dbTransactionVector = {
6
6
  QTY_TRANSACTION: 0,
7
7
  QTY_STOCK: 1,
8
8
  AMOUNT_STOCK: 2,
@@ -48,34 +48,7 @@ const transactionVector = {
48
48
  AMOUNT_B2B_RETURN: 38,
49
49
  COSTPRICE_B2B_RETURN: 39,
50
50
  }
51
- // destructure constants for ease of use locally in this file
52
- const {
53
- QTY_TRANSACTION,
54
- QTY_STOCK,
55
- AMOUNT_STOCK,
56
- QTY_SHELF_STOCK,
57
- AMOUNT_SHELF_STOCK,
58
- AMOUNT_REVALUATE,
59
- QTY_RECIEVED,
60
- AMOUNT_RECIEVED,
61
- QTY_SOLD,
62
- AMOUNT_SOLD,
63
- AMOUNT_SOLD_EXCL,
64
- COSTPRICE_SOLD,
65
- QTY_CHANGE,
66
- AMOUNT_CHANGE,
67
- QTY_TRANSIT,
68
- AMOUNT_TRANSIT,
69
- QTY_PO,
70
- AMOUNT_PO,
71
- QTY_PO_COMPLETE,
72
- AMOUNT_PO_COMPLETE,
73
- QTY_MINIMUM_STOCK,
74
- AMOUNT_MINIMUM_STOCK,
75
- QTY_CONSIGNMENT,
76
- AMOUNT_CONSIGNMENT,
77
- COSTPRICE_CONSIGNMENT,
78
- } = transactionVector
51
+ const tv = dbTransactionVector
79
52
 
80
53
  /**
81
54
  *
@@ -97,70 +70,70 @@ const buildTransaction = function (transaction: TransactionI): dbTransactionI |
97
70
  if (transaction.agent) dbTransaction.agent = transaction.agent
98
71
 
99
72
  if (transaction.type == transactionTypeE.RECEIVING) {
100
- const vector = new Array(AMOUNT_RECIEVED + 1)
73
+ const vector = new Array(tv.AMOUNT_RECIEVED + 1)
101
74
  vector.fill(0)
102
- vector[QTY_TRANSACTION] = transaction.qty
103
- vector[QTY_STOCK] = transaction.qty
104
- vector[AMOUNT_STOCK] = round2(transaction.buyprice * transaction.qty)
105
- vector[QTY_SHELF_STOCK] = transaction.qty
106
- vector[AMOUNT_SHELF_STOCK] = round2(transaction.buyprice * transaction.qty)
107
- vector[QTY_RECIEVED] = transaction.qty
108
- vector[AMOUNT_RECIEVED] = round2(transaction.buyprice * transaction.qty)
75
+ vector[tv.QTY_TRANSACTION] = transaction.qty
76
+ vector[tv.QTY_STOCK] = transaction.qty
77
+ vector[tv.AMOUNT_STOCK] = round2(transaction.buyprice * transaction.qty)
78
+ vector[tv.QTY_SHELF_STOCK] = transaction.qty
79
+ vector[tv.AMOUNT_SHELF_STOCK] = round2(transaction.buyprice * transaction.qty)
80
+ vector[tv.QTY_RECIEVED] = transaction.qty
81
+ vector[tv.AMOUNT_RECIEVED] = round2(transaction.buyprice * transaction.qty)
109
82
  dbTransaction.vector = vector
110
83
  return dbTransaction
111
84
  }
112
85
 
113
86
  if (transaction.type == transactionTypeE.SALE) {
114
- const vector = new Array(COSTPRICE_SOLD + 1)
87
+ const vector = new Array(tv.COSTPRICE_SOLD + 1)
115
88
  vector.fill(0)
116
- vector[QTY_TRANSACTION] = transaction.qty
117
- vector[QTY_STOCK] = -transaction.qty
118
- vector[AMOUNT_STOCK] = round2(-transaction.buyprice * transaction.qty)
119
- vector[QTY_SHELF_STOCK] = -transaction.qty
120
- vector[AMOUNT_SHELF_STOCK] = round2(-transaction.buyprice * transaction.qty)
121
- vector[QTY_SOLD] = transaction.qty
122
- vector[AMOUNT_SOLD] = round2(transaction.sellprice * transaction.qty)
123
- vector[AMOUNT_SOLD_EXCL] = round2((transaction.sellprice / ((100 + (transaction.vat || 0)) / 100)) * transaction.qty)
124
- vector[COSTPRICE_SOLD] = round2(transaction.buyprice * transaction.qty)
89
+ vector[tv.QTY_TRANSACTION] = transaction.qty
90
+ vector[tv.QTY_STOCK] = -transaction.qty
91
+ vector[tv.AMOUNT_STOCK] = round2(-transaction.buyprice * transaction.qty)
92
+ vector[tv.QTY_SHELF_STOCK] = -transaction.qty
93
+ vector[tv.AMOUNT_SHELF_STOCK] = round2(-transaction.buyprice * transaction.qty)
94
+ vector[tv.QTY_SOLD] = transaction.qty
95
+ vector[tv.AMOUNT_SOLD] = round2(transaction.sellprice * transaction.qty)
96
+ vector[tv.AMOUNT_SOLD_EXCL] = round2((transaction.sellprice / ((100 + (transaction.vat || 0)) / 100)) * transaction.qty)
97
+ vector[tv.COSTPRICE_SOLD] = round2(transaction.buyprice * transaction.qty)
125
98
  dbTransaction.vector = vector
126
99
  return dbTransaction
127
100
  }
128
101
 
129
102
  if (transaction.type == transactionTypeE.TRANSIT) {
130
- const vector = new Array(AMOUNT_TRANSIT + 1)
103
+ const vector = new Array(tv.AMOUNT_TRANSIT + 1)
131
104
  vector.fill(0)
132
- vector[QTY_TRANSACTION] = transaction.qty
133
- vector[QTY_STOCK] = transaction.qty
134
- vector[AMOUNT_STOCK] = round2(transaction.buyprice * transaction.qty)
135
- vector[QTY_SHELF_STOCK] = transaction.qty
136
- vector[AMOUNT_SHELF_STOCK] = round2(transaction.buyprice * transaction.qty)
137
- vector[QTY_TRANSIT] = transaction.qty
138
- vector[AMOUNT_TRANSIT] = round2(transaction.buyprice * transaction.qty)
105
+ vector[tv.QTY_TRANSACTION] = transaction.qty
106
+ vector[tv.QTY_STOCK] = transaction.qty
107
+ vector[tv.AMOUNT_STOCK] = round2(transaction.buyprice * transaction.qty)
108
+ vector[tv.QTY_SHELF_STOCK] = transaction.qty
109
+ vector[tv.AMOUNT_SHELF_STOCK] = round2(transaction.buyprice * transaction.qty)
110
+ vector[tv.QTY_TRANSIT] = transaction.qty
111
+ vector[tv.AMOUNT_TRANSIT] = round2(transaction.buyprice * transaction.qty)
139
112
  dbTransaction.vector = vector
140
113
  return dbTransaction
141
114
  }
142
115
 
143
116
  if (transaction.type == transactionTypeE.CHANGE || transaction.type == transactionTypeE.START_STOCK) {
144
- const vector = new Array(AMOUNT_CHANGE + 1)
117
+ const vector = new Array(tv.AMOUNT_CHANGE + 1)
145
118
  vector.fill(0)
146
- vector[QTY_TRANSACTION] = transaction.qty
147
- vector[QTY_STOCK] = transaction.qty
148
- vector[AMOUNT_STOCK] = round2(transaction.buyprice * transaction.qty)
149
- vector[QTY_SHELF_STOCK] = transaction.qty
150
- vector[AMOUNT_SHELF_STOCK] = round2(transaction.buyprice * transaction.qty)
151
- vector[QTY_CHANGE] = transaction.qty
152
- vector[AMOUNT_CHANGE] = round2(transaction.buyprice * transaction.qty)
119
+ vector[tv.QTY_TRANSACTION] = transaction.qty
120
+ vector[tv.QTY_STOCK] = transaction.qty
121
+ vector[tv.AMOUNT_STOCK] = round2(transaction.buyprice * transaction.qty)
122
+ vector[tv.QTY_SHELF_STOCK] = transaction.qty
123
+ vector[tv.AMOUNT_SHELF_STOCK] = round2(transaction.buyprice * transaction.qty)
124
+ vector[tv.QTY_CHANGE] = transaction.qty
125
+ vector[tv.AMOUNT_CHANGE] = round2(transaction.buyprice * transaction.qty)
153
126
  dbTransaction.vector = vector
154
127
  return dbTransaction
155
128
  }
156
129
 
157
130
  if (transaction.type == transactionTypeE.RE_VALUATION) {
158
- const vector = new Array(AMOUNT_REVALUATE + 1)
131
+ const vector = new Array(tv.AMOUNT_REVALUATE + 1)
159
132
  vector.fill(0)
160
- vector[QTY_TRANSACTION] = transaction.qty
161
- vector[AMOUNT_STOCK] = round2(transaction.buyprice * transaction.qty)
162
- vector[AMOUNT_SHELF_STOCK] = round2(transaction.buyprice * transaction.qty)
163
- vector[AMOUNT_REVALUATE] = round2(transaction.buyprice * transaction.qty)
133
+ vector[tv.QTY_TRANSACTION] = transaction.qty
134
+ vector[tv.AMOUNT_STOCK] = round2(transaction.buyprice * transaction.qty)
135
+ vector[tv.AMOUNT_SHELF_STOCK] = round2(transaction.buyprice * transaction.qty)
136
+ vector[tv.AMOUNT_REVALUATE] = round2(transaction.buyprice * transaction.qty)
164
137
  dbTransaction.vector = vector
165
138
  return dbTransaction
166
139
  }
@@ -168,48 +141,48 @@ const buildTransaction = function (transaction: TransactionI): dbTransactionI |
168
141
  if (transaction.type == transactionTypeE.START_SHELF_STOCK) {
169
142
  dbTransaction.type = transactionTypeE.START_STOCK
170
143
 
171
- const vector = new Array(AMOUNT_SHELF_STOCK + 1)
144
+ const vector = new Array(tv.AMOUNT_SHELF_STOCK + 1)
172
145
  vector.fill(0)
173
- vector[QTY_TRANSACTION] = transaction.qty
174
- vector[QTY_SHELF_STOCK] = transaction.qty
175
- vector[AMOUNT_SHELF_STOCK] = round2(transaction.buyprice * transaction.qty)
146
+ vector[tv.QTY_TRANSACTION] = transaction.qty
147
+ vector[tv.QTY_SHELF_STOCK] = transaction.qty
148
+ vector[tv.AMOUNT_SHELF_STOCK] = round2(transaction.buyprice * transaction.qty)
176
149
  dbTransaction.vector = vector
177
150
  return dbTransaction
178
151
  }
179
152
 
180
153
  if (transaction.type == transactionTypeE.PURCHASE_ORDER) {
181
- const vector = new Array(AMOUNT_PO + 1)
154
+ const vector = new Array(tv.AMOUNT_PO + 1)
182
155
  vector.fill(0)
183
- vector[QTY_TRANSACTION] = transaction.qty
184
- vector[QTY_PO] = transaction.qty
185
- vector[AMOUNT_PO] = round2(transaction.buyprice * transaction.qty)
156
+ vector[tv.QTY_TRANSACTION] = transaction.qty
157
+ vector[tv.QTY_PO] = transaction.qty
158
+ vector[tv.AMOUNT_PO] = round2(transaction.buyprice * transaction.qty)
186
159
  dbTransaction.vector = vector
187
160
  return dbTransaction
188
161
  }
189
162
 
190
163
  if (transaction.type == transactionTypeE.PURCHASE_ORDER_COMPLETE) {
191
- const vector = new Array(AMOUNT_PO_COMPLETE + 1)
164
+ const vector = new Array(tv.AMOUNT_PO_COMPLETE + 1)
192
165
  vector.fill(0)
193
- vector[QTY_TRANSACTION] = transaction.qty
194
- vector[QTY_PO_COMPLETE] = transaction.qty
195
- vector[AMOUNT_PO_COMPLETE] = round2(transaction.buyprice * transaction.qty)
166
+ vector[tv.QTY_TRANSACTION] = transaction.qty
167
+ vector[tv.QTY_PO_COMPLETE] = transaction.qty
168
+ vector[tv.AMOUNT_PO_COMPLETE] = round2(transaction.buyprice * transaction.qty)
196
169
  dbTransaction.vector = vector
197
170
  return dbTransaction
198
171
  }
199
172
 
200
173
  if (transaction.type == transactionTypeE.MINIMUM_STOCK) {
201
- const vector = new Array(AMOUNT_MINIMUM_STOCK + 1)
174
+ const vector = new Array(tv.AMOUNT_MINIMUM_STOCK + 1)
202
175
  vector.fill(0)
203
- vector[QTY_TRANSACTION] = transaction.qty
204
- vector[QTY_MINIMUM_STOCK] = transaction.qty
205
- vector[AMOUNT_MINIMUM_STOCK] = round2(transaction.buyprice * transaction.qty)
176
+ vector[tv.QTY_TRANSACTION] = transaction.qty
177
+ vector[tv.QTY_MINIMUM_STOCK] = transaction.qty
178
+ vector[tv.AMOUNT_MINIMUM_STOCK] = round2(transaction.buyprice * transaction.qty)
206
179
  dbTransaction.vector = vector
207
180
  return dbTransaction
208
181
  }
209
182
 
210
183
  return undefined
211
184
  }
212
- export default { transactionVector, buildTransaction }
185
+ export default { dbTransactionVector, buildTransaction }
213
186
 
214
187
  /**
215
188
  TODO:
@@ -4,11 +4,11 @@ const { expect } = require('chai')
4
4
  const articleStatus = core.articleStatus
5
5
  describe('#articleStatus', () => {
6
6
  describe('#constants', () => {
7
- it('QTY_SOLD_BEFORE_RETURNS should be 46', () => {
8
- expect(articleStatus.QTY_SOLD_BEFORE_RETURNS).to.equal(46)
7
+ it('QTY_SOLD_BEFORE_RETURNS should be 61', () => {
8
+ expect(articleStatus.QTY_SOLD_BEFORE_RETURNS).to.equal(61)
9
9
  })
10
- it('AMOUNT_RETURN should be 31', () => {
11
- expect(articleStatus.AMOUNT_RETURN).to.equal(31)
10
+ it('AMOUNT_RETURN should be 46', () => {
11
+ expect(articleStatus.AMOUNT_RETURN).to.equal(46)
12
12
  })
13
13
  })
14
14
  })