js-klikvet-logic-worker 2.3.29 → 2.3.31
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 +32 -15
- package/dist/worker.d.mts.map +1 -1
- package/dist/worker.mjs +218 -127
- package/dist/worker.mjs.map +1 -1
- package/package.json +12 -12
- package/src/worker.mts +217 -128
- 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
|
}
|
|
@@ -736,31 +785,41 @@ export class KlikvetLogicWorker extends Worker {
|
|
|
736
785
|
if (data.operation === "pmz-update") {
|
|
737
786
|
assert(data.tenant, "must specify tenant");
|
|
738
787
|
assert(data.year, "must specify year");
|
|
739
|
-
return {
|
|
788
|
+
return await pmzUpdateAllForYear({ tenant: data.tenant, year: parseInt((_d = data.year) === null || _d === void 0 ? void 0 : _d.toString()), writeToDb: true });
|
|
740
789
|
}
|
|
741
790
|
;
|
|
742
791
|
assert(false, 'unsupported operation ' + data.operation);
|
|
743
792
|
}
|
|
744
793
|
/** PRIVATE */
|
|
745
|
-
async dbNastavitve(tenant) {
|
|
746
|
-
this.mongo
|
|
747
|
-
|
|
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", {}));
|
|
748
799
|
}
|
|
749
|
-
async dbFindById(db, collection, _id) {
|
|
750
|
-
this.mongo
|
|
751
|
-
|
|
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);
|
|
752
805
|
}
|
|
753
|
-
async dbFind(db, collection, query, opts) {
|
|
754
|
-
this.mongo
|
|
755
|
-
|
|
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);
|
|
756
811
|
}
|
|
757
|
-
async dbUpdateById(db, collection, _id, update) {
|
|
758
|
-
this.mongo
|
|
759
|
-
|
|
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);
|
|
760
817
|
}
|
|
761
|
-
async dbUpsert(db, collection, _id, update) {
|
|
762
|
-
this.mongo
|
|
763
|
-
|
|
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);
|
|
764
823
|
}
|
|
765
824
|
async posljiSmsNarocenemu(data, n, gsm) {
|
|
766
825
|
var _a, _b, _c, _d, _e, _f;
|
|
@@ -859,14 +918,15 @@ export class KlikvetLogicWorker extends Worker {
|
|
|
859
918
|
this.mongo.setAudit({ tenant: data.tenant, app: "klikvet/razknjiziRacun" });
|
|
860
919
|
await spremeniZalogoNaPodlagiRacuna(racun, nastavitve, this.mongo);
|
|
861
920
|
await this.pobrisiZalogoNaDan(data.tenant, [racun.datum]);
|
|
862
|
-
this.razknjizujem = false;
|
|
863
921
|
return { ok: true };
|
|
864
922
|
}
|
|
865
923
|
catch (err) {
|
|
866
924
|
console.error("razknjiziRacun", data.tenant, (err === null || err === void 0 ? void 0 : err.message) || err);
|
|
867
|
-
this.razknjizujem = false;
|
|
868
925
|
return { ok: false, error: (err === null || err === void 0 ? void 0 : err.message) || err };
|
|
869
926
|
}
|
|
927
|
+
finally {
|
|
928
|
+
this.razknjizujem = false;
|
|
929
|
+
}
|
|
870
930
|
}
|
|
871
931
|
async zdruziStranke(data) {
|
|
872
932
|
this.mongo.setDb(data.tenant);
|
|
@@ -878,30 +938,31 @@ export class KlikvetLogicWorker extends Worker {
|
|
|
878
938
|
this.mongo.setAudit({ tenant: data.tenant, app: "klikvet/zdruziPaciente" });
|
|
879
939
|
return await zdruziPaciente(data.iz, data.v, this.mongo);
|
|
880
940
|
}
|
|
881
|
-
async razknjiziRacune(data) {
|
|
941
|
+
async razknjiziRacune(data, mongo) {
|
|
882
942
|
console.log('razkljižni račune');
|
|
883
943
|
if (this.razknjizujem)
|
|
884
944
|
return { ok: false, error: "worker že razknjižuje" };
|
|
885
945
|
this.razknjizujem = true;
|
|
886
946
|
try {
|
|
887
|
-
this.mongo
|
|
888
|
-
|
|
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" });
|
|
889
951
|
let dni = 6 * 30 * 24 * 60 * 60 * 1000; // 180 dni
|
|
890
|
-
console.log('dni', dni);
|
|
891
952
|
let od = new Date(new Date().valueOf() - dni);
|
|
892
|
-
let racuni = await
|
|
953
|
+
let racuni = await m.find("racuni", {
|
|
893
954
|
datum: { $gte: od },
|
|
894
|
-
razknjizen: { $
|
|
955
|
+
razknjizen: { $exists: false },
|
|
895
956
|
razknjizbaPreskocena: { $exists: false },
|
|
896
957
|
}, {});
|
|
897
|
-
let nastavitve = await this.dbNastavitve(data.tenant);
|
|
958
|
+
let nastavitve = await this.dbNastavitve(data.tenant, m);
|
|
898
959
|
let datumi = [];
|
|
899
960
|
for await (let racun of racuni || []) {
|
|
900
961
|
datumi.push(racun.datum);
|
|
901
|
-
await spremeniZalogoNaPodlagiRacuna(racun, nastavitve,
|
|
962
|
+
await spremeniZalogoNaPodlagiRacuna(racun, nastavitve, m);
|
|
902
963
|
console.log('z zamikom razknjižen račun št. ', racun.stevilka);
|
|
903
964
|
}
|
|
904
|
-
await this.pobrisiZalogoNaDan(data.tenant, datumi);
|
|
965
|
+
await this.pobrisiZalogoNaDan(data.tenant, datumi, m);
|
|
905
966
|
this.razknjizujem = false;
|
|
906
967
|
return { ok: true, racuni };
|
|
907
968
|
}
|
|
@@ -911,7 +972,7 @@ export class KlikvetLogicWorker extends Worker {
|
|
|
911
972
|
return { ok: false, error: (err === null || err === void 0 ? void 0 : err.message) || err, racuni: [] };
|
|
912
973
|
}
|
|
913
974
|
}
|
|
914
|
-
async pobrisiZalogoNaDan(db, datumi) {
|
|
975
|
+
async pobrisiZalogoNaDan(db, datumi, mongo) {
|
|
915
976
|
try {
|
|
916
977
|
if (!datumi)
|
|
917
978
|
return;
|
|
@@ -920,10 +981,12 @@ export class KlikvetLogicWorker extends Worker {
|
|
|
920
981
|
if (!datumi.length)
|
|
921
982
|
return;
|
|
922
983
|
let od = new Date(Math.min(...datumi.map(d => d.valueOf())) - 24 * 60 * 60 * 1000);
|
|
923
|
-
this.mongo
|
|
924
|
-
|
|
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" });
|
|
925
988
|
if (od.valueOf() > 0)
|
|
926
|
-
await
|
|
989
|
+
await m.hardDelete("zalogaNaDan", { datum: { $gte: od } });
|
|
927
990
|
else
|
|
928
991
|
console.log("pobrisiZalogoNaDan napačni datumi", datumi);
|
|
929
992
|
}
|
|
@@ -950,59 +1013,75 @@ export class KlikvetLogicWorker extends Worker {
|
|
|
950
1013
|
});
|
|
951
1014
|
return ret;
|
|
952
1015
|
}
|
|
953
|
-
async razknjiziBlagovnice(data) {
|
|
954
|
-
this.
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
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" });
|
|
958
1026
|
let od = new Date(new Date().valueOf() - 60 * 24 * 60 * 60 * 1000);
|
|
959
1027
|
// poišči tiste, ki bi morale že biti razknjižene, pa niso
|
|
960
1028
|
{
|
|
961
|
-
let od = new Date(new Date().valueOf() - 3 * 60 * 24 * 60 * 60 * 1000);
|
|
962
|
-
let vpisane = await this.dbFind(data.tenant, "blagovnice", {
|
|
963
|
-
|
|
964
|
-
|
|
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);
|
|
965
1042
|
for await (let b of zaPovrnit) {
|
|
966
1043
|
console.log("vračam blagovnico v razkljižno", data.tenant, b);
|
|
967
|
-
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);
|
|
968
1045
|
}
|
|
969
1046
|
}
|
|
970
|
-
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);
|
|
971
1048
|
let vse = 0, razknjizene = 0;
|
|
972
1049
|
let napake = [];
|
|
973
|
-
for await (let
|
|
1050
|
+
for await (let blagovnica of nerazknijzene) {
|
|
974
1051
|
try {
|
|
975
1052
|
vse++;
|
|
976
|
-
await this.razknjiziBlagovnico(
|
|
1053
|
+
await this.razknjiziBlagovnico(blagovnica._id.toString(), data.tenant, m);
|
|
977
1054
|
razknjizene++;
|
|
978
1055
|
}
|
|
979
1056
|
catch (err) {
|
|
980
|
-
napake.push(err);
|
|
1057
|
+
napake.push(err instanceof Error ? err.message : String(err));
|
|
981
1058
|
}
|
|
982
1059
|
}
|
|
983
1060
|
return { ok: vse === razknjizene, vse, razknjizene, napake };
|
|
984
1061
|
}
|
|
985
|
-
async razknjiziDobavnice(data) {
|
|
986
|
-
this.mongo
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
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" });
|
|
990
1069
|
let od = new Date(new Date().valueOf() - 60 * 24 * 60 * 60 * 1000);
|
|
991
1070
|
let nerazknijzene = await this.dbFind(data.tenant, "dobavnice", {
|
|
992
1071
|
datum: { $gte: od }, status: "izdana",
|
|
993
1072
|
razknjizena: { $not: { $type: "date" } },
|
|
994
1073
|
razknjizbaPreskocena: { $exists: false },
|
|
995
|
-
}, { sort: { datum: 1 } });
|
|
1074
|
+
}, { sort: { datum: 1 } }, m);
|
|
996
1075
|
let vse = 0, razknjizene = 0;
|
|
997
1076
|
let napake = [];
|
|
998
1077
|
for await (let blagovnica of nerazknijzene) {
|
|
999
1078
|
try {
|
|
1000
1079
|
vse++;
|
|
1001
|
-
await this.razknjiziDobavnico(blagovnica._id.toString(), data.tenant);
|
|
1080
|
+
await this.razknjiziDobavnico(blagovnica._id.toString(), data.tenant, m);
|
|
1002
1081
|
razknjizene++;
|
|
1003
1082
|
}
|
|
1004
1083
|
catch (err) {
|
|
1005
|
-
napake.push(err);
|
|
1084
|
+
napake.push(err instanceof Error ? err.message : String(err));
|
|
1006
1085
|
}
|
|
1007
1086
|
}
|
|
1008
1087
|
return { ok: vse === razknjizene, vse, razknjizene, napake };
|
|
@@ -1021,63 +1100,73 @@ export class KlikvetLogicWorker extends Worker {
|
|
|
1021
1100
|
// await logic.spremeniZalogoNaPodlagiBlagovnice(blagovnica, nastavitve, this.mongo);
|
|
1022
1101
|
// await pobrisiZalogoNaDan(tenant, [ blagovnica.datum ]);
|
|
1023
1102
|
// }
|
|
1024
|
-
async razknjiziBlagovnico(_id, tenant) {
|
|
1025
|
-
if (this.razknjizujem)
|
|
1026
|
-
|
|
1103
|
+
async razknjiziBlagovnico(_id, tenant, mongo) {
|
|
1104
|
+
if (this.razknjizujem) {
|
|
1105
|
+
throw new Error("worker že razknjižuje");
|
|
1106
|
+
}
|
|
1027
1107
|
this.razknjizujem = true;
|
|
1028
1108
|
try {
|
|
1029
|
-
this.mongo
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
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);
|
|
1036
1116
|
}
|
|
1037
1117
|
catch (err) {
|
|
1038
|
-
|
|
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;
|
|
1039
1124
|
}
|
|
1040
|
-
this.razknjizujem = false;
|
|
1041
|
-
return undefined;
|
|
1042
1125
|
}
|
|
1043
|
-
async razknjiziDobavnico(_id, tenant) {
|
|
1044
|
-
if (this.razknjizujem)
|
|
1045
|
-
|
|
1126
|
+
async razknjiziDobavnico(_id, tenant, mongo) {
|
|
1127
|
+
if (this.razknjizujem) {
|
|
1128
|
+
throw new Error("worker že razknjižuje");
|
|
1129
|
+
}
|
|
1046
1130
|
this.razknjizujem = true;
|
|
1047
1131
|
try {
|
|
1048
|
-
this.mongo
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
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);
|
|
1053
1137
|
}
|
|
1054
1138
|
catch (err) {
|
|
1055
|
-
|
|
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;
|
|
1056
1145
|
}
|
|
1057
|
-
this.razknjizujem = false;
|
|
1058
|
-
return undefined;
|
|
1059
1146
|
}
|
|
1060
|
-
async registerAllInvoices(data) {
|
|
1147
|
+
async registerAllInvoices(data, mongo) {
|
|
1061
1148
|
var _a;
|
|
1062
1149
|
if (this.razknjizujem)
|
|
1063
1150
|
return { nall: 0, nok: 0, napake: ["worker že razknjižuje"] };
|
|
1064
1151
|
this.razknjizujem = true;
|
|
1065
1152
|
try {
|
|
1066
1153
|
assert(data.tenant, "must specify tenant");
|
|
1154
|
+
const m = mongo !== null && mongo !== void 0 ? mongo : this.mongo;
|
|
1155
|
+
assert(m, 'missing Mongo instance');
|
|
1067
1156
|
let err = null;
|
|
1068
1157
|
let napake = new Set();
|
|
1069
1158
|
try {
|
|
1070
1159
|
err = "Podsistem db ni dosegljiv.";
|
|
1071
|
-
|
|
1072
|
-
|
|
1160
|
+
m.setDb(data.tenant);
|
|
1161
|
+
m.setAudit({ tenant: data.tenant, app: "klikvet/registerAllInvoices" });
|
|
1073
1162
|
let myquery = { eor: null, negotovinski: { $ne: true }, leto: { $gte: 2022 } };
|
|
1074
|
-
let env = data.env || ((_a = (await
|
|
1075
|
-
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, });
|
|
1076
1165
|
err = "Napaka pri potrjevanju računov.";
|
|
1077
1166
|
let n = 0;
|
|
1078
1167
|
try {
|
|
1079
1168
|
for await (let r of all) {
|
|
1080
|
-
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);
|
|
1081
1170
|
if (res instanceof Error || typeof res === "string") {
|
|
1082
1171
|
console.error("cannot register invoice (1)", data.tenant, r._id, res);
|
|
1083
1172
|
}
|
|
@@ -1120,9 +1209,11 @@ export class KlikvetLogicWorker extends Worker {
|
|
|
1120
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 })));
|
|
1121
1210
|
return res;
|
|
1122
1211
|
}
|
|
1123
|
-
async registerInvoice(data, kasneje = false) {
|
|
1212
|
+
async registerInvoice(data, kasneje = false, mongo) {
|
|
1124
1213
|
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
1125
|
-
|
|
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" });
|
|
1126
1217
|
assert(data._id, "must specify _id of racun");
|
|
1127
1218
|
assert(["error", "production", "test"].includes(data.env), "must specify env");
|
|
1128
1219
|
assert(data.tenant, "must specify tenant");
|
|
@@ -1130,18 +1221,18 @@ export class KlikvetLogicWorker extends Worker {
|
|
|
1130
1221
|
try {
|
|
1131
1222
|
// poišči račun
|
|
1132
1223
|
timeoutError = "Db podsistem se ni odzval.";
|
|
1133
|
-
let racun = await this.dbFindById(data.tenant, "racuni", data._id);
|
|
1224
|
+
let racun = await this.dbFindById(data.tenant, "racuni", data._id, db);
|
|
1134
1225
|
if (!racun)
|
|
1135
1226
|
return `registerInvoice for ${data.tenant}: ni računa ${data._id}`;
|
|
1136
1227
|
if (racun.negotovinski)
|
|
1137
1228
|
return "negotovinski račun ne bo fiskaliziran";
|
|
1138
|
-
let blagajna = await this.dbFindById(data.tenant, "blagajne", racun.blagajna_id);
|
|
1229
|
+
let blagajna = await this.dbFindById(data.tenant, "blagajne", racun.blagajna_id, db);
|
|
1139
1230
|
if (!blagajna)
|
|
1140
1231
|
throw new Error("cannot locate blagajna: " + racun.blagajna_id);
|
|
1141
|
-
let poslovalnica = await this.dbFindById(data.tenant, "poslovalnice", blagajna.poslovalnica_id);
|
|
1232
|
+
let poslovalnica = await this.dbFindById(data.tenant, "poslovalnice", blagajna.poslovalnica_id, db);
|
|
1142
1233
|
if (!blagajna)
|
|
1143
1234
|
throw new Error("cannot locate poslovalnica: " + racun.blagajna_id);
|
|
1144
|
-
let veterina = await this.dbFindById(data.tenant, "nastavitve", poslovalnica.veterina_id);
|
|
1235
|
+
let veterina = await this.dbFindById(data.tenant, "nastavitve", poslovalnica.veterina_id, db);
|
|
1145
1236
|
if (!veterina)
|
|
1146
1237
|
throw new Error("cannot locate poslovalnica: " + poslovalnica.veterina_id);
|
|
1147
1238
|
if (!racun.izdalDs)
|
|
@@ -1154,7 +1245,7 @@ export class KlikvetLogicWorker extends Worker {
|
|
|
1154
1245
|
datum: racun.datum,
|
|
1155
1246
|
stevilka: racun.stevilka,
|
|
1156
1247
|
}
|
|
1157
|
-
});
|
|
1248
|
+
}, db);
|
|
1158
1249
|
}
|
|
1159
1250
|
let TaxNumber = (veterina.dsCertifikata || veterina.davcnaStevilka);
|
|
1160
1251
|
TaxNumber = parseInt(((_a = TaxNumber.toString().match(/\d+/)) === null || _a === void 0 ? void 0 : _a.toString()) || "0");
|
|
@@ -1273,10 +1364,10 @@ export class KlikvetLogicWorker extends Worker {
|
|
|
1273
1364
|
};
|
|
1274
1365
|
// posodobi račun
|
|
1275
1366
|
timeoutError = "Napaka pri vpisu davčno potrjenega računa: Db podsistem se ne odziva več.";
|
|
1276
|
-
let updated = await this.dbUpdateById(data.tenant, "racuni", data._id, fursObj);
|
|
1367
|
+
let updated = await this.dbUpdateById(data.tenant, "racuni", data._id, fursObj, db);
|
|
1277
1368
|
try {
|
|
1278
1369
|
let dir = path.join('./racuni', new Date().getFullYear().toString(), data.tenant);
|
|
1279
|
-
!fs.existsSync(dir) &&
|
|
1370
|
+
!fs.existsSync(dir) && makeDirectorySync(dir);
|
|
1280
1371
|
fs.writeFileSync(path.join(dir, racun.stevilka), serialize.pack(clonedeep({ ...racun, ...updated }), false));
|
|
1281
1372
|
}
|
|
1282
1373
|
catch (err) {
|