@autologix-engineering/shared 1.0.113 → 1.0.114
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/package.json +1 -1
- package/src/lib/data-transfer-objects/src/command/trip.action.dtos.d.ts +23 -0
- package/src/lib/data-transfer-objects/src/command/trip.action.dtos.js +85 -1
- package/src/lib/data-transfer-objects/src/command/trip.action.dtos.js.map +1 -1
- package/src/lib/data-transfer-objects/src/get.lite.form.calculations.dto.d.ts +1 -0
- package/src/lib/data-transfer-objects/src/get.lite.form.calculations.dto.js +5 -0
- package/src/lib/data-transfer-objects/src/get.lite.form.calculations.dto.js.map +1 -1
- package/src/lib/data-transfer-objects/src/index.d.ts +2 -0
- package/src/lib/data-transfer-objects/src/index.js +2 -0
- package/src/lib/data-transfer-objects/src/index.js.map +1 -1
- package/src/lib/data-transfer-objects/src/query/get.place.dto.d.ts +1 -0
- package/src/lib/data-transfer-objects/src/query/get.place.dto.js +6 -1
- package/src/lib/data-transfer-objects/src/query/get.place.dto.js.map +1 -1
- package/src/lib/data-transfer-objects/src/update.lite.trip.duty.data.dto.d.ts +1 -0
- package/src/lib/data-transfer-objects/src/update.lite.trip.duty.data.dto.js +5 -0
- package/src/lib/data-transfer-objects/src/update.lite.trip.duty.data.dto.js.map +1 -1
- package/src/lib/data-transfer-objects/src/update.trip.auth.config.dto.d.ts +10 -0
- package/src/lib/data-transfer-objects/src/update.trip.auth.config.dto.js +40 -0
- package/src/lib/data-transfer-objects/src/update.trip.auth.config.dto.js.map +1 -0
- package/src/lib/enums/src/command.type.enum.d.ts +2 -1
- package/src/lib/enums/src/command.type.enum.js +1 -0
- package/src/lib/enums/src/command.type.enum.js.map +1 -1
- package/src/lib/enums/src/index.d.ts +1 -0
- package/src/lib/enums/src/index.js +1 -0
- package/src/lib/enums/src/index.js.map +1 -1
- package/src/lib/enums/src/trip.auth.type.enum.d.ts +6 -0
- package/src/lib/enums/src/trip.auth.type.enum.js +8 -0
- package/src/lib/enums/src/trip.auth.type.enum.js.map +1 -0
- package/src/lib/models/src/additional.charges.model.d.ts +4 -1
- package/src/lib/models/src/additional.charges.model.js +1 -0
- package/src/lib/models/src/additional.charges.model.js.map +1 -1
- package/src/lib/models/src/business.context.owner.model.d.ts +4 -2
- package/src/lib/models/src/business.context.owner.model.js +1 -0
- package/src/lib/models/src/business.context.owner.model.js.map +1 -1
- package/src/lib/models/src/client.configuration.model.d.ts +4 -1
- package/src/lib/models/src/client.configuration.model.js +1 -0
- package/src/lib/models/src/client.configuration.model.js.map +1 -1
- package/src/lib/models/src/client.persona.model.d.ts +7 -1
- package/src/lib/models/src/client.persona.model.js +2 -0
- package/src/lib/models/src/client.persona.model.js.map +1 -1
- package/src/lib/models/src/index.d.ts +1 -0
- package/src/lib/models/src/index.js +1 -0
- package/src/lib/models/src/index.js.map +1 -1
- package/src/lib/models/src/place.model.d.ts +6 -1
- package/src/lib/models/src/place.model.js +2 -0
- package/src/lib/models/src/place.model.js.map +1 -1
- package/src/lib/models/src/taxes.model.d.ts +4 -1
- package/src/lib/models/src/taxes.model.js +1 -0
- package/src/lib/models/src/taxes.model.js.map +1 -1
- package/src/lib/models/src/trip.auth.model.d.ts +17 -0
- package/src/lib/models/src/trip.auth.model.js +10 -0
- package/src/lib/models/src/trip.auth.model.js.map +1 -0
- package/src/lib/models/src/trip.model.d.ts +13 -1
- package/src/lib/models/src/trip.model.js +6 -0
- package/src/lib/models/src/trip.model.js.map +1 -1
- package/src/lib/routes/src/command.registry.routes.d.ts +1 -0
- package/src/lib/routes/src/command.registry.routes.js +1 -0
- package/src/lib/routes/src/command.registry.routes.js.map +1 -1
- package/src/lib/billing-conditions/src/bill.generator.d.ts +0 -15
- package/src/lib/billing-conditions/src/bill.generator.js +0 -210
- package/src/lib/billing-conditions/src/bill.generator.js.map +0 -1
- package/src/lib/billing-conditions/src/condition.builder.d.ts +0 -5
- package/src/lib/billing-conditions/src/condition.builder.js +0 -27
- package/src/lib/billing-conditions/src/condition.builder.js.map +0 -1
- package/src/lib/billing-conditions/src/condition.sorter.builder.d.ts +0 -5
- package/src/lib/billing-conditions/src/condition.sorter.builder.js +0 -18
- package/src/lib/billing-conditions/src/condition.sorter.builder.js.map +0 -1
- package/src/lib/billing-conditions/src/definitions/condition.sorter.d.ts +0 -4
- package/src/lib/billing-conditions/src/definitions/condition.sorter.js +0 -2
- package/src/lib/billing-conditions/src/definitions/condition.sorter.js.map +0 -1
- package/src/lib/billing-conditions/src/definitions/conditional.partial.d.ts +0 -9
- package/src/lib/billing-conditions/src/definitions/conditional.partial.js +0 -10
- package/src/lib/billing-conditions/src/definitions/conditional.partial.js.map +0 -1
- package/src/lib/billing-conditions/src/definitions/displacement.d.ts +0 -4
- package/src/lib/billing-conditions/src/definitions/displacement.js +0 -2
- package/src/lib/billing-conditions/src/definitions/displacement.js.map +0 -1
- package/src/lib/billing-conditions/src/definitions/index.d.ts +0 -5
- package/src/lib/billing-conditions/src/definitions/index.js +0 -6
- package/src/lib/billing-conditions/src/definitions/index.js.map +0 -1
- package/src/lib/billing-conditions/src/definitions/trip.location.d.ts +0 -5
- package/src/lib/billing-conditions/src/definitions/trip.location.js +0 -2
- package/src/lib/billing-conditions/src/definitions/trip.location.js.map +0 -1
- package/src/lib/billing-conditions/src/definitions/trip.trace.d.ts +0 -17
- package/src/lib/billing-conditions/src/definitions/trip.trace.js +0 -2
- package/src/lib/billing-conditions/src/definitions/trip.trace.js.map +0 -1
- package/src/lib/billing-conditions/src/implementation/categorical.range.condition.d.ts +0 -7
- package/src/lib/billing-conditions/src/implementation/categorical.range.condition.js +0 -28
- package/src/lib/billing-conditions/src/implementation/categorical.range.condition.js.map +0 -1
- package/src/lib/billing-conditions/src/implementation/index.d.ts +0 -9
- package/src/lib/billing-conditions/src/implementation/index.js +0 -10
- package/src/lib/billing-conditions/src/implementation/index.js.map +0 -1
- package/src/lib/billing-conditions/src/implementation/numerical.condition.d.ts +0 -7
- package/src/lib/billing-conditions/src/implementation/numerical.condition.js +0 -27
- package/src/lib/billing-conditions/src/implementation/numerical.condition.js.map +0 -1
- package/src/lib/billing-conditions/src/implementation/numerical.condition.sorter.d.ts +0 -5
- package/src/lib/billing-conditions/src/implementation/numerical.condition.sorter.js +0 -25
- package/src/lib/billing-conditions/src/implementation/numerical.condition.sorter.js.map +0 -1
- package/src/lib/billing-conditions/src/implementation/numerical.range.condition.d.ts +0 -7
- package/src/lib/billing-conditions/src/implementation/numerical.range.condition.js +0 -30
- package/src/lib/billing-conditions/src/implementation/numerical.range.condition.js.map +0 -1
- package/src/lib/billing-conditions/src/implementation/numerical.range.condition.sorter.d.ts +0 -5
- package/src/lib/billing-conditions/src/implementation/numerical.range.condition.sorter.js +0 -45
- package/src/lib/billing-conditions/src/implementation/numerical.range.condition.sorter.js.map +0 -1
- package/src/lib/billing-conditions/src/implementation/string.condition.d.ts +0 -7
- package/src/lib/billing-conditions/src/implementation/string.condition.js +0 -38
- package/src/lib/billing-conditions/src/implementation/string.condition.js.map +0 -1
- package/src/lib/billing-conditions/src/implementation/time.range.condition.d.ts +0 -7
- package/src/lib/billing-conditions/src/implementation/time.range.condition.js +0 -30
- package/src/lib/billing-conditions/src/implementation/time.range.condition.js.map +0 -1
- package/src/lib/billing-conditions/src/implementation/trip.distance.processor.d.ts +0 -15
- package/src/lib/billing-conditions/src/implementation/trip.distance.processor.js +0 -97
- package/src/lib/billing-conditions/src/implementation/trip.distance.processor.js.map +0 -1
- package/src/lib/billing-conditions/src/implementation/trip.time.processor.d.ts +0 -33
- package/src/lib/billing-conditions/src/implementation/trip.time.processor.js +0 -239
- package/src/lib/billing-conditions/src/implementation/trip.time.processor.js.map +0 -1
- package/src/lib/billing-conditions/src/index.d.ts +0 -6
- package/src/lib/billing-conditions/src/index.js +0 -7
- package/src/lib/billing-conditions/src/index.js.map +0 -1
- package/src/lib/billing-conditions/src/tariff.rule.processor.d.ts +0 -8
- package/src/lib/billing-conditions/src/tariff.rule.processor.js +0 -417
- package/src/lib/billing-conditions/src/tariff.rule.processor.js.map +0 -1
- package/src/lib/billing-conditions/src/transition.manager.d.ts +0 -11
- package/src/lib/billing-conditions/src/transition.manager.js +0 -74
- package/src/lib/billing-conditions/src/transition.manager.js.map +0 -1
- package/src/lib/billing-conditions/src/utilities/displacement.calculator.d.ts +0 -2
- package/src/lib/billing-conditions/src/utilities/displacement.calculator.js +0 -48
- package/src/lib/billing-conditions/src/utilities/displacement.calculator.js.map +0 -1
- package/src/lib/billing-conditions/src/utilities/index.d.ts +0 -5
- package/src/lib/billing-conditions/src/utilities/index.js +0 -6
- package/src/lib/billing-conditions/src/utilities/index.js.map +0 -1
- package/src/lib/billing-conditions/src/utilities/package.sorter.d.ts +0 -2
- package/src/lib/billing-conditions/src/utilities/package.sorter.js +0 -9
- package/src/lib/billing-conditions/src/utilities/package.sorter.js.map +0 -1
- package/src/lib/billing-conditions/src/utilities/time.transformers.identifier.d.ts +0 -17
- package/src/lib/billing-conditions/src/utilities/time.transformers.identifier.js +0 -39
- package/src/lib/billing-conditions/src/utilities/time.transformers.identifier.js.map +0 -1
- package/src/lib/billing-conditions/src/utilities/trace.locations.chronological.sort.d.ts +0 -2
- package/src/lib/billing-conditions/src/utilities/trace.locations.chronological.sort.js +0 -10
- package/src/lib/billing-conditions/src/utilities/trace.locations.chronological.sort.js.map +0 -1
- package/src/lib/billing-conditions/src/utilities/trace.sanitizer.d.ts +0 -14
- package/src/lib/billing-conditions/src/utilities/trace.sanitizer.js +0 -23
- package/src/lib/billing-conditions/src/utilities/trace.sanitizer.js.map +0 -1
|
@@ -1,417 +0,0 @@
|
|
|
1
|
-
import { timeFromDays } from './utilities/time.transformers.identifier';
|
|
2
|
-
import { TariffRuleField, ConditionalTariffField, ConditionField, ConditionPartialField, BillableField, ConditionalRuleApplicationField, BillLineItemField, } from '../../models/src/index';
|
|
3
|
-
import { ConditionSortBuilder } from './condition.sorter.builder';
|
|
4
|
-
import { UnitOfMeasure, TripBillingVariable, BillItemHead, } from '../../enums/src/index';
|
|
5
|
-
export class TariffRuleProcessor {
|
|
6
|
-
constructor(_tripProcessor) {
|
|
7
|
-
this._tripProcessor = _tripProcessor;
|
|
8
|
-
}
|
|
9
|
-
evaluate(_tariffRule) {
|
|
10
|
-
let _blItemArray = [];
|
|
11
|
-
const _billable = _tariffRule?.[TariffRuleField.Billable];
|
|
12
|
-
_tariffRule?.[TariffRuleField.Billable]?.[BillableField.UnitOfMeasure];
|
|
13
|
-
const _unit = _tariffRule?.[TariffRuleField.Billable]?.[BillableField.UnitOfMeasure];
|
|
14
|
-
const _freeUnits = _tariffRule?.[TariffRuleField.FreeUnits] || 0;
|
|
15
|
-
let _unitCost = _tariffRule?.[TariffRuleField.UnitCost];
|
|
16
|
-
if (_unitCost == null)
|
|
17
|
-
_unitCost = 1;
|
|
18
|
-
console.log({
|
|
19
|
-
_unit,
|
|
20
|
-
_freeUnits,
|
|
21
|
-
_unitCost,
|
|
22
|
-
});
|
|
23
|
-
const _sortedConditionals = _tariffRule?.[TariffRuleField.ConditionalTariffRules]
|
|
24
|
-
?.sort((_a, _b) => {
|
|
25
|
-
const _conditionalPartialA = _a?.[ConditionalTariffField.Condition]?.[ConditionField.ConditionalPartial], _conditionalPartialB = _b?.[ConditionalTariffField.Condition]?.[ConditionField.ConditionalPartial];
|
|
26
|
-
return ConditionSortBuilder.build(_conditionalPartialA).sort(_conditionalPartialA, _conditionalPartialB);
|
|
27
|
-
})
|
|
28
|
-
.reverse();
|
|
29
|
-
const _conditionalTripVariable = _sortedConditionals?.[0]?.[ConditionalTariffField.Condition]?.[ConditionField.ConditionalPartial]?.[ConditionPartialField.TripBillingVariable];
|
|
30
|
-
switch (_unit) {
|
|
31
|
-
case UnitOfMeasure.Km: {
|
|
32
|
-
console.log('Km');
|
|
33
|
-
console.log(_conditionalTripVariable);
|
|
34
|
-
const _totalUnits = Math.ceil(this._tripProcessor.totalDisplacement / 1000);
|
|
35
|
-
console.log(_totalUnits);
|
|
36
|
-
let _processedUnits = 0;
|
|
37
|
-
const _conditionalsApplied = [];
|
|
38
|
-
switch (_conditionalTripVariable) {
|
|
39
|
-
case TripBillingVariable.DistanceTravelled: {
|
|
40
|
-
for (const _conditional of _sortedConditionals) {
|
|
41
|
-
const _comparand = _conditional?.[ConditionalTariffField.Condition]?.[ConditionField.ConditionalPartial]?.[ConditionPartialField.ComparandNumber];
|
|
42
|
-
const _consumption = _totalUnits - _comparand - _processedUnits;
|
|
43
|
-
if (_consumption < 0) {
|
|
44
|
-
break;
|
|
45
|
-
}
|
|
46
|
-
const _unitCost = _conditional?.[ConditionalTariffField.UnitCost];
|
|
47
|
-
const _total = _unitCost * _consumption;
|
|
48
|
-
_processedUnits += _consumption;
|
|
49
|
-
_conditionalsApplied.push({
|
|
50
|
-
[ConditionalRuleApplicationField.Units]: _consumption,
|
|
51
|
-
[ConditionalRuleApplicationField.Billable]: {
|
|
52
|
-
[BillableField.BillableId]: _billable?.[BillableField.BillableId],
|
|
53
|
-
},
|
|
54
|
-
[ConditionalRuleApplicationField.Variable]: _conditionalTripVariable,
|
|
55
|
-
[ConditionalRuleApplicationField.AppliedUnitCost]: _unitCost,
|
|
56
|
-
[ConditionalRuleApplicationField.Amount]: _total,
|
|
57
|
-
[ConditionalRuleApplicationField.ConditionalTariff]: {
|
|
58
|
-
[ConditionalTariffField.ConditionalTariffId]: _conditional?.[ConditionalTariffField
|
|
59
|
-
.ConditionalTariffId],
|
|
60
|
-
},
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
break;
|
|
64
|
-
}
|
|
65
|
-
case TripBillingVariable.TotalTime: {
|
|
66
|
-
break;
|
|
67
|
-
}
|
|
68
|
-
case TripBillingVariable.TripTime: {
|
|
69
|
-
break;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
let _gkm = 0;
|
|
73
|
-
let _gkmAmout = 0;
|
|
74
|
-
let _billedGkm = 0;
|
|
75
|
-
if (this._tripProcessor.fixedKms > 0) {
|
|
76
|
-
_gkm = this._tripProcessor.fixedKms / 1000;
|
|
77
|
-
for (let i = _conditionalsApplied.length - 1; i >= 0; i--) {
|
|
78
|
-
let cndtn = _conditionalsApplied[i];
|
|
79
|
-
if (_gkm == 0) {
|
|
80
|
-
break;
|
|
81
|
-
}
|
|
82
|
-
else if (cndtn?.[ConditionalRuleApplicationField.Units] >
|
|
83
|
-
_gkm) {
|
|
84
|
-
_gkmAmout +=
|
|
85
|
-
_gkm *
|
|
86
|
-
cndtn?.[ConditionalRuleApplicationField
|
|
87
|
-
.AppliedUnitCost];
|
|
88
|
-
_billedGkm += _gkm;
|
|
89
|
-
_gkm = 0;
|
|
90
|
-
}
|
|
91
|
-
else {
|
|
92
|
-
_gkmAmout +=
|
|
93
|
-
cndtn?.[ConditionalRuleApplicationField.Amount];
|
|
94
|
-
_billedGkm +=
|
|
95
|
-
cndtn?.[ConditionalRuleApplicationField.Units];
|
|
96
|
-
_gkm =
|
|
97
|
-
_gkm -
|
|
98
|
-
cndtn?.[ConditionalRuleApplicationField.Units];
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
if (_gkm - _freeUnits > 0) {
|
|
103
|
-
_gkmAmout += (_gkm - _freeUnits) * _unitCost;
|
|
104
|
-
_billedGkm += _gkm - _freeUnits;
|
|
105
|
-
_processedUnits += _gkm - _freeUnits;
|
|
106
|
-
}
|
|
107
|
-
const _baseConsumption = _totalUnits - _processedUnits || 0;
|
|
108
|
-
console.log(_baseConsumption);
|
|
109
|
-
const _chargeableConsumption = _baseConsumption > _freeUnits
|
|
110
|
-
? _baseConsumption - _freeUnits
|
|
111
|
-
: 0;
|
|
112
|
-
const _baseTotal = _chargeableConsumption * _unitCost;
|
|
113
|
-
console.log(_conditionalsApplied);
|
|
114
|
-
if (this._tripProcessor.fixedKms > 0 && _gkmAmout > 0) {
|
|
115
|
-
const _billLine = {
|
|
116
|
-
[BillLineItemField.BillItemHead]: `Fixed Km charges`,
|
|
117
|
-
[BillLineItemField.Billable]: {
|
|
118
|
-
[BillableField.BillableId]: _billable?.[BillableField.BillableId],
|
|
119
|
-
[BillableField.Name]: _billable?.[BillableField.Name],
|
|
120
|
-
},
|
|
121
|
-
[BillLineItemField.TariffRule]: {
|
|
122
|
-
[TariffRuleField.TariffRuleId]: _tariffRule?.[TariffRuleField.TariffRuleId],
|
|
123
|
-
},
|
|
124
|
-
[BillLineItemField.ConditionalRulesApplied]: [],
|
|
125
|
-
[BillLineItemField.Units]: _billedGkm,
|
|
126
|
-
[BillLineItemField.Amount]: _gkmAmout,
|
|
127
|
-
};
|
|
128
|
-
_blItemArray.push(_billLine);
|
|
129
|
-
}
|
|
130
|
-
let extraKmCharge = _baseTotal +
|
|
131
|
-
_conditionalsApplied.reduce((_acc, _curr) => _acc +
|
|
132
|
-
_curr?.[ConditionalRuleApplicationField.Amount], 0) -
|
|
133
|
-
_gkmAmout;
|
|
134
|
-
if (extraKmCharge > 0) {
|
|
135
|
-
const _billLineItem = {
|
|
136
|
-
[BillLineItemField.BillItemHead]: `Extra Km charges`,
|
|
137
|
-
[BillLineItemField.Billable]: {
|
|
138
|
-
[BillableField.BillableId]: _billable?.[BillableField.BillableId],
|
|
139
|
-
[BillableField.Name]: _billable?.[BillableField.Name],
|
|
140
|
-
},
|
|
141
|
-
[BillLineItemField.TariffRule]: {
|
|
142
|
-
[TariffRuleField.TariffRuleId]: _tariffRule?.[TariffRuleField.TariffRuleId],
|
|
143
|
-
},
|
|
144
|
-
[BillLineItemField.ConditionalRulesApplied]: _conditionalsApplied,
|
|
145
|
-
[BillLineItemField.Units]: _chargeableConsumption +
|
|
146
|
-
_processedUnits -
|
|
147
|
-
_billedGkm,
|
|
148
|
-
[BillLineItemField.Amount]: _baseTotal +
|
|
149
|
-
_conditionalsApplied.reduce((_acc, _curr) => _acc +
|
|
150
|
-
_curr?.[ConditionalRuleApplicationField.Amount], 0) -
|
|
151
|
-
_gkmAmout,
|
|
152
|
-
};
|
|
153
|
-
_blItemArray.push(_billLineItem);
|
|
154
|
-
}
|
|
155
|
-
return _blItemArray;
|
|
156
|
-
}
|
|
157
|
-
case UnitOfMeasure.Minute: {
|
|
158
|
-
console.log('Minute');
|
|
159
|
-
console.log(_conditionalTripVariable);
|
|
160
|
-
const _totalUnits = this._tripProcessor.timeUnitsBetween('MIN', null, null);
|
|
161
|
-
console.log(_totalUnits, 'totalUnits');
|
|
162
|
-
let _processedUnits = 0;
|
|
163
|
-
const _conditionalsApplied = [];
|
|
164
|
-
switch (_conditionalTripVariable) {
|
|
165
|
-
case TripBillingVariable.DistanceTravelled: {
|
|
166
|
-
break;
|
|
167
|
-
}
|
|
168
|
-
case TripBillingVariable.TotalTime: {
|
|
169
|
-
for (const _conditional of _sortedConditionals) {
|
|
170
|
-
const _comparand = _conditional?.[ConditionalTariffField.Condition]?.[ConditionField.ConditionalPartial]?.[ConditionPartialField.ComparandNumber];
|
|
171
|
-
const _consumption = _totalUnits - _comparand - _processedUnits;
|
|
172
|
-
console.log({
|
|
173
|
-
_consumption,
|
|
174
|
-
_comparand,
|
|
175
|
-
_processedUnits,
|
|
176
|
-
});
|
|
177
|
-
if (_consumption < 0) {
|
|
178
|
-
break;
|
|
179
|
-
}
|
|
180
|
-
const _unitCost = _conditional?.[ConditionalTariffField.UnitCost];
|
|
181
|
-
const _total = _unitCost * _consumption;
|
|
182
|
-
_processedUnits += _consumption;
|
|
183
|
-
console.log(_conditionalsApplied);
|
|
184
|
-
_conditionalsApplied.push({
|
|
185
|
-
[ConditionalRuleApplicationField.Units]: _consumption,
|
|
186
|
-
[ConditionalRuleApplicationField.Billable]: {
|
|
187
|
-
[BillableField.BillableId]: _billable?.[BillableField.BillableId],
|
|
188
|
-
[BillableField.Name]: _billable?.[BillableField.Name],
|
|
189
|
-
},
|
|
190
|
-
[ConditionalRuleApplicationField.Variable]: _conditionalTripVariable,
|
|
191
|
-
[ConditionalRuleApplicationField.AppliedUnitCost]: _unitCost,
|
|
192
|
-
[ConditionalRuleApplicationField.Amount]: _total,
|
|
193
|
-
[ConditionalRuleApplicationField.ConditionalTariff]: {
|
|
194
|
-
[ConditionalTariffField.ConditionalTariffId]: _conditional?.[ConditionalTariffField
|
|
195
|
-
.ConditionalTariffId],
|
|
196
|
-
},
|
|
197
|
-
});
|
|
198
|
-
}
|
|
199
|
-
break;
|
|
200
|
-
}
|
|
201
|
-
case TripBillingVariable.TripTime: {
|
|
202
|
-
for (const _conditional of _sortedConditionals) {
|
|
203
|
-
console.log(_conditional);
|
|
204
|
-
const _tripStart = this._tripProcessor?.timePoints[0];
|
|
205
|
-
console.log(_tripStart, '_tripStart');
|
|
206
|
-
_tripStart?.setUTCHours(0, 0, 0, 0);
|
|
207
|
-
const _startEpoch = _conditional?.[ConditionalTariffField.Condition]?.[ConditionField.ConditionalPartial]?.[ConditionPartialField
|
|
208
|
-
.ComparandNumericalRange]?.start;
|
|
209
|
-
const _endEpoch = _conditional?.[ConditionalTariffField.Condition]?.[ConditionField.ConditionalPartial]?.[ConditionPartialField
|
|
210
|
-
.ComparandNumericalRange]?.end;
|
|
211
|
-
const _start = new Date(_tripStart?.getTime() + _startEpoch);
|
|
212
|
-
const _end = new Date(_tripStart?.getTime() +
|
|
213
|
-
(_endEpoch > _startEpoch
|
|
214
|
-
? _endEpoch
|
|
215
|
-
: _endEpoch + timeFromDays(1)));
|
|
216
|
-
console.log(this._tripProcessor?.timePoints[0], 'start time');
|
|
217
|
-
console.log({ _start, _end });
|
|
218
|
-
console.log(this._tripProcessor.timeUnitsBetween('DAY', null, null), 'Days');
|
|
219
|
-
const _utilization = this._tripProcessor.timeUnitsBetween('MIN', _end, _start);
|
|
220
|
-
console.log(_utilization, 'utilization');
|
|
221
|
-
}
|
|
222
|
-
break;
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
const _baseConsumption = _totalUnits - _processedUnits || 0;
|
|
226
|
-
const _chargeableConsumption = _baseConsumption > _freeUnits
|
|
227
|
-
? _baseConsumption - _freeUnits
|
|
228
|
-
: 0;
|
|
229
|
-
const _baseTotal = _chargeableConsumption * _unitCost;
|
|
230
|
-
const _billLineItem = {
|
|
231
|
-
[BillLineItemField.BillItemHead]: `Extra Min charges`,
|
|
232
|
-
[BillLineItemField.Billable]: {
|
|
233
|
-
[BillableField.BillableId]: _billable?.[BillableField.BillableId],
|
|
234
|
-
[BillableField.Name]: _billable?.[BillableField.Name],
|
|
235
|
-
},
|
|
236
|
-
[BillLineItemField.TariffRule]: {
|
|
237
|
-
[TariffRuleField.TariffRuleId]: _tariffRule?.[TariffRuleField.TariffRuleId],
|
|
238
|
-
},
|
|
239
|
-
[BillLineItemField.ConditionalRulesApplied]: _conditionalsApplied,
|
|
240
|
-
[BillLineItemField.Amount]: _baseTotal +
|
|
241
|
-
_conditionalsApplied.reduce((_acc, _curr) => _acc +
|
|
242
|
-
_curr?.[ConditionalRuleApplicationField.Amount], 0),
|
|
243
|
-
};
|
|
244
|
-
console.log(_billLineItem);
|
|
245
|
-
_blItemArray.push(_billLineItem);
|
|
246
|
-
return _blItemArray;
|
|
247
|
-
}
|
|
248
|
-
case UnitOfMeasure.Hour: {
|
|
249
|
-
console.log('Hour');
|
|
250
|
-
console.log(_conditionalTripVariable);
|
|
251
|
-
const _totalUnits = this._tripProcessor.timeUnitsBetween('HR', null, null);
|
|
252
|
-
console.log(_totalUnits);
|
|
253
|
-
let _processedUnits = 0;
|
|
254
|
-
const _conditionalsApplied = [];
|
|
255
|
-
switch (_conditionalTripVariable) {
|
|
256
|
-
case TripBillingVariable.DistanceTravelled: {
|
|
257
|
-
break;
|
|
258
|
-
}
|
|
259
|
-
case TripBillingVariable.TotalTime: {
|
|
260
|
-
for (const _conditional of _sortedConditionals) {
|
|
261
|
-
const _comparand = _conditional?.[ConditionalTariffField.Condition]?.[ConditionField.ConditionalPartial]?.[ConditionPartialField.ComparandNumber];
|
|
262
|
-
const _consumption = _totalUnits - _comparand - _processedUnits;
|
|
263
|
-
if (_consumption < 0) {
|
|
264
|
-
break;
|
|
265
|
-
}
|
|
266
|
-
const _unitCost = _conditional?.[ConditionalTariffField.UnitCost];
|
|
267
|
-
const _total = _unitCost * _consumption;
|
|
268
|
-
_processedUnits += _consumption;
|
|
269
|
-
_conditionalsApplied.push({
|
|
270
|
-
[ConditionalRuleApplicationField.Units]: _consumption,
|
|
271
|
-
[ConditionalRuleApplicationField.Billable]: {
|
|
272
|
-
[BillableField.BillableId]: _billable?.[BillableField.BillableId],
|
|
273
|
-
[BillableField.Name]: _billable?.[BillableField.Name],
|
|
274
|
-
},
|
|
275
|
-
[ConditionalRuleApplicationField.Variable]: _conditionalTripVariable,
|
|
276
|
-
[ConditionalRuleApplicationField.AppliedUnitCost]: _unitCost,
|
|
277
|
-
[ConditionalRuleApplicationField.Amount]: _total,
|
|
278
|
-
[ConditionalRuleApplicationField.ConditionalTariff]: {
|
|
279
|
-
[ConditionalTariffField.ConditionalTariffId]: _conditional?.[ConditionalTariffField
|
|
280
|
-
.ConditionalTariffId],
|
|
281
|
-
},
|
|
282
|
-
});
|
|
283
|
-
}
|
|
284
|
-
break;
|
|
285
|
-
}
|
|
286
|
-
case TripBillingVariable.TripTime: {
|
|
287
|
-
break;
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
const _baseConsumption = _totalUnits - _processedUnits || 0;
|
|
291
|
-
const _chargeableConsumption = _baseConsumption > _freeUnits
|
|
292
|
-
? _baseConsumption - _freeUnits
|
|
293
|
-
: 0;
|
|
294
|
-
const _baseTotal = _chargeableConsumption * _unitCost;
|
|
295
|
-
console.log(_conditionalsApplied);
|
|
296
|
-
const _billLineItem = {
|
|
297
|
-
[BillLineItemField.BillItemHead]: `Extra Hour charges`,
|
|
298
|
-
[BillLineItemField.Billable]: {
|
|
299
|
-
[BillableField.BillableId]: _billable?.[BillableField.BillableId],
|
|
300
|
-
[BillableField.Name]: _billable?.[BillableField.Name],
|
|
301
|
-
},
|
|
302
|
-
[BillLineItemField.TariffRule]: {
|
|
303
|
-
[TariffRuleField.TariffRuleId]: _tariffRule?.[TariffRuleField.TariffRuleId],
|
|
304
|
-
},
|
|
305
|
-
[BillLineItemField.ConditionalRulesApplied]: _conditionalsApplied,
|
|
306
|
-
[BillLineItemField.Amount]: _baseTotal +
|
|
307
|
-
_conditionalsApplied.reduce((_acc, _curr) => _acc +
|
|
308
|
-
_curr?.[ConditionalRuleApplicationField.Amount], 0),
|
|
309
|
-
};
|
|
310
|
-
_blItemArray.push(_billLineItem);
|
|
311
|
-
return _blItemArray;
|
|
312
|
-
}
|
|
313
|
-
case UnitOfMeasure.Day: {
|
|
314
|
-
console.log('Day');
|
|
315
|
-
console.log(_conditionalTripVariable);
|
|
316
|
-
break;
|
|
317
|
-
}
|
|
318
|
-
case UnitOfMeasure.Count: {
|
|
319
|
-
console.log('Count');
|
|
320
|
-
console.log(_conditionalTripVariable);
|
|
321
|
-
break;
|
|
322
|
-
}
|
|
323
|
-
case UnitOfMeasure.Trip: {
|
|
324
|
-
console.log('Trip');
|
|
325
|
-
console.log(_conditionalTripVariable);
|
|
326
|
-
const _totalDistanceUnits = Math.ceil(this._tripProcessor.totalDisplacement / 1000);
|
|
327
|
-
console.log(_totalDistanceUnits);
|
|
328
|
-
let _conditionalsApplied = null;
|
|
329
|
-
switch (_conditionalTripVariable) {
|
|
330
|
-
case TripBillingVariable.DistanceTravelled: {
|
|
331
|
-
for (const _conditional of _sortedConditionals) {
|
|
332
|
-
const _comparand = _conditional?.[ConditionalTariffField.Condition]?.[ConditionField.ConditionalPartial]?.[ConditionPartialField.ComparandNumber];
|
|
333
|
-
const _consumption = _totalDistanceUnits - _comparand;
|
|
334
|
-
if (_consumption < 0) {
|
|
335
|
-
break;
|
|
336
|
-
}
|
|
337
|
-
const _unitCost = _conditional?.[ConditionalTariffField.UnitCost];
|
|
338
|
-
const _total = _unitCost;
|
|
339
|
-
_conditionalsApplied = {
|
|
340
|
-
[ConditionalRuleApplicationField.Units]: _consumption,
|
|
341
|
-
[ConditionalRuleApplicationField.Billable]: {
|
|
342
|
-
[BillableField.BillableId]: _billable?.[BillableField.BillableId],
|
|
343
|
-
},
|
|
344
|
-
[ConditionalRuleApplicationField.Variable]: _conditionalTripVariable,
|
|
345
|
-
[ConditionalRuleApplicationField.AppliedUnitCost]: _unitCost,
|
|
346
|
-
[ConditionalRuleApplicationField.Amount]: _total,
|
|
347
|
-
[ConditionalRuleApplicationField.ConditionalTariff]: {
|
|
348
|
-
[ConditionalTariffField.ConditionalTariffId]: _conditional?.[ConditionalTariffField
|
|
349
|
-
.ConditionalTariffId],
|
|
350
|
-
},
|
|
351
|
-
};
|
|
352
|
-
}
|
|
353
|
-
break;
|
|
354
|
-
}
|
|
355
|
-
case TripBillingVariable.TotalTime: {
|
|
356
|
-
const _totalUnits = this._tripProcessor.timeUnitsBetween('HR', null, null);
|
|
357
|
-
for (const _conditional of _sortedConditionals) {
|
|
358
|
-
const _comparand = _conditional?.[ConditionalTariffField.Condition]?.[ConditionField.ConditionalPartial]?.[ConditionPartialField.ComparandNumber];
|
|
359
|
-
const _consumption = _totalUnits - _comparand;
|
|
360
|
-
if (_consumption < 0) {
|
|
361
|
-
break;
|
|
362
|
-
}
|
|
363
|
-
const _unitCost = _conditional?.[ConditionalTariffField.UnitCost];
|
|
364
|
-
const _total = _unitCost;
|
|
365
|
-
_conditionalsApplied = {
|
|
366
|
-
[ConditionalRuleApplicationField.Units]: _consumption,
|
|
367
|
-
[ConditionalRuleApplicationField.Billable]: {
|
|
368
|
-
[BillableField.BillableId]: _billable?.[BillableField.BillableId],
|
|
369
|
-
[BillableField.Name]: _billable?.[BillableField.Name],
|
|
370
|
-
},
|
|
371
|
-
[ConditionalRuleApplicationField.Variable]: _conditionalTripVariable,
|
|
372
|
-
[ConditionalRuleApplicationField.AppliedUnitCost]: _unitCost,
|
|
373
|
-
[ConditionalRuleApplicationField.Amount]: _total,
|
|
374
|
-
[ConditionalRuleApplicationField.ConditionalTariff]: {
|
|
375
|
-
[ConditionalTariffField.ConditionalTariffId]: _conditional?.[ConditionalTariffField
|
|
376
|
-
.ConditionalTariffId],
|
|
377
|
-
},
|
|
378
|
-
};
|
|
379
|
-
}
|
|
380
|
-
break;
|
|
381
|
-
}
|
|
382
|
-
case TripBillingVariable.TripTime: {
|
|
383
|
-
break;
|
|
384
|
-
}
|
|
385
|
-
}
|
|
386
|
-
// const _baseConsumption =
|
|
387
|
-
// _totalDistanceUnits - _processedUnits || 0;
|
|
388
|
-
// console.log(_baseConsumption);
|
|
389
|
-
// const _chargeableConsumption =
|
|
390
|
-
// _baseConsumption > _freeUnits
|
|
391
|
-
// ? _baseConsumption - _freeUnits
|
|
392
|
-
// : 0;
|
|
393
|
-
const _baseTotal = _unitCost;
|
|
394
|
-
console.log(_conditionalsApplied);
|
|
395
|
-
const _billLineItem = {
|
|
396
|
-
[BillLineItemField.BillItemHead]: BillItemHead.RuleBasedTariff,
|
|
397
|
-
[BillLineItemField.Billable]: {
|
|
398
|
-
[BillableField.BillableId]: _billable?.[BillableField.BillableId],
|
|
399
|
-
[BillableField.Name]: _billable?.[BillableField.Name],
|
|
400
|
-
},
|
|
401
|
-
[BillLineItemField.TariffRule]: {
|
|
402
|
-
[TariffRuleField.TariffRuleId]: _tariffRule?.[TariffRuleField.TariffRuleId],
|
|
403
|
-
},
|
|
404
|
-
[BillLineItemField.ConditionalRulesApplied]: [
|
|
405
|
-
_conditionalsApplied,
|
|
406
|
-
],
|
|
407
|
-
[BillLineItemField.Amount]: _conditionalsApplied != null
|
|
408
|
-
? _conditionalsApplied?.[ConditionalRuleApplicationField.Amount]
|
|
409
|
-
: _baseTotal,
|
|
410
|
-
};
|
|
411
|
-
_blItemArray.push(_billLineItem);
|
|
412
|
-
return _blItemArray;
|
|
413
|
-
}
|
|
414
|
-
}
|
|
415
|
-
}
|
|
416
|
-
}
|
|
417
|
-
//# sourceMappingURL=tariff.rule.processor.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tariff.rule.processor.js","sourceRoot":"","sources":["../../../../../../../libs/shared/src/lib/billing-conditions/src/tariff.rule.processor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { IPackage, IRateCardTemplate, ITransitionRule } from '../../models/src/index';
|
|
2
|
-
import { TripBillingVariable } from '../../enums/src/index';
|
|
3
|
-
import { TripTimeProcessor } from './implementation';
|
|
4
|
-
export declare class TransitionManager {
|
|
5
|
-
private readonly _ratecard;
|
|
6
|
-
private readonly _tripProcessor;
|
|
7
|
-
private readonly _segregatedTransitionRules;
|
|
8
|
-
get transitionRules(): Map<TripBillingVariable, ITransitionRule[]>;
|
|
9
|
-
constructor(_ratecard: IRateCardTemplate, _tripProcessor: TripTimeProcessor);
|
|
10
|
-
getEffectivePackage(_preferredPackage: IPackage): IPackage;
|
|
11
|
-
}
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import { ConditionField, ConditionPartialField, PackageField, RateCardTemplateField, TransitionRuleField, } from '../../models/src/index';
|
|
2
|
-
import { ConditionBuilder } from './condition.builder';
|
|
3
|
-
import { ConditionSortBuilder } from './condition.sorter.builder';
|
|
4
|
-
import { TripBillingVariable } from '../../enums/src/index';
|
|
5
|
-
import { sortPackageByBaseCost } from './utilities';
|
|
6
|
-
export class TransitionManager {
|
|
7
|
-
get transitionRules() {
|
|
8
|
-
return this._segregatedTransitionRules;
|
|
9
|
-
}
|
|
10
|
-
constructor(_ratecard, _tripProcessor) {
|
|
11
|
-
this._ratecard = _ratecard;
|
|
12
|
-
this._tripProcessor = _tripProcessor;
|
|
13
|
-
// 3. Get Transition Rules
|
|
14
|
-
let rules = this._ratecard == null
|
|
15
|
-
? []
|
|
16
|
-
: this._ratecard?.[RateCardTemplateField.TransitionRules];
|
|
17
|
-
this._segregatedTransitionRules =
|
|
18
|
-
rules.reduce((_map, _rule) => {
|
|
19
|
-
const _conditionalPartial = _rule?.[TransitionRuleField.Condition]?.[ConditionField.ConditionalPartial];
|
|
20
|
-
const _billingVariable = _conditionalPartial?.[ConditionPartialField.TripBillingVariable];
|
|
21
|
-
if (_billingVariable && _map.has(_billingVariable)) {
|
|
22
|
-
const _existing = _map.get(_billingVariable);
|
|
23
|
-
if (_existing) {
|
|
24
|
-
const _newMap = new Map(Array.from(_map)).set(_billingVariable, [..._existing, _rule]
|
|
25
|
-
.sort((_a, _b) => ConditionSortBuilder.build(_conditionalPartial).sort(_a?.[TransitionRuleField.Condition]?.[ConditionField
|
|
26
|
-
.ConditionalPartial], _b?.[TransitionRuleField.Condition]?.[ConditionField
|
|
27
|
-
.ConditionalPartial]))
|
|
28
|
-
.reverse());
|
|
29
|
-
return _newMap;
|
|
30
|
-
}
|
|
31
|
-
return _map;
|
|
32
|
-
}
|
|
33
|
-
else {
|
|
34
|
-
_map.set(_billingVariable, [_rule]);
|
|
35
|
-
return _map;
|
|
36
|
-
}
|
|
37
|
-
}, new Map()) || new Map();
|
|
38
|
-
}
|
|
39
|
-
getEffectivePackage(_preferredPackage) {
|
|
40
|
-
const _preferredPackageId = _preferredPackage?.[PackageField.PackageId];
|
|
41
|
-
const _relevantTransitionRules = new Map(Array.from(this._segregatedTransitionRules).map(([_variable, _rules]) => {
|
|
42
|
-
return [
|
|
43
|
-
_variable,
|
|
44
|
-
_rules?.filter((_rule) => _rule?.[TransitionRuleField.BasePackageId] ===
|
|
45
|
-
_preferredPackageId) || [],
|
|
46
|
-
];
|
|
47
|
-
}));
|
|
48
|
-
let distanceInKms = Math.ceil(this._tripProcessor?.totalDisplacement / 1000);
|
|
49
|
-
const packageWaitCharge = _preferredPackage?.[PackageField.PackageTemplate]
|
|
50
|
-
?.waitTimeInDuration;
|
|
51
|
-
const _effectivePackages = Array.from(_relevantTransitionRules)
|
|
52
|
-
.map(([_variable, _rules]) => {
|
|
53
|
-
for (const _rule of _rules) {
|
|
54
|
-
const _conditionShape = _rule?.[TransitionRuleField.Condition]?.[ConditionField.ConditionalPartial];
|
|
55
|
-
const _condition = ConditionBuilder.build(_conditionShape);
|
|
56
|
-
if ((_conditionShape?.[ConditionPartialField.TripBillingVariable] === TripBillingVariable.DistanceTravelled &&
|
|
57
|
-
_condition.evaluate(distanceInKms)) ||
|
|
58
|
-
(_conditionShape?.[ConditionPartialField.TripBillingVariable] === TripBillingVariable.TotalTime &&
|
|
59
|
-
_condition.evaluate(this._tripProcessor?.timeUnitsBetween('HR', null, null)))) {
|
|
60
|
-
const ruleWaitCharge = _rule?.[TransitionRuleField.EffectivePackage]?.[PackageField.PackageTemplate]?.waitTimeInDuration;
|
|
61
|
-
if (packageWaitCharge === ruleWaitCharge) {
|
|
62
|
-
return _rule?.[TransitionRuleField.EffectivePackage];
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
else
|
|
66
|
-
continue;
|
|
67
|
-
}
|
|
68
|
-
})
|
|
69
|
-
.filter((_i) => Boolean(_i));
|
|
70
|
-
return (_effectivePackages.sort(sortPackageByBaseCost)?.[0] ||
|
|
71
|
-
_preferredPackage);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
//# sourceMappingURL=transition.manager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"transition.manager.js","sourceRoot":"","sources":["../../../../../../../libs/shared/src/lib/billing-conditions/src/transition.manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import axios from 'axios';
|
|
2
|
-
import { getDistanceBetweenTwoPoints } from '../../../utilities/src/index';
|
|
3
|
-
export const calculateDisplacementMatrix = async (_locations) => {
|
|
4
|
-
const loc = _locations.map(async (_point, index) => {
|
|
5
|
-
if (index < 1) {
|
|
6
|
-
// first point is 0 displacement
|
|
7
|
-
return {
|
|
8
|
-
timestamp: _point.timestamp,
|
|
9
|
-
displacement: 0,
|
|
10
|
-
};
|
|
11
|
-
}
|
|
12
|
-
else {
|
|
13
|
-
const _currentCoordinates = _point.location.coordinates;
|
|
14
|
-
const _previousCoordinates = _locations[index - 1].location.coordinates;
|
|
15
|
-
let distance = getDistanceBetweenTwoPoints(_currentCoordinates, _previousCoordinates);
|
|
16
|
-
if (distance > 500) {
|
|
17
|
-
try {
|
|
18
|
-
const json = {
|
|
19
|
-
locations: [
|
|
20
|
-
{
|
|
21
|
-
lat: _previousCoordinates[1],
|
|
22
|
-
lon: _previousCoordinates[0],
|
|
23
|
-
},
|
|
24
|
-
{
|
|
25
|
-
lat: _currentCoordinates[1],
|
|
26
|
-
lon: _currentCoordinates[0],
|
|
27
|
-
},
|
|
28
|
-
],
|
|
29
|
-
costing: 'auto',
|
|
30
|
-
};
|
|
31
|
-
const response = await axios.get(`http://localhost:8002/optimized_route?json=${JSON.stringify(json)}`);
|
|
32
|
-
const dist = response.data.trip.summary.length;
|
|
33
|
-
console.log(JSON.stringify(dist));
|
|
34
|
-
distance = dist * 1000;
|
|
35
|
-
}
|
|
36
|
-
catch (e) {
|
|
37
|
-
console.log(e);
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
return {
|
|
41
|
-
timestamp: _point.timestamp,
|
|
42
|
-
displacement: distance,
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
});
|
|
46
|
-
return await Promise.all(loc);
|
|
47
|
-
};
|
|
48
|
-
//# sourceMappingURL=displacement.calculator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"displacement.calculator.js","sourceRoot":"","sources":["../../../../../../../../libs/shared/src/lib/billing-conditions/src/utilities/displacement.calculator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAE3E,MAAM,CAAC,MAAM,2BAA2B,GAAG,KAAK,EAC/C,UAA2B,EACA,EAAE;IAC7B,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE;QAClD,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACf,gCAAgC;YAChC,OAAO;gBACN,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,YAAY,EAAE,CAAC;aACf,CAAC;QACH,CAAC;aAAM,CAAC;YACP,MAAM,mBAAmB,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC;YACxD,MAAM,oBAAoB,GACzB,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;YAC5C,IAAI,QAAQ,GAAG,2BAA2B,CACzC,mBAAmB,EACnB,oBAAoB,CACpB,CAAC;YACF,IAAI,QAAQ,GAAG,GAAG,EAAE,CAAC;gBACpB,IAAI,CAAC;oBACJ,MAAM,IAAI,GAAG;wBACZ,SAAS,EAAE;4BACV;gCACC,GAAG,EAAE,oBAAoB,CAAC,CAAC,CAAC;gCAC5B,GAAG,EAAE,oBAAoB,CAAC,CAAC,CAAC;6BAC5B;4BACD;gCACC,GAAG,EAAE,mBAAmB,CAAC,CAAC,CAAC;gCAC3B,GAAG,EAAE,mBAAmB,CAAC,CAAC,CAAC;6BAC3B;yBACD;wBACD,OAAO,EAAE,MAAM;qBACf,CAAC;oBACF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAC/B,8CAA8C,IAAI,CAAC,SAAS,CAC3D,IAAI,CACJ,EAAE,CAUH,CAAC;oBACF,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;oBAC/C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;oBAClC,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC;gBACxB,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACZ,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAChB,CAAC;YACF,CAAC;YACD,OAAO;gBACN,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,YAAY,EAAE,QAAQ;aACtB,CAAC;QACH,CAAC;IACF,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC/B,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../../libs/shared/src/lib/billing-conditions/src/utilities/index.ts"],"names":[],"mappings":"AAAA,cAAc,sCAAsC,CAAC;AACrD,cAAc,mBAAmB,CAAC;AAClC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kBAAkB,CAAC"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { PackageField, PackageTemplateField, } from '../../../models/src/index';
|
|
2
|
-
export const sortPackageByBaseCost = (a, b) => a?.[PackageField.PackageTemplate]?.[PackageTemplateField.BaseCost] >
|
|
3
|
-
b?.[PackageField.PackageTemplate]?.[PackageTemplateField.BaseCost]
|
|
4
|
-
? 1
|
|
5
|
-
: a?.[PackageField.PackageTemplate]?.[PackageTemplateField.BaseCost] <
|
|
6
|
-
b?.[PackageField.PackageTemplate]?.[PackageTemplateField.BaseCost]
|
|
7
|
-
? -1
|
|
8
|
-
: 0;
|
|
9
|
-
//# sourceMappingURL=package.sorter.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"package.sorter.js","sourceRoot":"","sources":["../../../../../../../../libs/shared/src/lib/billing-conditions/src/utilities/package.sorter.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,YAAY,EACZ,oBAAoB,GAEpB,MAAM,2BAA2B,CAAC;AAEnC,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAW,EAAE,CAAW,EAAE,EAAE,CACjE,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,CAAC,EAAE,CAAC,oBAAoB,CAAC,QAAQ,CAAC;IAClE,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,CAAC,EAAE,CAAC,oBAAoB,CAAC,QAAQ,CAAC;IACjE,CAAC,CAAC,CAAC;IACH,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,CAAC,EAAE,CAAC,oBAAoB,CAAC,QAAQ,CAAC;QAChE,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,CAAC,EAAE,CAAC,oBAAoB,CAAC,QAAQ,CAAC;QACpE,CAAC,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC,CAAC"}
|