js-klikvet-logic-worker 2.3.28 → 2.3.30
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/worker.d.mts +36 -15
- package/dist/worker.d.mts.map +1 -1
- package/dist/worker.mjs +223 -126
- package/dist/worker.mjs.map +1 -1
- package/package.json +12 -12
- package/src/worker.mts +224 -127
- package/test/{worker.test.js → worker.test.mjs} +17 -19
package/dist/worker.mjs
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import assert from 'assert';
|
|
2
2
|
import clonedeep from 'lodash.clonedeep';
|
|
3
|
-
import makeDir from 'make-dir';
|
|
4
3
|
import fs from 'fs';
|
|
5
4
|
import path from 'path';
|
|
5
|
+
import { makeDirectorySync } from 'make-dir';
|
|
6
6
|
import { Worker, Client } from 'cry-ebus2';
|
|
7
7
|
import { Mongo } from 'cry-db';
|
|
8
8
|
import { Log, serialize, sleep } from 'cry-helpers';
|
|
9
|
-
import { VsotaDobavZaObdobje, anonimizirajPodatke, certs, createMongoForAnonimizacija, dobavaZdravil, ensureIndexes, karticaArtikla, koledarVeterinarja, mojPromet, pobrisiNeuporabljeno, podatkiRejca, poisciBlagovnice, poisciNeuporabljeno, porabaInProdajaZdravil, prodajaZdravil, prodano, prodanoInPorabljeno, promet, racuni, racunovodji, razknjiziBlagovnico, razknjiziDobavnico, smsCepljen, smsCepljenjaNaDan, smsNarocen, smsNaroceniNaDan, spremembaZalogeZaObdobje, spremeniZalogoNaPodlagiRacuna, stranke, updateOpombeRejca, updatePotrditevBrejosti, updatePresusitve, updateStatusOsemenitve, zakljucekBlagajne, zakljucekPolneInventureSestaviInZapisi, zalogaNaDan, zalogaPoDnevih, zaracunajDobavnice, zdruziStranke, zdruziPaciente, zapisiPoraboZaObravnavo, zapisiPorabeZaObravnave, zapisiPorabeZaDobavnice, } from 'cry-klikvet-logic';
|
|
9
|
+
import { VsotaDobavZaObdobje, anonimizirajPodatke, certs, createMongoForAnonimizacija, dobavaZdravil, ensureIndexes, karticaArtikla, koledarVeterinarja, mojPromet, pobrisiNeuporabljeno, podatkiRejca, poisciBlagovnice, poisciNeuporabljeno, porabaInProdajaZdravil, prodajaZdravil, prodano, prodanoInPorabljeno, promet, racuni, racunovodji, razknjiziBlagovnico, razknjiziDobavnico, smsCepljen, smsCepljenjaNaDan, smsNarocen, smsNaroceniNaDan, spremembaZalogeZaObdobje, spremeniZalogoNaPodlagiRacuna, stranke, updateOpombeRejca, updatePotrditevBrejosti, updatePresusitve, updateStatusOsemenitve, zakljucekBlagajne, zakljucekPolneInventureSestaviInZapisi, zalogaNaDan, zalogaPoDnevih, zaracunajDobavnice, zdruziStranke, zdruziPaciente, zapisiPoraboZaObravnavo, zapisiPorabeZaObravnave, zapisiPorabeZaDobavnice, pmzUpdateAllForYear } from 'cry-klikvet-logic';
|
|
10
10
|
const DEFAULT_SERVICE_NAME = 'klikvet';
|
|
11
11
|
let log = new Log(['KLIKVET']);
|
|
12
12
|
function round(num, dec = 2) {
|
|
@@ -30,12 +30,12 @@ export class KlikvetLogicWorker extends Worker {
|
|
|
30
30
|
}
|
|
31
31
|
async porabaZaObravnavo(mongo, data) {
|
|
32
32
|
console.log('porabaZaObravnavo', data);
|
|
33
|
-
let nastavitve = await this.dbNastavitve(data.tenant);
|
|
34
|
-
let obravnava = await this.dbFindById(data.tenant, "obravnave", data.id);
|
|
33
|
+
let nastavitve = await this.dbNastavitve(data.tenant, mongo);
|
|
34
|
+
let obravnava = await this.dbFindById(data.tenant, "obravnave", data.id, mongo);
|
|
35
35
|
if (!obravnava)
|
|
36
36
|
throw new Error("porabaZaObravnavo: ni obravnave " + (data === null || data === void 0 ? void 0 : data.id));
|
|
37
37
|
let artikel_ids = obravnava.koraki.map(k => (k.postavke || []).map(p => p.artikel_id)).flat(2).filter(a => !!a);
|
|
38
|
-
let artikli = await this.dbFind(data.tenant, "artikli", { _id: { $in: artikel_ids } });
|
|
38
|
+
let artikli = await this.dbFind(data.tenant, "artikli", { _id: { $in: artikel_ids } }, {}, mongo);
|
|
39
39
|
let poraba = await zapisiPoraboZaObravnavo({ tenant: data.tenant, mongo, obravnava, nastavitve, username: data.username, artikli });
|
|
40
40
|
console.log('poraba', poraba);
|
|
41
41
|
return poraba;
|
|
@@ -53,15 +53,36 @@ export class KlikvetLogicWorker extends Worker {
|
|
|
53
53
|
console.log('publish failed, continue working', err.message);
|
|
54
54
|
}
|
|
55
55
|
}
|
|
56
|
+
configureMongoInstance(mongo) {
|
|
57
|
+
mongo.useSoftDelete(true);
|
|
58
|
+
mongo.useRevisions(true);
|
|
59
|
+
mongo.useAuditing(true);
|
|
60
|
+
mongo.emitPublishEvents(true);
|
|
61
|
+
mongo.on('publish', this.publishMsg.bind(this));
|
|
62
|
+
return mongo;
|
|
63
|
+
}
|
|
64
|
+
async withNewMongo(fn) {
|
|
65
|
+
const mongo = this.configureMongoInstance(new Mongo());
|
|
66
|
+
try {
|
|
67
|
+
return await fn(mongo);
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
console.error('withNewMongo error', err);
|
|
71
|
+
throw err;
|
|
72
|
+
}
|
|
73
|
+
finally {
|
|
74
|
+
try {
|
|
75
|
+
await mongo.close();
|
|
76
|
+
}
|
|
77
|
+
catch (closeErr) {
|
|
78
|
+
console.error('withNewMongo close error', closeErr);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
56
82
|
async resetMongo() {
|
|
57
83
|
if (this.mongo)
|
|
58
84
|
await this.mongo.close();
|
|
59
|
-
this.mongo = new Mongo();
|
|
60
|
-
this.mongo.useSoftDelete(true);
|
|
61
|
-
this.mongo.useRevisions(true);
|
|
62
|
-
this.mongo.useAuditing(true);
|
|
63
|
-
this.mongo.emitPublishEvents(true);
|
|
64
|
-
this.mongo.on('publish', this.publishMsg.bind(this));
|
|
85
|
+
this.mongo = this.configureMongoInstance(new Mongo());
|
|
65
86
|
}
|
|
66
87
|
async closeMongo() {
|
|
67
88
|
if (this.mongo)
|
|
@@ -88,7 +109,7 @@ export class KlikvetLogicWorker extends Worker {
|
|
|
88
109
|
return ret;
|
|
89
110
|
}
|
|
90
111
|
async processLogic(data) {
|
|
91
|
-
var _a, _b, _c;
|
|
112
|
+
var _a, _b, _c, _d;
|
|
92
113
|
log.debug(`klikvet worker request of type ${typeof data}`, data);
|
|
93
114
|
// console.log('data', data);
|
|
94
115
|
if (data === 'ping') {
|
|
@@ -136,9 +157,9 @@ export class KlikvetLogicWorker extends Worker {
|
|
|
136
157
|
return res;
|
|
137
158
|
}
|
|
138
159
|
if (data.operation === 'porocilo-racunovodji') {
|
|
139
|
-
assert(data.tenant, 'must tenant');
|
|
140
|
-
assert(data.odDne, 'must odDne');
|
|
141
|
-
assert(data.doDne, 'must doDne');
|
|
160
|
+
assert(data.tenant, 'porocilo-racunovodji must tenant');
|
|
161
|
+
assert(data.odDne, 'porocilo-racunovodji must odDne');
|
|
162
|
+
assert(data.doDne, 'porocilo-racunovodji must doDne');
|
|
142
163
|
let pipeline = await racunovodji.createAggregationPipeline(data);
|
|
143
164
|
let podatki = await racunovodji.execPipeline(pipeline.pipeline, data.tenant);
|
|
144
165
|
let prviZadnji = await racunovodji.getFirstLastBills(data.tenant, pipeline.match);
|
|
@@ -172,26 +193,34 @@ export class KlikvetLogicWorker extends Worker {
|
|
|
172
193
|
if (data.TRRRacuni) {
|
|
173
194
|
ret.TRRRacuni = await zakljucekBlagajne.TRRRacuni(pipeline.match, data.tenant);
|
|
174
195
|
}
|
|
196
|
+
if (data.racuniPravnim) {
|
|
197
|
+
ret.racuniPravnim = await racunovodji.getTaxBills(data.tenant, pipeline.match);
|
|
198
|
+
}
|
|
199
|
+
return ret;
|
|
200
|
+
}
|
|
201
|
+
if (data.operation === 'gotovinski-racuni') {
|
|
202
|
+
let pipeline = zakljucekBlagajne.createAggregationPipeline(data);
|
|
203
|
+
let ret = await racunovodji.getCashBills(data.tenant, pipeline.match);
|
|
175
204
|
return ret;
|
|
176
205
|
}
|
|
177
206
|
if (data.operation === 'moj-promet') {
|
|
178
|
-
assert(data.username, 'must specify username');
|
|
179
|
-
assert(data.odDne, 'must specify odDne');
|
|
180
|
-
assert(data.doDne, 'must specify doDne');
|
|
207
|
+
assert(data.username, 'moj-promet must specify username');
|
|
208
|
+
assert(data.odDne, 'moj-promet must specify odDne');
|
|
209
|
+
assert(data.doDne, 'moj-promet must specify doDne');
|
|
181
210
|
let pipeline = mojPromet.createAggregationPipeline(data);
|
|
182
211
|
let podatki = await mojPromet.execPipeline(pipeline.pipeline, data.tenant);
|
|
183
212
|
return podatki;
|
|
184
213
|
}
|
|
185
214
|
if (data.operation === 'prodano') {
|
|
186
|
-
assert(data.tenant, 'must specify tenant');
|
|
187
|
-
assert(data.odDne, 'must specify odDne');
|
|
188
|
-
assert(data.doDne, 'must specify doDne');
|
|
215
|
+
assert(data.tenant, 'prodano must specify tenant');
|
|
216
|
+
assert(data.odDne, 'prodano must specify odDne');
|
|
217
|
+
assert(data.doDne, 'prodano must specify doDne');
|
|
189
218
|
let pipeline = prodano.createAggregationPipeline(data);
|
|
190
219
|
let podatki = await prodano.execPipeline(pipeline.pipeline, data.tenant);
|
|
191
220
|
return podatki;
|
|
192
221
|
}
|
|
193
222
|
if (data.operation === 'prodano-porabljeno') {
|
|
194
|
-
assert(data.tenant, 'must specify tenant');
|
|
223
|
+
assert(data.tenant, 'prodano-porabljeno must specify tenant');
|
|
195
224
|
let podatki = await prodanoInPorabljeno(data);
|
|
196
225
|
return podatki;
|
|
197
226
|
}
|
|
@@ -397,10 +426,15 @@ export class KlikvetLogicWorker extends Worker {
|
|
|
397
426
|
if (data.operation === "furs-register-invoice") {
|
|
398
427
|
let res = await this.registerInvoice(data);
|
|
399
428
|
setTimeout(async () => {
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
429
|
+
try {
|
|
430
|
+
await this.withNewMongo(async (mongo) => {
|
|
431
|
+
await this.registerAllInvoices(data, mongo);
|
|
432
|
+
await this.razknjiziRacune(data, mongo);
|
|
433
|
+
});
|
|
434
|
+
}
|
|
435
|
+
catch (err) {
|
|
436
|
+
console.error('delayed registerAllInvoices failed', err);
|
|
437
|
+
}
|
|
404
438
|
}, 2000);
|
|
405
439
|
return res;
|
|
406
440
|
}
|
|
@@ -408,9 +442,14 @@ export class KlikvetLogicWorker extends Worker {
|
|
|
408
442
|
if (data.operation === "furs-register-all-invoices") {
|
|
409
443
|
let all = await this.registerAllInvoices(data);
|
|
410
444
|
setTimeout(async () => {
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
445
|
+
try {
|
|
446
|
+
await this.withNewMongo(async (mongo) => {
|
|
447
|
+
await this.razknjiziRacune(data, mongo);
|
|
448
|
+
});
|
|
449
|
+
}
|
|
450
|
+
catch (err) {
|
|
451
|
+
console.error('delayed razknjiziRacune failed', err);
|
|
452
|
+
}
|
|
414
453
|
}, 4000);
|
|
415
454
|
return all;
|
|
416
455
|
}
|
|
@@ -465,9 +504,14 @@ export class KlikvetLogicWorker extends Worker {
|
|
|
465
504
|
assert(data.tenant, "must specify tenant");
|
|
466
505
|
await this.razknjiziDobavnico(data._id, data.tenant);
|
|
467
506
|
setImmediate(async () => {
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
507
|
+
try {
|
|
508
|
+
await this.withNewMongo(async (mongo) => {
|
|
509
|
+
await this.razknjiziDobavnice(data, mongo);
|
|
510
|
+
});
|
|
511
|
+
}
|
|
512
|
+
catch (err) {
|
|
513
|
+
console.error('delayed razknjiziDobavnice failed', err);
|
|
514
|
+
}
|
|
471
515
|
});
|
|
472
516
|
return { ok: true };
|
|
473
517
|
}
|
|
@@ -477,9 +521,14 @@ export class KlikvetLogicWorker extends Worker {
|
|
|
477
521
|
assert(data.tenant, "must specify tenant");
|
|
478
522
|
await this.razknjiziBlagovnico(data._id, data.tenant);
|
|
479
523
|
setImmediate(async () => {
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
524
|
+
try {
|
|
525
|
+
await this.withNewMongo(async (mongo) => {
|
|
526
|
+
await this.razknjiziBlagovnice(data, mongo);
|
|
527
|
+
});
|
|
528
|
+
}
|
|
529
|
+
catch (err) {
|
|
530
|
+
console.error('delayed razknjiziBlagovnice failed', err);
|
|
531
|
+
}
|
|
483
532
|
});
|
|
484
533
|
return { ok: true };
|
|
485
534
|
}
|
|
@@ -733,28 +782,44 @@ export class KlikvetLogicWorker extends Worker {
|
|
|
733
782
|
return await this.zdruziPaciente(data);
|
|
734
783
|
}
|
|
735
784
|
;
|
|
785
|
+
if (data.operation === "pmz-update") {
|
|
786
|
+
assert(data.tenant, "must specify tenant");
|
|
787
|
+
assert(data.year, "must specify year");
|
|
788
|
+
return await pmzUpdateAllForYear({ tenant: data.tenant, year: parseInt((_d = data.year) === null || _d === void 0 ? void 0 : _d.toString()), writeToDb: true });
|
|
789
|
+
}
|
|
790
|
+
;
|
|
736
791
|
assert(false, 'unsupported operation ' + data.operation);
|
|
737
792
|
}
|
|
738
793
|
/** PRIVATE */
|
|
739
|
-
async dbNastavitve(tenant) {
|
|
740
|
-
this.mongo
|
|
741
|
-
|
|
794
|
+
async dbNastavitve(tenant, mongo) {
|
|
795
|
+
const db = mongo !== null && mongo !== void 0 ? mongo : this.mongo;
|
|
796
|
+
assert(db, 'missing Mongo instance');
|
|
797
|
+
db.setDb(tenant);
|
|
798
|
+
return (await db.findOne("nastavitve", {}));
|
|
742
799
|
}
|
|
743
|
-
async dbFindById(db, collection, _id) {
|
|
744
|
-
this.mongo
|
|
745
|
-
|
|
800
|
+
async dbFindById(db, collection, _id, mongo) {
|
|
801
|
+
const m = mongo !== null && mongo !== void 0 ? mongo : this.mongo;
|
|
802
|
+
assert(m, 'missing Mongo instance');
|
|
803
|
+
m.setDb(db);
|
|
804
|
+
return await m.findById(collection, _id);
|
|
746
805
|
}
|
|
747
|
-
async dbFind(db, collection, query, opts) {
|
|
748
|
-
this.mongo
|
|
749
|
-
|
|
806
|
+
async dbFind(db, collection, query, opts = {}, mongo) {
|
|
807
|
+
const m = mongo !== null && mongo !== void 0 ? mongo : this.mongo;
|
|
808
|
+
assert(m, 'missing Mongo instance');
|
|
809
|
+
m.setDb(db);
|
|
810
|
+
return await m.find(collection, query, opts);
|
|
750
811
|
}
|
|
751
|
-
async dbUpdateById(db, collection, _id, update) {
|
|
752
|
-
this.mongo
|
|
753
|
-
|
|
812
|
+
async dbUpdateById(db, collection, _id, update, mongo) {
|
|
813
|
+
const m = mongo !== null && mongo !== void 0 ? mongo : this.mongo;
|
|
814
|
+
assert(m, 'missing Mongo instance');
|
|
815
|
+
m.setDb(db);
|
|
816
|
+
return await m.updateOne(collection, { _id }, update);
|
|
754
817
|
}
|
|
755
|
-
async dbUpsert(db, collection, _id, update) {
|
|
756
|
-
this.mongo
|
|
757
|
-
|
|
818
|
+
async dbUpsert(db, collection, _id, update, mongo) {
|
|
819
|
+
const m = mongo !== null && mongo !== void 0 ? mongo : this.mongo;
|
|
820
|
+
assert(m, 'missing Mongo instance');
|
|
821
|
+
m.setDb(db);
|
|
822
|
+
return await m.upsert(collection, { _id }, update);
|
|
758
823
|
}
|
|
759
824
|
async posljiSmsNarocenemu(data, n, gsm) {
|
|
760
825
|
var _a, _b, _c, _d, _e, _f;
|
|
@@ -853,14 +918,15 @@ export class KlikvetLogicWorker extends Worker {
|
|
|
853
918
|
this.mongo.setAudit({ tenant: data.tenant, app: "klikvet/razknjiziRacun" });
|
|
854
919
|
await spremeniZalogoNaPodlagiRacuna(racun, nastavitve, this.mongo);
|
|
855
920
|
await this.pobrisiZalogoNaDan(data.tenant, [racun.datum]);
|
|
856
|
-
this.razknjizujem = false;
|
|
857
921
|
return { ok: true };
|
|
858
922
|
}
|
|
859
923
|
catch (err) {
|
|
860
924
|
console.error("razknjiziRacun", data.tenant, (err === null || err === void 0 ? void 0 : err.message) || err);
|
|
861
|
-
this.razknjizujem = false;
|
|
862
925
|
return { ok: false, error: (err === null || err === void 0 ? void 0 : err.message) || err };
|
|
863
926
|
}
|
|
927
|
+
finally {
|
|
928
|
+
this.razknjizujem = false;
|
|
929
|
+
}
|
|
864
930
|
}
|
|
865
931
|
async zdruziStranke(data) {
|
|
866
932
|
this.mongo.setDb(data.tenant);
|
|
@@ -872,30 +938,31 @@ export class KlikvetLogicWorker extends Worker {
|
|
|
872
938
|
this.mongo.setAudit({ tenant: data.tenant, app: "klikvet/zdruziPaciente" });
|
|
873
939
|
return await zdruziPaciente(data.iz, data.v, this.mongo);
|
|
874
940
|
}
|
|
875
|
-
async razknjiziRacune(data) {
|
|
941
|
+
async razknjiziRacune(data, mongo) {
|
|
876
942
|
console.log('razkljižni račune');
|
|
877
943
|
if (this.razknjizujem)
|
|
878
944
|
return { ok: false, error: "worker že razknjižuje" };
|
|
879
945
|
this.razknjizujem = true;
|
|
880
946
|
try {
|
|
881
|
-
this.mongo
|
|
882
|
-
|
|
947
|
+
const m = mongo !== null && mongo !== void 0 ? mongo : this.mongo;
|
|
948
|
+
assert(m, 'missing Mongo instance');
|
|
949
|
+
m.setDb(data.tenant);
|
|
950
|
+
m.setAudit({ tenant: data.tenant, app: "klikvet/razknjiziRacune" });
|
|
883
951
|
let dni = 6 * 30 * 24 * 60 * 60 * 1000; // 180 dni
|
|
884
|
-
console.log('dni', dni);
|
|
885
952
|
let od = new Date(new Date().valueOf() - dni);
|
|
886
|
-
let racuni = await
|
|
953
|
+
let racuni = await m.find("racuni", {
|
|
887
954
|
datum: { $gte: od },
|
|
888
|
-
razknjizen: { $
|
|
955
|
+
razknjizen: { $exist: false },
|
|
889
956
|
razknjizbaPreskocena: { $exists: false },
|
|
890
957
|
}, {});
|
|
891
|
-
let nastavitve = await this.dbNastavitve(data.tenant);
|
|
958
|
+
let nastavitve = await this.dbNastavitve(data.tenant, m);
|
|
892
959
|
let datumi = [];
|
|
893
960
|
for await (let racun of racuni || []) {
|
|
894
961
|
datumi.push(racun.datum);
|
|
895
|
-
await spremeniZalogoNaPodlagiRacuna(racun, nastavitve,
|
|
962
|
+
await spremeniZalogoNaPodlagiRacuna(racun, nastavitve, m);
|
|
896
963
|
console.log('z zamikom razknjižen račun št. ', racun.stevilka);
|
|
897
964
|
}
|
|
898
|
-
await this.pobrisiZalogoNaDan(data.tenant, datumi);
|
|
965
|
+
await this.pobrisiZalogoNaDan(data.tenant, datumi, m);
|
|
899
966
|
this.razknjizujem = false;
|
|
900
967
|
return { ok: true, racuni };
|
|
901
968
|
}
|
|
@@ -905,7 +972,7 @@ export class KlikvetLogicWorker extends Worker {
|
|
|
905
972
|
return { ok: false, error: (err === null || err === void 0 ? void 0 : err.message) || err, racuni: [] };
|
|
906
973
|
}
|
|
907
974
|
}
|
|
908
|
-
async pobrisiZalogoNaDan(db, datumi) {
|
|
975
|
+
async pobrisiZalogoNaDan(db, datumi, mongo) {
|
|
909
976
|
try {
|
|
910
977
|
if (!datumi)
|
|
911
978
|
return;
|
|
@@ -914,10 +981,12 @@ export class KlikvetLogicWorker extends Worker {
|
|
|
914
981
|
if (!datumi.length)
|
|
915
982
|
return;
|
|
916
983
|
let od = new Date(Math.min(...datumi.map(d => d.valueOf())) - 24 * 60 * 60 * 1000);
|
|
917
|
-
this.mongo
|
|
918
|
-
|
|
984
|
+
const m = mongo !== null && mongo !== void 0 ? mongo : this.mongo;
|
|
985
|
+
assert(m, 'missing Mongo instance');
|
|
986
|
+
m.setDb(db);
|
|
987
|
+
m.setAudit({ tenant: db, app: "klikvet/pobrisiZalogoNaDan" });
|
|
919
988
|
if (od.valueOf() > 0)
|
|
920
|
-
await
|
|
989
|
+
await m.hardDelete("zalogaNaDan", { datum: { $gte: od } });
|
|
921
990
|
else
|
|
922
991
|
console.log("pobrisiZalogoNaDan napačni datumi", datumi);
|
|
923
992
|
}
|
|
@@ -944,59 +1013,75 @@ export class KlikvetLogicWorker extends Worker {
|
|
|
944
1013
|
});
|
|
945
1014
|
return ret;
|
|
946
1015
|
}
|
|
947
|
-
async razknjiziBlagovnice(data) {
|
|
948
|
-
this.
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
1016
|
+
async razknjiziBlagovnice(data, mongo) {
|
|
1017
|
+
if (this.razknjizujem) {
|
|
1018
|
+
return { ok: false, vse: 0, razknjizene: 0, napake: ["Razknjiževanje že poteka."] };
|
|
1019
|
+
}
|
|
1020
|
+
const m = mongo !== null && mongo !== void 0 ? mongo : this.mongo;
|
|
1021
|
+
assert(m, 'missing Mongo instance');
|
|
1022
|
+
m.emitPublishEvents(false);
|
|
1023
|
+
m.useAuditing(false);
|
|
1024
|
+
m.setDb(data.tenant);
|
|
1025
|
+
m.setAudit({ tenant: data.tenant, app: "klikvet/razknjiziBlagovnice" });
|
|
952
1026
|
let od = new Date(new Date().valueOf() - 60 * 24 * 60 * 60 * 1000);
|
|
953
1027
|
// poišči tiste, ki bi morale že biti razknjižene, pa niso
|
|
954
1028
|
{
|
|
955
|
-
let od = new Date(new Date().valueOf() - 3 * 60 * 24 * 60 * 60 * 1000);
|
|
956
|
-
let vpisane = await this.dbFind(data.tenant, "blagovnice", {
|
|
957
|
-
|
|
958
|
-
|
|
1029
|
+
let od = new Date(new Date().valueOf() - 3 * 60 * 24 * 60 * 60 * 1000); // zadnji trije meseci
|
|
1030
|
+
let vpisane = await this.dbFind(data.tenant, "blagovnice", {
|
|
1031
|
+
datum: { $gte: od },
|
|
1032
|
+
razknjizena: { $exists: false },
|
|
1033
|
+
razknjizbaPreskocena: { $exists: false },
|
|
1034
|
+
}, { project: { _id: 1, status: 1, razknjizena: 1, razknjizbaPreskocena: 1 } }, m);
|
|
1035
|
+
let idjiVpisanih = vpisane.filter(b => !b.razknjizena && !b.razknjizbaPreskocena).map(b => b._id.toString());
|
|
1036
|
+
let zaPovrnit = await this.dbFind(data.tenant, "odprteBlagovnice", {
|
|
1037
|
+
_deleted: { $ne: "hack" },
|
|
1038
|
+
status: "zaključena",
|
|
1039
|
+
datum: { $gte: od },
|
|
1040
|
+
_id: { $in: idjiVpisanih }
|
|
1041
|
+
}, { project: { postavke: 0 } }, m);
|
|
959
1042
|
for await (let b of zaPovrnit) {
|
|
960
1043
|
console.log("vračam blagovnico v razkljižno", data.tenant, b);
|
|
961
|
-
await this.dbUpsert(data.tenant, "odprteBlagovnice", b._id, { razknjizena: undefined, _deleted: undefined, _vrnjenoVRazknjizbo: new Date() });
|
|
1044
|
+
await this.dbUpsert(data.tenant, "odprteBlagovnice", b._id, { razknjizena: undefined, _deleted: undefined, _vrnjenoVRazknjizbo: new Date() }, m);
|
|
962
1045
|
}
|
|
963
1046
|
}
|
|
964
|
-
let nerazknijzene = await this.dbFind(data.tenant, "odprteBlagovnice", { datum: { $gte: od }, status: "zaključena", razknjizena: { $exists: false } }, { sort: { datum: 1 } });
|
|
1047
|
+
let nerazknijzene = await this.dbFind(data.tenant, "odprteBlagovnice", { datum: { $gte: od }, status: "zaključena", razknjizena: { $exists: false }, razknjizbaPreskocena: { $exists: false } }, { sort: { datum: 1 } }, m);
|
|
965
1048
|
let vse = 0, razknjizene = 0;
|
|
966
1049
|
let napake = [];
|
|
967
|
-
for await (let
|
|
1050
|
+
for await (let blagovnica of nerazknijzene) {
|
|
968
1051
|
try {
|
|
969
1052
|
vse++;
|
|
970
|
-
await this.razknjiziBlagovnico(
|
|
1053
|
+
await this.razknjiziBlagovnico(blagovnica._id.toString(), data.tenant, m);
|
|
971
1054
|
razknjizene++;
|
|
972
1055
|
}
|
|
973
1056
|
catch (err) {
|
|
974
|
-
napake.push(err);
|
|
1057
|
+
napake.push(err instanceof Error ? err.message : String(err));
|
|
975
1058
|
}
|
|
976
1059
|
}
|
|
977
1060
|
return { ok: vse === razknjizene, vse, razknjizene, napake };
|
|
978
1061
|
}
|
|
979
|
-
async razknjiziDobavnice(data) {
|
|
980
|
-
this.mongo
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
1062
|
+
async razknjiziDobavnice(data, mongo) {
|
|
1063
|
+
const m = mongo !== null && mongo !== void 0 ? mongo : this.mongo;
|
|
1064
|
+
assert(m, 'missing Mongo instance');
|
|
1065
|
+
m.emitPublishEvents(false);
|
|
1066
|
+
m.useAuditing(false);
|
|
1067
|
+
m.setDb(data.tenant);
|
|
1068
|
+
m.setAudit({ tenant: data.tenant, app: "klikvet/razknjiziDobavnice" });
|
|
984
1069
|
let od = new Date(new Date().valueOf() - 60 * 24 * 60 * 60 * 1000);
|
|
985
1070
|
let nerazknijzene = await this.dbFind(data.tenant, "dobavnice", {
|
|
986
1071
|
datum: { $gte: od }, status: "izdana",
|
|
987
1072
|
razknjizena: { $not: { $type: "date" } },
|
|
988
1073
|
razknjizbaPreskocena: { $exists: false },
|
|
989
|
-
}, { sort: { datum: 1 } });
|
|
1074
|
+
}, { sort: { datum: 1 } }, m);
|
|
990
1075
|
let vse = 0, razknjizene = 0;
|
|
991
1076
|
let napake = [];
|
|
992
1077
|
for await (let blagovnica of nerazknijzene) {
|
|
993
1078
|
try {
|
|
994
1079
|
vse++;
|
|
995
|
-
await this.razknjiziDobavnico(blagovnica._id.toString(), data.tenant);
|
|
1080
|
+
await this.razknjiziDobavnico(blagovnica._id.toString(), data.tenant, m);
|
|
996
1081
|
razknjizene++;
|
|
997
1082
|
}
|
|
998
1083
|
catch (err) {
|
|
999
|
-
napake.push(err);
|
|
1084
|
+
napake.push(err instanceof Error ? err.message : String(err));
|
|
1000
1085
|
}
|
|
1001
1086
|
}
|
|
1002
1087
|
return { ok: vse === razknjizene, vse, razknjizene, napake };
|
|
@@ -1015,63 +1100,73 @@ export class KlikvetLogicWorker extends Worker {
|
|
|
1015
1100
|
// await logic.spremeniZalogoNaPodlagiBlagovnice(blagovnica, nastavitve, this.mongo);
|
|
1016
1101
|
// await pobrisiZalogoNaDan(tenant, [ blagovnica.datum ]);
|
|
1017
1102
|
// }
|
|
1018
|
-
async razknjiziBlagovnico(_id, tenant) {
|
|
1019
|
-
if (this.razknjizujem)
|
|
1020
|
-
|
|
1103
|
+
async razknjiziBlagovnico(_id, tenant, mongo) {
|
|
1104
|
+
if (this.razknjizujem) {
|
|
1105
|
+
throw new Error("worker že razknjižuje");
|
|
1106
|
+
}
|
|
1021
1107
|
this.razknjizujem = true;
|
|
1022
1108
|
try {
|
|
1023
|
-
this.mongo
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
return
|
|
1109
|
+
const m = mongo !== null && mongo !== void 0 ? mongo : this.mongo;
|
|
1110
|
+
assert(m, 'missing Mongo instance');
|
|
1111
|
+
m.emitPublishEvents(false);
|
|
1112
|
+
m.useAuditing(false);
|
|
1113
|
+
m.setDb(tenant);
|
|
1114
|
+
m.setAudit({ tenant, app: "klikvet/razknjiziBlagovnico" });
|
|
1115
|
+
return await razknjiziBlagovnico(_id, m);
|
|
1030
1116
|
}
|
|
1031
1117
|
catch (err) {
|
|
1032
|
-
|
|
1118
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
1119
|
+
console.error("razknjiziBlagovnico", tenant, message);
|
|
1120
|
+
throw err instanceof Error ? err : new Error(message);
|
|
1121
|
+
}
|
|
1122
|
+
finally {
|
|
1123
|
+
this.razknjizujem = false;
|
|
1033
1124
|
}
|
|
1034
|
-
this.razknjizujem = false;
|
|
1035
|
-
return undefined;
|
|
1036
1125
|
}
|
|
1037
|
-
async razknjiziDobavnico(_id, tenant) {
|
|
1038
|
-
if (this.razknjizujem)
|
|
1039
|
-
|
|
1126
|
+
async razknjiziDobavnico(_id, tenant, mongo) {
|
|
1127
|
+
if (this.razknjizujem) {
|
|
1128
|
+
throw new Error("worker že razknjižuje");
|
|
1129
|
+
}
|
|
1040
1130
|
this.razknjizujem = true;
|
|
1041
1131
|
try {
|
|
1042
|
-
this.mongo
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
return
|
|
1132
|
+
const m = mongo !== null && mongo !== void 0 ? mongo : this.mongo;
|
|
1133
|
+
assert(m, 'missing Mongo instance');
|
|
1134
|
+
m.setDb(tenant);
|
|
1135
|
+
m.setAudit({ tenant, app: "klikvet/razknjiziDobavnico" });
|
|
1136
|
+
return await razknjiziDobavnico(_id, m);
|
|
1047
1137
|
}
|
|
1048
1138
|
catch (err) {
|
|
1049
|
-
|
|
1139
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
1140
|
+
console.error("razknjiziDobavnico", tenant, message);
|
|
1141
|
+
throw err instanceof Error ? err : new Error(message);
|
|
1142
|
+
}
|
|
1143
|
+
finally {
|
|
1144
|
+
this.razknjizujem = false;
|
|
1050
1145
|
}
|
|
1051
|
-
this.razknjizujem = false;
|
|
1052
|
-
return undefined;
|
|
1053
1146
|
}
|
|
1054
|
-
async registerAllInvoices(data) {
|
|
1147
|
+
async registerAllInvoices(data, mongo) {
|
|
1055
1148
|
var _a;
|
|
1056
1149
|
if (this.razknjizujem)
|
|
1057
1150
|
return { nall: 0, nok: 0, napake: ["worker že razknjižuje"] };
|
|
1058
1151
|
this.razknjizujem = true;
|
|
1059
1152
|
try {
|
|
1060
1153
|
assert(data.tenant, "must specify tenant");
|
|
1154
|
+
const m = mongo !== null && mongo !== void 0 ? mongo : this.mongo;
|
|
1155
|
+
assert(m, 'missing Mongo instance');
|
|
1061
1156
|
let err = null;
|
|
1062
1157
|
let napake = new Set();
|
|
1063
1158
|
try {
|
|
1064
1159
|
err = "Podsistem db ni dosegljiv.";
|
|
1065
|
-
|
|
1066
|
-
|
|
1160
|
+
m.setDb(data.tenant);
|
|
1161
|
+
m.setAudit({ tenant: data.tenant, app: "klikvet/registerAllInvoices" });
|
|
1067
1162
|
let myquery = { eor: null, negotovinski: { $ne: true }, leto: { $gte: 2022 } };
|
|
1068
|
-
let env = data.env || ((_a = (await
|
|
1069
|
-
let all = await
|
|
1163
|
+
let env = data.env || ((_a = (await m.findOne("nastavitve", {}))) === null || _a === void 0 ? void 0 : _a.okolje) || "error";
|
|
1164
|
+
let all = await m.find("racuni", myquery, { project: { _id: 1 }, limit: 1000, });
|
|
1070
1165
|
err = "Napaka pri potrjevanju računov.";
|
|
1071
1166
|
let n = 0;
|
|
1072
1167
|
try {
|
|
1073
1168
|
for await (let r of all) {
|
|
1074
|
-
let res = await this.registerInvoice({ tenant: data.tenant, env, _id: r._id.toString() }, true);
|
|
1169
|
+
let res = await this.registerInvoice({ tenant: data.tenant, env, _id: r._id.toString() }, true, m);
|
|
1075
1170
|
if (res instanceof Error || typeof res === "string") {
|
|
1076
1171
|
console.error("cannot register invoice (1)", data.tenant, r._id, res);
|
|
1077
1172
|
}
|
|
@@ -1114,9 +1209,11 @@ export class KlikvetLogicWorker extends Worker {
|
|
|
1114
1209
|
let res = (await ((_b = this.client) === null || _b === void 0 ? void 0 : _b.request('durs', { operation: 'add cert', data: { cert: cert.certBase64, password: cert.certPass } }, { receiveTimeout: 4000 })));
|
|
1115
1210
|
return res;
|
|
1116
1211
|
}
|
|
1117
|
-
async registerInvoice(data, kasneje = false) {
|
|
1212
|
+
async registerInvoice(data, kasneje = false, mongo) {
|
|
1118
1213
|
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
1119
|
-
|
|
1214
|
+
const db = mongo !== null && mongo !== void 0 ? mongo : this.mongo;
|
|
1215
|
+
assert(db, 'missing Mongo instance');
|
|
1216
|
+
db.setAudit({ tenant: data.tenant, app: "klikvet/registerInvoice" });
|
|
1120
1217
|
assert(data._id, "must specify _id of racun");
|
|
1121
1218
|
assert(["error", "production", "test"].includes(data.env), "must specify env");
|
|
1122
1219
|
assert(data.tenant, "must specify tenant");
|
|
@@ -1124,18 +1221,18 @@ export class KlikvetLogicWorker extends Worker {
|
|
|
1124
1221
|
try {
|
|
1125
1222
|
// poišči račun
|
|
1126
1223
|
timeoutError = "Db podsistem se ni odzval.";
|
|
1127
|
-
let racun = await this.dbFindById(data.tenant, "racuni", data._id);
|
|
1224
|
+
let racun = await this.dbFindById(data.tenant, "racuni", data._id, db);
|
|
1128
1225
|
if (!racun)
|
|
1129
1226
|
return `registerInvoice for ${data.tenant}: ni računa ${data._id}`;
|
|
1130
1227
|
if (racun.negotovinski)
|
|
1131
1228
|
return "negotovinski račun ne bo fiskaliziran";
|
|
1132
|
-
let blagajna = await this.dbFindById(data.tenant, "blagajne", racun.blagajna_id);
|
|
1229
|
+
let blagajna = await this.dbFindById(data.tenant, "blagajne", racun.blagajna_id, db);
|
|
1133
1230
|
if (!blagajna)
|
|
1134
1231
|
throw new Error("cannot locate blagajna: " + racun.blagajna_id);
|
|
1135
|
-
let poslovalnica = await this.dbFindById(data.tenant, "poslovalnice", blagajna.poslovalnica_id);
|
|
1232
|
+
let poslovalnica = await this.dbFindById(data.tenant, "poslovalnice", blagajna.poslovalnica_id, db);
|
|
1136
1233
|
if (!blagajna)
|
|
1137
1234
|
throw new Error("cannot locate poslovalnica: " + racun.blagajna_id);
|
|
1138
|
-
let veterina = await this.dbFindById(data.tenant, "nastavitve", poslovalnica.veterina_id);
|
|
1235
|
+
let veterina = await this.dbFindById(data.tenant, "nastavitve", poslovalnica.veterina_id, db);
|
|
1139
1236
|
if (!veterina)
|
|
1140
1237
|
throw new Error("cannot locate poslovalnica: " + poslovalnica.veterina_id);
|
|
1141
1238
|
if (!racun.izdalDs)
|
|
@@ -1148,7 +1245,7 @@ export class KlikvetLogicWorker extends Worker {
|
|
|
1148
1245
|
datum: racun.datum,
|
|
1149
1246
|
stevilka: racun.stevilka,
|
|
1150
1247
|
}
|
|
1151
|
-
});
|
|
1248
|
+
}, db);
|
|
1152
1249
|
}
|
|
1153
1250
|
let TaxNumber = (veterina.dsCertifikata || veterina.davcnaStevilka);
|
|
1154
1251
|
TaxNumber = parseInt(((_a = TaxNumber.toString().match(/\d+/)) === null || _a === void 0 ? void 0 : _a.toString()) || "0");
|
|
@@ -1267,10 +1364,10 @@ export class KlikvetLogicWorker extends Worker {
|
|
|
1267
1364
|
};
|
|
1268
1365
|
// posodobi račun
|
|
1269
1366
|
timeoutError = "Napaka pri vpisu davčno potrjenega računa: Db podsistem se ne odziva več.";
|
|
1270
|
-
let updated = await this.dbUpdateById(data.tenant, "racuni", data._id, fursObj);
|
|
1367
|
+
let updated = await this.dbUpdateById(data.tenant, "racuni", data._id, fursObj, db);
|
|
1271
1368
|
try {
|
|
1272
1369
|
let dir = path.join('./racuni', new Date().getFullYear().toString(), data.tenant);
|
|
1273
|
-
!fs.existsSync(dir) &&
|
|
1370
|
+
!fs.existsSync(dir) && makeDirectorySync(dir);
|
|
1274
1371
|
fs.writeFileSync(path.join(dir, racun.stevilka), serialize.pack(clonedeep({ ...racun, ...updated }), false));
|
|
1275
1372
|
}
|
|
1276
1373
|
catch (err) {
|