@noatgnu/cupcake-salted-caramel 1.0.0
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/README.md
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# CupcakeSaltedCaramel
|
|
2
|
+
|
|
3
|
+
This project was generated using [Angular CLI](https://github.com/angular/angular-cli) version 20.1.0.
|
|
4
|
+
|
|
5
|
+
## Code scaffolding
|
|
6
|
+
|
|
7
|
+
Angular CLI includes powerful code scaffolding tools. To generate a new component, run:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
ng generate component component-name
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
For a complete list of available schematics (such as `components`, `directives`, or `pipes`), run:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
ng generate --help
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Building
|
|
20
|
+
|
|
21
|
+
To build the library, run:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
ng build cupcake-salted-caramel
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
This command will compile your project, and the build artifacts will be placed in the `dist/` directory.
|
|
28
|
+
|
|
29
|
+
### Publishing the Library
|
|
30
|
+
|
|
31
|
+
Once the project is built, you can publish your library by following these steps:
|
|
32
|
+
|
|
33
|
+
1. Navigate to the `dist` directory:
|
|
34
|
+
```bash
|
|
35
|
+
cd dist/cupcake-salted-caramel
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
2. Run the `npm publish` command to publish your library to the npm registry:
|
|
39
|
+
```bash
|
|
40
|
+
npm publish
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Running unit tests
|
|
44
|
+
|
|
45
|
+
To execute unit tests with the [Karma](https://karma-runner.github.io) test runner, use the following command:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
ng test
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Running end-to-end tests
|
|
52
|
+
|
|
53
|
+
For end-to-end (e2e) testing, run:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
ng e2e
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Angular CLI does not come with an end-to-end testing framework by default. You can choose one that suits your needs.
|
|
60
|
+
|
|
61
|
+
## Additional Resources
|
|
62
|
+
|
|
63
|
+
For more information on using the Angular CLI, including detailed command references, visit the [Angular CLI Overview and Command Reference](https://angular.dev/tools/cli) page.
|
|
@@ -0,0 +1,530 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { Component, Injectable } from '@angular/core';
|
|
3
|
+
import { BaseApiService } from '@cupcake/core';
|
|
4
|
+
|
|
5
|
+
class CupcakeSaltedCaramel {
|
|
6
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CupcakeSaltedCaramel, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
7
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.7", type: CupcakeSaltedCaramel, isStandalone: true, selector: "ccsc-cupcake-salted-caramel", ngImport: i0, template: `
|
|
8
|
+
<p>
|
|
9
|
+
cupcake-salted-caramel works!
|
|
10
|
+
</p>
|
|
11
|
+
`, isInline: true, styles: [""] });
|
|
12
|
+
}
|
|
13
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CupcakeSaltedCaramel, decorators: [{
|
|
14
|
+
type: Component,
|
|
15
|
+
args: [{ selector: 'ccsc-cupcake-salted-caramel', imports: [], template: `
|
|
16
|
+
<p>
|
|
17
|
+
cupcake-salted-caramel works!
|
|
18
|
+
</p>
|
|
19
|
+
` }]
|
|
20
|
+
}] });
|
|
21
|
+
|
|
22
|
+
var BillingUnit;
|
|
23
|
+
(function (BillingUnit) {
|
|
24
|
+
BillingUnit["HOURLY"] = "hourly";
|
|
25
|
+
BillingUnit["DAILY"] = "daily";
|
|
26
|
+
BillingUnit["USAGE"] = "usage";
|
|
27
|
+
BillingUnit["SAMPLE"] = "sample";
|
|
28
|
+
BillingUnit["FLAT"] = "flat";
|
|
29
|
+
BillingUnit["CUSTOM"] = "custom";
|
|
30
|
+
})(BillingUnit || (BillingUnit = {}));
|
|
31
|
+
var BillingStatus;
|
|
32
|
+
(function (BillingStatus) {
|
|
33
|
+
BillingStatus["PENDING"] = "pending";
|
|
34
|
+
BillingStatus["APPROVED"] = "approved";
|
|
35
|
+
BillingStatus["BILLED"] = "billed";
|
|
36
|
+
BillingStatus["PAID"] = "paid";
|
|
37
|
+
BillingStatus["DISPUTED"] = "disputed";
|
|
38
|
+
BillingStatus["CANCELLED"] = "cancelled";
|
|
39
|
+
})(BillingStatus || (BillingStatus = {}));
|
|
40
|
+
|
|
41
|
+
// Base types and enums
|
|
42
|
+
|
|
43
|
+
class ServiceTierService extends BaseApiService {
|
|
44
|
+
/**
|
|
45
|
+
* Get all service tiers with optional filtering
|
|
46
|
+
*/
|
|
47
|
+
getServiceTiers(params) {
|
|
48
|
+
const httpParams = this.buildHttpParams(params);
|
|
49
|
+
return this.get(`${this.apiUrl}/service-tiers/`, { params: httpParams });
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Get a single service tier by ID
|
|
53
|
+
*/
|
|
54
|
+
getServiceTier(id) {
|
|
55
|
+
return this.get(`${this.apiUrl}/service-tiers/${id}/`);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Create a new service tier
|
|
59
|
+
*/
|
|
60
|
+
createServiceTier(tier) {
|
|
61
|
+
return this.post(`${this.apiUrl}/service-tiers/`, tier);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Update an existing service tier
|
|
65
|
+
*/
|
|
66
|
+
updateServiceTier(id, tier) {
|
|
67
|
+
return this.put(`${this.apiUrl}/service-tiers/${id}/`, tier);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Partially update a service tier
|
|
71
|
+
*/
|
|
72
|
+
patchServiceTier(id, tier) {
|
|
73
|
+
return this.patch(`${this.apiUrl}/service-tiers/${id}/`, tier);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Delete a service tier
|
|
77
|
+
*/
|
|
78
|
+
deleteServiceTier(id) {
|
|
79
|
+
return this.delete(`${this.apiUrl}/service-tiers/${id}/`);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Calculate price for a given base amount using tier's modifiers
|
|
83
|
+
*/
|
|
84
|
+
calculatePrice(id, request) {
|
|
85
|
+
return this.post(`${this.apiUrl}/service-tiers/${id}/calculate_price/`, request);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Get active service tiers (Django custom action)
|
|
89
|
+
*/
|
|
90
|
+
getActiveTiers() {
|
|
91
|
+
return this.get(`${this.apiUrl}/service-tiers/active_tiers/`);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Search service tiers by name or description
|
|
95
|
+
*/
|
|
96
|
+
searchServiceTiers(query) {
|
|
97
|
+
return this.getServiceTiers({ search: query });
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Get active service tiers only
|
|
101
|
+
*/
|
|
102
|
+
getActiveServiceTiers() {
|
|
103
|
+
return this.getServiceTiers({ isActive: true });
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Get inactive service tiers
|
|
107
|
+
*/
|
|
108
|
+
getInactiveServiceTiers() {
|
|
109
|
+
return this.getServiceTiers({ isActive: false });
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Get service tiers by priority level
|
|
113
|
+
*/
|
|
114
|
+
getServiceTiersByPriority(priorityLevel) {
|
|
115
|
+
return this.getServiceTiers({ priorityLevel });
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Get service tiers ordered by priority (highest first)
|
|
119
|
+
*/
|
|
120
|
+
getServiceTiersByPriorityDesc() {
|
|
121
|
+
return this.getServiceTiers({ ordering: '-priority_level' });
|
|
122
|
+
}
|
|
123
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: ServiceTierService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
|
|
124
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: ServiceTierService, providedIn: 'root' });
|
|
125
|
+
}
|
|
126
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: ServiceTierService, decorators: [{
|
|
127
|
+
type: Injectable,
|
|
128
|
+
args: [{
|
|
129
|
+
providedIn: 'root'
|
|
130
|
+
}]
|
|
131
|
+
}] });
|
|
132
|
+
|
|
133
|
+
class BillableItemTypeService extends BaseApiService {
|
|
134
|
+
/**
|
|
135
|
+
* Get all billable item types with optional filtering
|
|
136
|
+
*/
|
|
137
|
+
getBillableItemTypes(params) {
|
|
138
|
+
const httpParams = this.buildHttpParams(params);
|
|
139
|
+
return this.get(`${this.apiUrl}/billable-item-types/`, { params: httpParams });
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Get a single billable item type by ID
|
|
143
|
+
*/
|
|
144
|
+
getBillableItemType(id) {
|
|
145
|
+
return this.get(`${this.apiUrl}/billable-item-types/${id}/`);
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Create a new billable item type
|
|
149
|
+
*/
|
|
150
|
+
createBillableItemType(itemType) {
|
|
151
|
+
return this.post(`${this.apiUrl}/billable-item-types/`, itemType);
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Update an existing billable item type
|
|
155
|
+
*/
|
|
156
|
+
updateBillableItemType(id, itemType) {
|
|
157
|
+
return this.put(`${this.apiUrl}/billable-item-types/${id}/`, itemType);
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Partially update a billable item type
|
|
161
|
+
*/
|
|
162
|
+
patchBillableItemType(id, itemType) {
|
|
163
|
+
return this.patch(`${this.apiUrl}/billable-item-types/${id}/`, itemType);
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Delete a billable item type
|
|
167
|
+
*/
|
|
168
|
+
deleteBillableItemType(id) {
|
|
169
|
+
return this.delete(`${this.apiUrl}/billable-item-types/${id}/`);
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Get billable item types grouped by content type (Django custom action)
|
|
173
|
+
*/
|
|
174
|
+
getByContentType(appLabel, model) {
|
|
175
|
+
const params = this.buildHttpParams({ appLabel, model });
|
|
176
|
+
return this.get(`${this.apiUrl}/billable-item-types/by_content_type/`, { params });
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Search billable item types by name or description
|
|
180
|
+
*/
|
|
181
|
+
searchBillableItemTypes(query) {
|
|
182
|
+
return this.getBillableItemTypes({ search: query });
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Get active billable item types only
|
|
186
|
+
*/
|
|
187
|
+
getActiveBillableItemTypes() {
|
|
188
|
+
return this.getBillableItemTypes({ isActive: true });
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Get inactive billable item types
|
|
192
|
+
*/
|
|
193
|
+
getInactiveBillableItemTypes() {
|
|
194
|
+
return this.getBillableItemTypes({ isActive: false });
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Get billable item types that require approval
|
|
198
|
+
*/
|
|
199
|
+
getApprovalRequiredItemTypes() {
|
|
200
|
+
return this.getBillableItemTypes({ requiresApproval: true });
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Get billable item types that don't require approval
|
|
204
|
+
*/
|
|
205
|
+
getAutoApprovedItemTypes() {
|
|
206
|
+
return this.getBillableItemTypes({ requiresApproval: false });
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Get billable item types by billing unit
|
|
210
|
+
*/
|
|
211
|
+
getBillableItemTypesByUnit(billingUnit) {
|
|
212
|
+
return this.getBillableItemTypes({ defaultBillingUnit: billingUnit });
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Get hourly billing item types
|
|
216
|
+
*/
|
|
217
|
+
getHourlyBillingItemTypes() {
|
|
218
|
+
return this.getBillableItemTypes({ defaultBillingUnit: BillingUnit.HOURLY });
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Get usage-based billing item types
|
|
222
|
+
*/
|
|
223
|
+
getUsageBillingItemTypes() {
|
|
224
|
+
return this.getBillableItemTypes({ defaultBillingUnit: BillingUnit.USAGE });
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Get flat rate billing item types
|
|
228
|
+
*/
|
|
229
|
+
getFlatRateBillingItemTypes() {
|
|
230
|
+
return this.getBillableItemTypes({ defaultBillingUnit: BillingUnit.FLAT });
|
|
231
|
+
}
|
|
232
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: BillableItemTypeService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
|
|
233
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: BillableItemTypeService, providedIn: 'root' });
|
|
234
|
+
}
|
|
235
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: BillableItemTypeService, decorators: [{
|
|
236
|
+
type: Injectable,
|
|
237
|
+
args: [{
|
|
238
|
+
providedIn: 'root'
|
|
239
|
+
}]
|
|
240
|
+
}] });
|
|
241
|
+
|
|
242
|
+
class ServicePriceService extends BaseApiService {
|
|
243
|
+
/**
|
|
244
|
+
* Get all service prices with optional filtering
|
|
245
|
+
*/
|
|
246
|
+
getServicePrices(params) {
|
|
247
|
+
const httpParams = this.buildHttpParams(params);
|
|
248
|
+
return this.get(`${this.apiUrl}/service-prices/`, { params: httpParams });
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Get a single service price by ID
|
|
252
|
+
*/
|
|
253
|
+
getServicePrice(id) {
|
|
254
|
+
return this.get(`${this.apiUrl}/service-prices/${id}/`);
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Create a new service price
|
|
258
|
+
*/
|
|
259
|
+
createServicePrice(price) {
|
|
260
|
+
return this.post(`${this.apiUrl}/service-prices/`, price);
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Update an existing service price
|
|
264
|
+
*/
|
|
265
|
+
updateServicePrice(id, price) {
|
|
266
|
+
return this.put(`${this.apiUrl}/service-prices/${id}/`, price);
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Partially update a service price
|
|
270
|
+
*/
|
|
271
|
+
patchServicePrice(id, price) {
|
|
272
|
+
return this.patch(`${this.apiUrl}/service-prices/${id}/`, price);
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Delete a service price
|
|
276
|
+
*/
|
|
277
|
+
deleteServicePrice(id) {
|
|
278
|
+
return this.delete(`${this.apiUrl}/service-prices/${id}/`);
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Calculate total cost for a given quantity
|
|
282
|
+
*/
|
|
283
|
+
calculateCost(id, request) {
|
|
284
|
+
return this.post(`${this.apiUrl}/service-prices/${id}/calculate_cost/`, request);
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Get current effective prices (Django custom action)
|
|
288
|
+
*/
|
|
289
|
+
getCurrentPrices() {
|
|
290
|
+
return this.get(`${this.apiUrl}/service-prices/current_prices/`);
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Search service prices by item or tier name
|
|
294
|
+
*/
|
|
295
|
+
searchServicePrices(query) {
|
|
296
|
+
return this.getServicePrices({ search: query });
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Get active service prices only
|
|
300
|
+
*/
|
|
301
|
+
getActiveServicePrices() {
|
|
302
|
+
return this.getServicePrices({ isActive: true });
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Get inactive service prices
|
|
306
|
+
*/
|
|
307
|
+
getInactiveServicePrices() {
|
|
308
|
+
return this.getServicePrices({ isActive: false });
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Get service prices by billing unit
|
|
312
|
+
*/
|
|
313
|
+
getServicePricesByUnit(billingUnit) {
|
|
314
|
+
return this.getServicePrices({ billingUnit });
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Get service prices by currency
|
|
318
|
+
*/
|
|
319
|
+
getServicePricesByCurrency(currency) {
|
|
320
|
+
return this.getServicePrices({ currency });
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Get service prices for a specific billable item type
|
|
324
|
+
*/
|
|
325
|
+
getServicePricesForItemType(itemTypeId) {
|
|
326
|
+
return this.getServicePrices({ billableItemType: itemTypeId });
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Get service prices for a specific service tier
|
|
330
|
+
*/
|
|
331
|
+
getServicePricesForTier(tierId) {
|
|
332
|
+
return this.getServicePrices({ serviceTier: tierId });
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Get hourly service prices
|
|
336
|
+
*/
|
|
337
|
+
getHourlyServicePrices() {
|
|
338
|
+
return this.getServicePrices({ billingUnit: BillingUnit.HOURLY });
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Get usage-based service prices
|
|
342
|
+
*/
|
|
343
|
+
getUsageServicePrices() {
|
|
344
|
+
return this.getServicePrices({ billingUnit: BillingUnit.USAGE });
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* Get flat rate service prices
|
|
348
|
+
*/
|
|
349
|
+
getFlatRateServicePrices() {
|
|
350
|
+
return this.getServicePrices({ billingUnit: BillingUnit.FLAT });
|
|
351
|
+
}
|
|
352
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: ServicePriceService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
|
|
353
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: ServicePriceService, providedIn: 'root' });
|
|
354
|
+
}
|
|
355
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: ServicePriceService, decorators: [{
|
|
356
|
+
type: Injectable,
|
|
357
|
+
args: [{
|
|
358
|
+
providedIn: 'root'
|
|
359
|
+
}]
|
|
360
|
+
}] });
|
|
361
|
+
|
|
362
|
+
class BillingRecordService extends BaseApiService {
|
|
363
|
+
/**
|
|
364
|
+
* Get all billing records with optional filtering
|
|
365
|
+
*/
|
|
366
|
+
getBillingRecords(params) {
|
|
367
|
+
const httpParams = this.buildHttpParams(params);
|
|
368
|
+
return this.get(`${this.apiUrl}/billing-records/`, { params: httpParams });
|
|
369
|
+
}
|
|
370
|
+
/**
|
|
371
|
+
* Get a single billing record by ID
|
|
372
|
+
*/
|
|
373
|
+
getBillingRecord(id) {
|
|
374
|
+
return this.get(`${this.apiUrl}/billing-records/${id}/`);
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* Create a new billing record
|
|
378
|
+
*/
|
|
379
|
+
createBillingRecord(record) {
|
|
380
|
+
return this.post(`${this.apiUrl}/billing-records/`, record);
|
|
381
|
+
}
|
|
382
|
+
/**
|
|
383
|
+
* Update an existing billing record
|
|
384
|
+
*/
|
|
385
|
+
updateBillingRecord(id, record) {
|
|
386
|
+
return this.put(`${this.apiUrl}/billing-records/${id}/`, record);
|
|
387
|
+
}
|
|
388
|
+
/**
|
|
389
|
+
* Partially update a billing record
|
|
390
|
+
*/
|
|
391
|
+
patchBillingRecord(id, record) {
|
|
392
|
+
return this.patch(`${this.apiUrl}/billing-records/${id}/`, record);
|
|
393
|
+
}
|
|
394
|
+
/**
|
|
395
|
+
* Delete a billing record
|
|
396
|
+
*/
|
|
397
|
+
deleteBillingRecord(id) {
|
|
398
|
+
return this.delete(`${this.apiUrl}/billing-records/${id}/`);
|
|
399
|
+
}
|
|
400
|
+
/**
|
|
401
|
+
* Approve a billing record
|
|
402
|
+
*/
|
|
403
|
+
approveBillingRecord(id, request) {
|
|
404
|
+
return this.post(`${this.apiUrl}/billing-records/${id}/approve/`, request);
|
|
405
|
+
}
|
|
406
|
+
/**
|
|
407
|
+
* Get billing summary statistics (Django custom action)
|
|
408
|
+
*/
|
|
409
|
+
getSummary(params) {
|
|
410
|
+
const httpParams = this.buildHttpParams(params);
|
|
411
|
+
return this.get(`${this.apiUrl}/billing-records/summary/`, { params: httpParams });
|
|
412
|
+
}
|
|
413
|
+
/**
|
|
414
|
+
* Get billing records pending approval (Django custom action)
|
|
415
|
+
*/
|
|
416
|
+
getPendingApproval() {
|
|
417
|
+
return this.get(`${this.apiUrl}/billing-records/pending_approval/`);
|
|
418
|
+
}
|
|
419
|
+
/**
|
|
420
|
+
* Get billing records grouped by cost center (Django custom action)
|
|
421
|
+
*/
|
|
422
|
+
getByCostCenter() {
|
|
423
|
+
return this.get(`${this.apiUrl}/billing-records/by_cost_center/`);
|
|
424
|
+
}
|
|
425
|
+
/**
|
|
426
|
+
* Get user billing records
|
|
427
|
+
*/
|
|
428
|
+
getUserBillingRecords(userId) {
|
|
429
|
+
return this.getBillingRecords({ user: userId });
|
|
430
|
+
}
|
|
431
|
+
/**
|
|
432
|
+
* Get my billing records (current user)
|
|
433
|
+
*/
|
|
434
|
+
getMyBillingRecords() {
|
|
435
|
+
return this.get(`${this.apiUrl}/billing-records/my_records/`);
|
|
436
|
+
}
|
|
437
|
+
/**
|
|
438
|
+
* Search billing records by description, notes, or cost center
|
|
439
|
+
*/
|
|
440
|
+
searchBillingRecords(query) {
|
|
441
|
+
return this.getBillingRecords({ search: query });
|
|
442
|
+
}
|
|
443
|
+
/**
|
|
444
|
+
* Get pending billing records
|
|
445
|
+
*/
|
|
446
|
+
getPendingBillingRecords() {
|
|
447
|
+
return this.getBillingRecords({ status: BillingStatus.PENDING });
|
|
448
|
+
}
|
|
449
|
+
/**
|
|
450
|
+
* Get approved billing records
|
|
451
|
+
*/
|
|
452
|
+
getApprovedBillingRecords() {
|
|
453
|
+
return this.getBillingRecords({ status: BillingStatus.APPROVED });
|
|
454
|
+
}
|
|
455
|
+
/**
|
|
456
|
+
* Get billed billing records
|
|
457
|
+
*/
|
|
458
|
+
getBilledBillingRecords() {
|
|
459
|
+
return this.getBillingRecords({ status: BillingStatus.BILLED });
|
|
460
|
+
}
|
|
461
|
+
/**
|
|
462
|
+
* Get paid billing records
|
|
463
|
+
*/
|
|
464
|
+
getPaidBillingRecords() {
|
|
465
|
+
return this.getBillingRecords({ status: BillingStatus.PAID });
|
|
466
|
+
}
|
|
467
|
+
/**
|
|
468
|
+
* Get disputed billing records
|
|
469
|
+
*/
|
|
470
|
+
getDisputedBillingRecords() {
|
|
471
|
+
return this.getBillingRecords({ status: BillingStatus.DISPUTED });
|
|
472
|
+
}
|
|
473
|
+
/**
|
|
474
|
+
* Get cancelled billing records
|
|
475
|
+
*/
|
|
476
|
+
getCancelledBillingRecords() {
|
|
477
|
+
return this.getBillingRecords({ status: BillingStatus.CANCELLED });
|
|
478
|
+
}
|
|
479
|
+
/**
|
|
480
|
+
* Get billing records by status
|
|
481
|
+
*/
|
|
482
|
+
getBillingRecordsByStatus(status) {
|
|
483
|
+
return this.getBillingRecords({ status });
|
|
484
|
+
}
|
|
485
|
+
/**
|
|
486
|
+
* Get billing records by currency
|
|
487
|
+
*/
|
|
488
|
+
getBillingRecordsByCurrency(currency) {
|
|
489
|
+
return this.getBillingRecords({ currency });
|
|
490
|
+
}
|
|
491
|
+
/**
|
|
492
|
+
* Get billing records by cost center
|
|
493
|
+
*/
|
|
494
|
+
getBillingRecordsByCostCenter(costCenter) {
|
|
495
|
+
return this.getBillingRecords({ costCenter });
|
|
496
|
+
}
|
|
497
|
+
/**
|
|
498
|
+
* Get billing records by service tier
|
|
499
|
+
*/
|
|
500
|
+
getBillingRecordsByServiceTier(tierId) {
|
|
501
|
+
return this.getBillingRecords({ serviceTier: tierId });
|
|
502
|
+
}
|
|
503
|
+
/**
|
|
504
|
+
* Get billing records for date range
|
|
505
|
+
*/
|
|
506
|
+
getBillingRecordsByDateRange(dateFrom, dateTo) {
|
|
507
|
+
return this.getBillingRecords({ dateFrom, dateTo });
|
|
508
|
+
}
|
|
509
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: BillingRecordService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
|
|
510
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: BillingRecordService, providedIn: 'root' });
|
|
511
|
+
}
|
|
512
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: BillingRecordService, decorators: [{
|
|
513
|
+
type: Injectable,
|
|
514
|
+
args: [{
|
|
515
|
+
providedIn: 'root'
|
|
516
|
+
}]
|
|
517
|
+
}] });
|
|
518
|
+
|
|
519
|
+
// Billing and financial management services
|
|
520
|
+
|
|
521
|
+
/*
|
|
522
|
+
* Public API Surface of cupcake-salted-caramel
|
|
523
|
+
*/
|
|
524
|
+
|
|
525
|
+
/**
|
|
526
|
+
* Generated bundle index. Do not edit.
|
|
527
|
+
*/
|
|
528
|
+
|
|
529
|
+
export { BillableItemTypeService, BillingRecordService, BillingStatus, BillingUnit, CupcakeSaltedCaramel, ServicePriceService, ServiceTierService };
|
|
530
|
+
//# sourceMappingURL=noatgnu-cupcake-salted-caramel.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"noatgnu-cupcake-salted-caramel.mjs","sources":["../../../projects/cupcake-salted-caramel/src/lib/cupcake-salted-caramel.ts","../../../projects/cupcake-salted-caramel/src/lib/models/enums.ts","../../../projects/cupcake-salted-caramel/src/lib/models/index.ts","../../../projects/cupcake-salted-caramel/src/lib/services/service-tier.ts","../../../projects/cupcake-salted-caramel/src/lib/services/billable-item-type.ts","../../../projects/cupcake-salted-caramel/src/lib/services/service-price.ts","../../../projects/cupcake-salted-caramel/src/lib/services/billing-record.ts","../../../projects/cupcake-salted-caramel/src/lib/services/index.ts","../../../projects/cupcake-salted-caramel/src/public-api.ts","../../../projects/cupcake-salted-caramel/src/noatgnu-cupcake-salted-caramel.ts"],"sourcesContent":["import { Component } from '@angular/core';\n\n@Component({\n selector: 'ccsc-cupcake-salted-caramel',\n imports: [],\n template: `\n <p>\n cupcake-salted-caramel works!\n </p>\n `,\n styles: ``\n})\nexport class CupcakeSaltedCaramel {\n\n}\n","export enum BillingUnit {\r\n HOURLY = 'hourly',\r\n DAILY = 'daily',\r\n USAGE = 'usage',\r\n SAMPLE = 'sample',\r\n FLAT = 'flat',\r\n CUSTOM = 'custom'\r\n}\r\n\r\nexport enum BillingStatus {\r\n PENDING = 'pending',\r\n APPROVED = 'approved',\r\n BILLED = 'billed',\r\n PAID = 'paid',\r\n DISPUTED = 'disputed',\r\n CANCELLED = 'cancelled'\r\n}","// Base types and enums\r\nexport * from './base';\r\nexport * from './enums';\r\n\r\n// Billing models\r\nexport * from './billing';","import { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { BaseApiService } from '@cupcake/core';\r\n\r\nimport {\r\n ServiceTier,\r\n ServiceTierCreateRequest,\r\n ServiceTierUpdateRequest,\r\n PaginatedResponse\r\n} from '../models';\r\n\r\nexport interface ServiceTierQueryParams {\r\n search?: string;\r\n isActive?: boolean;\r\n priorityLevel?: number;\r\n limit?: number;\r\n offset?: number;\r\n ordering?: string;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ServiceTierService extends BaseApiService {\r\n\r\n /**\r\n * Get all service tiers with optional filtering\r\n */\r\n getServiceTiers(params?: ServiceTierQueryParams): Observable<PaginatedResponse<ServiceTier>> {\r\n const httpParams = this.buildHttpParams(params);\r\n return this.get<PaginatedResponse<ServiceTier>>(`${this.apiUrl}/service-tiers/`, { params: httpParams });\r\n }\r\n\r\n /**\r\n * Get a single service tier by ID\r\n */\r\n getServiceTier(id: number): Observable<ServiceTier> {\r\n return this.get<ServiceTier>(`${this.apiUrl}/service-tiers/${id}/`);\r\n }\r\n\r\n /**\r\n * Create a new service tier\r\n */\r\n createServiceTier(tier: ServiceTierCreateRequest): Observable<ServiceTier> {\r\n return this.post<ServiceTier>(`${this.apiUrl}/service-tiers/`, tier);\r\n }\r\n\r\n /**\r\n * Update an existing service tier\r\n */\r\n updateServiceTier(id: number, tier: ServiceTierUpdateRequest): Observable<ServiceTier> {\r\n return this.put<ServiceTier>(`${this.apiUrl}/service-tiers/${id}/`, tier);\r\n }\r\n\r\n /**\r\n * Partially update a service tier\r\n */\r\n patchServiceTier(id: number, tier: Partial<ServiceTierUpdateRequest>): Observable<ServiceTier> {\r\n return this.patch<ServiceTier>(`${this.apiUrl}/service-tiers/${id}/`, tier);\r\n }\r\n\r\n /**\r\n * Delete a service tier\r\n */\r\n deleteServiceTier(id: number): Observable<void> {\r\n return this.delete<void>(`${this.apiUrl}/service-tiers/${id}/`);\r\n }\r\n\r\n /**\r\n * Calculate price for a given base amount using tier's modifiers\r\n */\r\n calculatePrice(id: number, request: { baseAmount: number }): Observable<{ \r\n calculatedPrice: number; \r\n baseAmount: number; \r\n multiplier: number; \r\n discount: number \r\n }> {\r\n return this.post<{ \r\n calculatedPrice: number; \r\n baseAmount: number; \r\n multiplier: number; \r\n discount: number \r\n }>(`${this.apiUrl}/service-tiers/${id}/calculate_price/`, request);\r\n }\r\n\r\n /**\r\n * Get active service tiers (Django custom action)\r\n */\r\n getActiveTiers(): Observable<ServiceTier[]> {\r\n return this.get<ServiceTier[]>(`${this.apiUrl}/service-tiers/active_tiers/`);\r\n }\r\n\r\n /**\r\n * Search service tiers by name or description\r\n */\r\n searchServiceTiers(query: string): Observable<PaginatedResponse<ServiceTier>> {\r\n return this.getServiceTiers({ search: query });\r\n }\r\n\r\n /**\r\n * Get active service tiers only\r\n */\r\n getActiveServiceTiers(): Observable<PaginatedResponse<ServiceTier>> {\r\n return this.getServiceTiers({ isActive: true });\r\n }\r\n\r\n /**\r\n * Get inactive service tiers\r\n */\r\n getInactiveServiceTiers(): Observable<PaginatedResponse<ServiceTier>> {\r\n return this.getServiceTiers({ isActive: false });\r\n }\r\n\r\n /**\r\n * Get service tiers by priority level\r\n */\r\n getServiceTiersByPriority(priorityLevel: number): Observable<PaginatedResponse<ServiceTier>> {\r\n return this.getServiceTiers({ priorityLevel });\r\n }\r\n\r\n /**\r\n * Get service tiers ordered by priority (highest first)\r\n */\r\n getServiceTiersByPriorityDesc(): Observable<PaginatedResponse<ServiceTier>> {\r\n return this.getServiceTiers({ ordering: '-priority_level' });\r\n }\r\n\r\n}","import { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { BaseApiService } from '@cupcake/core';\r\n\r\nimport {\r\n BillableItemType,\r\n BillableItemTypeCreateRequest,\r\n BillableItemTypeUpdateRequest,\r\n BillingUnit,\r\n PaginatedResponse\r\n} from '../models';\r\n\r\nexport interface BillableItemTypeQueryParams {\r\n search?: string;\r\n isActive?: boolean;\r\n requiresApproval?: boolean;\r\n defaultBillingUnit?: BillingUnit;\r\n limit?: number;\r\n offset?: number;\r\n ordering?: string;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class BillableItemTypeService extends BaseApiService {\r\n\r\n /**\r\n * Get all billable item types with optional filtering\r\n */\r\n getBillableItemTypes(params?: BillableItemTypeQueryParams): Observable<PaginatedResponse<BillableItemType>> {\r\n const httpParams = this.buildHttpParams(params);\r\n return this.get<PaginatedResponse<BillableItemType>>(`${this.apiUrl}/billable-item-types/`, { params: httpParams });\r\n }\r\n\r\n /**\r\n * Get a single billable item type by ID\r\n */\r\n getBillableItemType(id: number): Observable<BillableItemType> {\r\n return this.get<BillableItemType>(`${this.apiUrl}/billable-item-types/${id}/`);\r\n }\r\n\r\n /**\r\n * Create a new billable item type\r\n */\r\n createBillableItemType(itemType: BillableItemTypeCreateRequest): Observable<BillableItemType> {\r\n return this.post<BillableItemType>(`${this.apiUrl}/billable-item-types/`, itemType);\r\n }\r\n\r\n /**\r\n * Update an existing billable item type\r\n */\r\n updateBillableItemType(id: number, itemType: BillableItemTypeUpdateRequest): Observable<BillableItemType> {\r\n return this.put<BillableItemType>(`${this.apiUrl}/billable-item-types/${id}/`, itemType);\r\n }\r\n\r\n /**\r\n * Partially update a billable item type\r\n */\r\n patchBillableItemType(id: number, itemType: Partial<BillableItemTypeUpdateRequest>): Observable<BillableItemType> {\r\n return this.patch<BillableItemType>(`${this.apiUrl}/billable-item-types/${id}/`, itemType);\r\n }\r\n\r\n /**\r\n * Delete a billable item type\r\n */\r\n deleteBillableItemType(id: number): Observable<void> {\r\n return this.delete<void>(`${this.apiUrl}/billable-item-types/${id}/`);\r\n }\r\n\r\n /**\r\n * Get billable item types grouped by content type (Django custom action)\r\n */\r\n getByContentType(appLabel?: string, model?: string): Observable<PaginatedResponse<BillableItemType>> {\r\n const params = this.buildHttpParams({ appLabel, model });\r\n return this.get<PaginatedResponse<BillableItemType>>(`${this.apiUrl}/billable-item-types/by_content_type/`, { params });\r\n }\r\n\r\n /**\r\n * Search billable item types by name or description\r\n */\r\n searchBillableItemTypes(query: string): Observable<PaginatedResponse<BillableItemType>> {\r\n return this.getBillableItemTypes({ search: query });\r\n }\r\n\r\n /**\r\n * Get active billable item types only\r\n */\r\n getActiveBillableItemTypes(): Observable<PaginatedResponse<BillableItemType>> {\r\n return this.getBillableItemTypes({ isActive: true });\r\n }\r\n\r\n /**\r\n * Get inactive billable item types\r\n */\r\n getInactiveBillableItemTypes(): Observable<PaginatedResponse<BillableItemType>> {\r\n return this.getBillableItemTypes({ isActive: false });\r\n }\r\n\r\n /**\r\n * Get billable item types that require approval\r\n */\r\n getApprovalRequiredItemTypes(): Observable<PaginatedResponse<BillableItemType>> {\r\n return this.getBillableItemTypes({ requiresApproval: true });\r\n }\r\n\r\n /**\r\n * Get billable item types that don't require approval\r\n */\r\n getAutoApprovedItemTypes(): Observable<PaginatedResponse<BillableItemType>> {\r\n return this.getBillableItemTypes({ requiresApproval: false });\r\n }\r\n\r\n /**\r\n * Get billable item types by billing unit\r\n */\r\n getBillableItemTypesByUnit(billingUnit: BillingUnit): Observable<PaginatedResponse<BillableItemType>> {\r\n return this.getBillableItemTypes({ defaultBillingUnit: billingUnit });\r\n }\r\n\r\n /**\r\n * Get hourly billing item types\r\n */\r\n getHourlyBillingItemTypes(): Observable<PaginatedResponse<BillableItemType>> {\r\n return this.getBillableItemTypes({ defaultBillingUnit: BillingUnit.HOURLY });\r\n }\r\n\r\n /**\r\n * Get usage-based billing item types\r\n */\r\n getUsageBillingItemTypes(): Observable<PaginatedResponse<BillableItemType>> {\r\n return this.getBillableItemTypes({ defaultBillingUnit: BillingUnit.USAGE });\r\n }\r\n\r\n /**\r\n * Get flat rate billing item types\r\n */\r\n getFlatRateBillingItemTypes(): Observable<PaginatedResponse<BillableItemType>> {\r\n return this.getBillableItemTypes({ defaultBillingUnit: BillingUnit.FLAT });\r\n }\r\n\r\n}","import { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { BaseApiService } from '@cupcake/core';\r\n\r\nimport {\r\n ServicePrice,\r\n ServicePriceCreateRequest,\r\n ServicePriceUpdateRequest,\r\n ServicePriceCalculationRequest,\r\n CostBreakdown,\r\n BillingUnit,\r\n PaginatedResponse\r\n} from '../models';\r\n\r\nexport interface ServicePriceQueryParams {\r\n search?: string;\r\n isActive?: boolean;\r\n billingUnit?: BillingUnit;\r\n currency?: string;\r\n billableItemType?: number;\r\n serviceTier?: number;\r\n limit?: number;\r\n offset?: number;\r\n ordering?: string;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ServicePriceService extends BaseApiService {\r\n\r\n /**\r\n * Get all service prices with optional filtering\r\n */\r\n getServicePrices(params?: ServicePriceQueryParams): Observable<PaginatedResponse<ServicePrice>> {\r\n const httpParams = this.buildHttpParams(params);\r\n return this.get<PaginatedResponse<ServicePrice>>(`${this.apiUrl}/service-prices/`, { params: httpParams });\r\n }\r\n\r\n /**\r\n * Get a single service price by ID\r\n */\r\n getServicePrice(id: number): Observable<ServicePrice> {\r\n return this.get<ServicePrice>(`${this.apiUrl}/service-prices/${id}/`);\r\n }\r\n\r\n /**\r\n * Create a new service price\r\n */\r\n createServicePrice(price: ServicePriceCreateRequest): Observable<ServicePrice> {\r\n return this.post<ServicePrice>(`${this.apiUrl}/service-prices/`, price);\r\n }\r\n\r\n /**\r\n * Update an existing service price\r\n */\r\n updateServicePrice(id: number, price: ServicePriceUpdateRequest): Observable<ServicePrice> {\r\n return this.put<ServicePrice>(`${this.apiUrl}/service-prices/${id}/`, price);\r\n }\r\n\r\n /**\r\n * Partially update a service price\r\n */\r\n patchServicePrice(id: number, price: Partial<ServicePriceUpdateRequest>): Observable<ServicePrice> {\r\n return this.patch<ServicePrice>(`${this.apiUrl}/service-prices/${id}/`, price);\r\n }\r\n\r\n /**\r\n * Delete a service price\r\n */\r\n deleteServicePrice(id: number): Observable<void> {\r\n return this.delete<void>(`${this.apiUrl}/service-prices/${id}/`);\r\n }\r\n\r\n /**\r\n * Calculate total cost for a given quantity\r\n */\r\n calculateCost(id: number, request: ServicePriceCalculationRequest): Observable<CostBreakdown> {\r\n return this.post<CostBreakdown>(`${this.apiUrl}/service-prices/${id}/calculate_cost/`, request);\r\n }\r\n\r\n /**\r\n * Get current effective prices (Django custom action)\r\n */\r\n getCurrentPrices(): Observable<ServicePrice[]> {\r\n return this.get<ServicePrice[]>(`${this.apiUrl}/service-prices/current_prices/`);\r\n }\r\n\r\n /**\r\n * Search service prices by item or tier name\r\n */\r\n searchServicePrices(query: string): Observable<PaginatedResponse<ServicePrice>> {\r\n return this.getServicePrices({ search: query });\r\n }\r\n\r\n /**\r\n * Get active service prices only\r\n */\r\n getActiveServicePrices(): Observable<PaginatedResponse<ServicePrice>> {\r\n return this.getServicePrices({ isActive: true });\r\n }\r\n\r\n /**\r\n * Get inactive service prices\r\n */\r\n getInactiveServicePrices(): Observable<PaginatedResponse<ServicePrice>> {\r\n return this.getServicePrices({ isActive: false });\r\n }\r\n\r\n /**\r\n * Get service prices by billing unit\r\n */\r\n getServicePricesByUnit(billingUnit: BillingUnit): Observable<PaginatedResponse<ServicePrice>> {\r\n return this.getServicePrices({ billingUnit });\r\n }\r\n\r\n /**\r\n * Get service prices by currency\r\n */\r\n getServicePricesByCurrency(currency: string): Observable<PaginatedResponse<ServicePrice>> {\r\n return this.getServicePrices({ currency });\r\n }\r\n\r\n /**\r\n * Get service prices for a specific billable item type\r\n */\r\n getServicePricesForItemType(itemTypeId: number): Observable<PaginatedResponse<ServicePrice>> {\r\n return this.getServicePrices({ billableItemType: itemTypeId });\r\n }\r\n\r\n /**\r\n * Get service prices for a specific service tier\r\n */\r\n getServicePricesForTier(tierId: number): Observable<PaginatedResponse<ServicePrice>> {\r\n return this.getServicePrices({ serviceTier: tierId });\r\n }\r\n\r\n /**\r\n * Get hourly service prices\r\n */\r\n getHourlyServicePrices(): Observable<PaginatedResponse<ServicePrice>> {\r\n return this.getServicePrices({ billingUnit: BillingUnit.HOURLY });\r\n }\r\n\r\n /**\r\n * Get usage-based service prices\r\n */\r\n getUsageServicePrices(): Observable<PaginatedResponse<ServicePrice>> {\r\n return this.getServicePrices({ billingUnit: BillingUnit.USAGE });\r\n }\r\n\r\n /**\r\n * Get flat rate service prices\r\n */\r\n getFlatRateServicePrices(): Observable<PaginatedResponse<ServicePrice>> {\r\n return this.getServicePrices({ billingUnit: BillingUnit.FLAT });\r\n }\r\n\r\n}","import { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { BaseApiService } from '@cupcake/core';\r\n\r\nimport {\r\n BillingRecord,\r\n BillingRecordCreateRequest,\r\n BillingRecordUpdateRequest,\r\n BillingRecordSummary,\r\n BillingApprovalRequest,\r\n BillingStatus,\r\n PaginatedResponse\r\n} from '../models';\r\n\r\nexport interface BillingRecordQueryParams {\r\n search?: string;\r\n status?: BillingStatus;\r\n currency?: string;\r\n costCenter?: string;\r\n user?: number;\r\n serviceTier?: number;\r\n dateFrom?: string;\r\n dateTo?: string;\r\n limit?: number;\r\n offset?: number;\r\n ordering?: string;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class BillingRecordService extends BaseApiService {\r\n\r\n /**\r\n * Get all billing records with optional filtering\r\n */\r\n getBillingRecords(params?: BillingRecordQueryParams): Observable<PaginatedResponse<BillingRecord>> {\r\n const httpParams = this.buildHttpParams(params);\r\n return this.get<PaginatedResponse<BillingRecord>>(`${this.apiUrl}/billing-records/`, { params: httpParams });\r\n }\r\n\r\n /**\r\n * Get a single billing record by ID\r\n */\r\n getBillingRecord(id: string): Observable<BillingRecord> {\r\n return this.get<BillingRecord>(`${this.apiUrl}/billing-records/${id}/`);\r\n }\r\n\r\n /**\r\n * Create a new billing record\r\n */\r\n createBillingRecord(record: BillingRecordCreateRequest): Observable<BillingRecord> {\r\n return this.post<BillingRecord>(`${this.apiUrl}/billing-records/`, record);\r\n }\r\n\r\n /**\r\n * Update an existing billing record\r\n */\r\n updateBillingRecord(id: string, record: BillingRecordUpdateRequest): Observable<BillingRecord> {\r\n return this.put<BillingRecord>(`${this.apiUrl}/billing-records/${id}/`, record);\r\n }\r\n\r\n /**\r\n * Partially update a billing record\r\n */\r\n patchBillingRecord(id: string, record: Partial<BillingRecordUpdateRequest>): Observable<BillingRecord> {\r\n return this.patch<BillingRecord>(`${this.apiUrl}/billing-records/${id}/`, record);\r\n }\r\n\r\n /**\r\n * Delete a billing record\r\n */\r\n deleteBillingRecord(id: string): Observable<void> {\r\n return this.delete<void>(`${this.apiUrl}/billing-records/${id}/`);\r\n }\r\n\r\n /**\r\n * Approve a billing record\r\n */\r\n approveBillingRecord(id: string, request: BillingApprovalRequest): Observable<BillingRecord> {\r\n return this.post<BillingRecord>(`${this.apiUrl}/billing-records/${id}/approve/`, request);\r\n }\r\n\r\n\r\n /**\r\n * Get billing summary statistics (Django custom action)\r\n */\r\n getSummary(params?: { \r\n dateFrom?: string; \r\n dateTo?: string; \r\n currency?: string;\r\n costCenter?: string;\r\n serviceTier?: number;\r\n }): Observable<BillingRecordSummary> {\r\n const httpParams = this.buildHttpParams(params);\r\n return this.get<BillingRecordSummary>(`${this.apiUrl}/billing-records/summary/`, { params: httpParams });\r\n }\r\n\r\n /**\r\n * Get billing records pending approval (Django custom action)\r\n */\r\n getPendingApproval(): Observable<PaginatedResponse<BillingRecord>> {\r\n return this.get<PaginatedResponse<BillingRecord>>(`${this.apiUrl}/billing-records/pending_approval/`);\r\n }\r\n\r\n /**\r\n * Get billing records grouped by cost center (Django custom action)\r\n */\r\n getByCostCenter(): Observable<{ [key: string]: BillingRecord[] }> {\r\n return this.get<{ [key: string]: BillingRecord[] }>(`${this.apiUrl}/billing-records/by_cost_center/`);\r\n }\r\n\r\n /**\r\n * Get user billing records\r\n */\r\n getUserBillingRecords(userId: number): Observable<PaginatedResponse<BillingRecord>> {\r\n return this.getBillingRecords({ user: userId });\r\n }\r\n\r\n /**\r\n * Get my billing records (current user)\r\n */\r\n getMyBillingRecords(): Observable<PaginatedResponse<BillingRecord>> {\r\n return this.get<PaginatedResponse<BillingRecord>>(`${this.apiUrl}/billing-records/my_records/`);\r\n }\r\n\r\n /**\r\n * Search billing records by description, notes, or cost center\r\n */\r\n searchBillingRecords(query: string): Observable<PaginatedResponse<BillingRecord>> {\r\n return this.getBillingRecords({ search: query });\r\n }\r\n\r\n /**\r\n * Get pending billing records\r\n */\r\n getPendingBillingRecords(): Observable<PaginatedResponse<BillingRecord>> {\r\n return this.getBillingRecords({ status: BillingStatus.PENDING });\r\n }\r\n\r\n /**\r\n * Get approved billing records\r\n */\r\n getApprovedBillingRecords(): Observable<PaginatedResponse<BillingRecord>> {\r\n return this.getBillingRecords({ status: BillingStatus.APPROVED });\r\n }\r\n\r\n /**\r\n * Get billed billing records\r\n */\r\n getBilledBillingRecords(): Observable<PaginatedResponse<BillingRecord>> {\r\n return this.getBillingRecords({ status: BillingStatus.BILLED });\r\n }\r\n\r\n /**\r\n * Get paid billing records\r\n */\r\n getPaidBillingRecords(): Observable<PaginatedResponse<BillingRecord>> {\r\n return this.getBillingRecords({ status: BillingStatus.PAID });\r\n }\r\n\r\n /**\r\n * Get disputed billing records\r\n */\r\n getDisputedBillingRecords(): Observable<PaginatedResponse<BillingRecord>> {\r\n return this.getBillingRecords({ status: BillingStatus.DISPUTED });\r\n }\r\n\r\n /**\r\n * Get cancelled billing records\r\n */\r\n getCancelledBillingRecords(): Observable<PaginatedResponse<BillingRecord>> {\r\n return this.getBillingRecords({ status: BillingStatus.CANCELLED });\r\n }\r\n\r\n /**\r\n * Get billing records by status\r\n */\r\n getBillingRecordsByStatus(status: BillingStatus): Observable<PaginatedResponse<BillingRecord>> {\r\n return this.getBillingRecords({ status });\r\n }\r\n\r\n /**\r\n * Get billing records by currency\r\n */\r\n getBillingRecordsByCurrency(currency: string): Observable<PaginatedResponse<BillingRecord>> {\r\n return this.getBillingRecords({ currency });\r\n }\r\n\r\n /**\r\n * Get billing records by cost center\r\n */\r\n getBillingRecordsByCostCenter(costCenter: string): Observable<PaginatedResponse<BillingRecord>> {\r\n return this.getBillingRecords({ costCenter });\r\n }\r\n\r\n /**\r\n * Get billing records by service tier\r\n */\r\n getBillingRecordsByServiceTier(tierId: number): Observable<PaginatedResponse<BillingRecord>> {\r\n return this.getBillingRecords({ serviceTier: tierId });\r\n }\r\n\r\n /**\r\n * Get billing records for date range\r\n */\r\n getBillingRecordsByDateRange(dateFrom: string, dateTo: string): Observable<PaginatedResponse<BillingRecord>> {\r\n return this.getBillingRecords({ dateFrom, dateTo });\r\n }\r\n\r\n}","// Billing and financial management services\r\nexport * from './service-tier';\r\nexport * from './billable-item-type';\r\nexport * from './service-price';\r\nexport * from './billing-record';","/*\n * Public API Surface of cupcake-salted-caramel\n */\n\nexport * from './lib/cupcake-salted-caramel';\n\n// Models and interfaces\nexport * from './lib/models';\n\n// Services\nexport * from './lib/services';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/index.d.ts
ADDED
|
@@ -0,0 +1,602 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { Observable } from 'rxjs';
|
|
3
|
+
import { BaseApiService } from '@cupcake/core';
|
|
4
|
+
|
|
5
|
+
declare class CupcakeSaltedCaramel {
|
|
6
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<CupcakeSaltedCaramel, never>;
|
|
7
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<CupcakeSaltedCaramel, "ccsc-cupcake-salted-caramel", never, {}, {}, never, never, true, never>;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
interface BaseTimestampedModel {
|
|
11
|
+
createdAt: string;
|
|
12
|
+
updatedAt: string;
|
|
13
|
+
}
|
|
14
|
+
interface UserBasic {
|
|
15
|
+
id: number;
|
|
16
|
+
username: string;
|
|
17
|
+
firstName: string;
|
|
18
|
+
lastName: string;
|
|
19
|
+
email: string;
|
|
20
|
+
}
|
|
21
|
+
interface PaginatedResponse<T> {
|
|
22
|
+
count: number;
|
|
23
|
+
next?: string;
|
|
24
|
+
previous?: string;
|
|
25
|
+
results: T[];
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
declare enum BillingUnit {
|
|
29
|
+
HOURLY = "hourly",
|
|
30
|
+
DAILY = "daily",
|
|
31
|
+
USAGE = "usage",
|
|
32
|
+
SAMPLE = "sample",
|
|
33
|
+
FLAT = "flat",
|
|
34
|
+
CUSTOM = "custom"
|
|
35
|
+
}
|
|
36
|
+
declare enum BillingStatus {
|
|
37
|
+
PENDING = "pending",
|
|
38
|
+
APPROVED = "approved",
|
|
39
|
+
BILLED = "billed",
|
|
40
|
+
PAID = "paid",
|
|
41
|
+
DISPUTED = "disputed",
|
|
42
|
+
CANCELLED = "cancelled"
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
interface ServiceTier extends BaseTimestampedModel {
|
|
46
|
+
id: number;
|
|
47
|
+
tierName: string;
|
|
48
|
+
description?: string;
|
|
49
|
+
priorityLevel: number;
|
|
50
|
+
features: string[];
|
|
51
|
+
featuresDisplay?: string;
|
|
52
|
+
maxConcurrentBookings?: number;
|
|
53
|
+
advanceBookingDays: number;
|
|
54
|
+
baseRateMultiplier: number;
|
|
55
|
+
discountPercentage: number;
|
|
56
|
+
isActive: boolean;
|
|
57
|
+
activePricesCount: number;
|
|
58
|
+
}
|
|
59
|
+
interface BillableItemType extends BaseTimestampedModel {
|
|
60
|
+
id: number;
|
|
61
|
+
name: string;
|
|
62
|
+
description?: string;
|
|
63
|
+
contentType: number;
|
|
64
|
+
contentTypeDisplay?: string;
|
|
65
|
+
appLabel?: string;
|
|
66
|
+
defaultBillingUnit: BillingUnit;
|
|
67
|
+
defaultBillingUnitDisplay?: string;
|
|
68
|
+
requiresApproval: boolean;
|
|
69
|
+
isActive: boolean;
|
|
70
|
+
activePricesCount: number;
|
|
71
|
+
}
|
|
72
|
+
interface ServicePrice extends BaseTimestampedModel {
|
|
73
|
+
id: number;
|
|
74
|
+
billableItemType: number;
|
|
75
|
+
billableItemName?: string;
|
|
76
|
+
serviceTier: number;
|
|
77
|
+
serviceTierName?: string;
|
|
78
|
+
basePrice: number;
|
|
79
|
+
currency: string;
|
|
80
|
+
billingUnit: BillingUnit;
|
|
81
|
+
billingUnitDisplay?: string;
|
|
82
|
+
minimumChargeUnits: number;
|
|
83
|
+
setupFee: number;
|
|
84
|
+
bulkThreshold?: number;
|
|
85
|
+
bulkDiscountPercentage: number;
|
|
86
|
+
effectiveFrom: string;
|
|
87
|
+
effectiveUntil?: string;
|
|
88
|
+
isActive: boolean;
|
|
89
|
+
isCurrent: boolean;
|
|
90
|
+
}
|
|
91
|
+
interface BillingRecord extends BaseTimestampedModel {
|
|
92
|
+
id: string;
|
|
93
|
+
contentType: number;
|
|
94
|
+
contentTypeDisplay?: string;
|
|
95
|
+
appLabel?: string;
|
|
96
|
+
objectId: number;
|
|
97
|
+
user: number;
|
|
98
|
+
username?: string;
|
|
99
|
+
userEmail?: string;
|
|
100
|
+
serviceTier: number;
|
|
101
|
+
serviceTierName?: string;
|
|
102
|
+
servicePrice: number;
|
|
103
|
+
billableItemName?: string;
|
|
104
|
+
billingUnitDisplay?: string;
|
|
105
|
+
quantity: number;
|
|
106
|
+
unitPrice: number;
|
|
107
|
+
setupFee: number;
|
|
108
|
+
subtotal: number;
|
|
109
|
+
discountAmount: number;
|
|
110
|
+
taxAmount: number;
|
|
111
|
+
totalAmount: number;
|
|
112
|
+
currency: string;
|
|
113
|
+
status: BillingStatus;
|
|
114
|
+
statusDisplay?: string;
|
|
115
|
+
billingPeriodStart: string;
|
|
116
|
+
billingPeriodEnd: string;
|
|
117
|
+
description?: string;
|
|
118
|
+
notes?: string;
|
|
119
|
+
costCenter?: string;
|
|
120
|
+
funder?: string;
|
|
121
|
+
approvedAt?: string;
|
|
122
|
+
approvedBy?: number;
|
|
123
|
+
approvedByUsername?: string;
|
|
124
|
+
canBeModified: boolean;
|
|
125
|
+
costBreakdown: CostBreakdown;
|
|
126
|
+
billingPeriodDays: number;
|
|
127
|
+
}
|
|
128
|
+
interface CostBreakdown {
|
|
129
|
+
unitPrice: number;
|
|
130
|
+
subtotal: number;
|
|
131
|
+
setupFee: number;
|
|
132
|
+
bulkDiscount: number;
|
|
133
|
+
taxAmount: number;
|
|
134
|
+
total: number;
|
|
135
|
+
currency: string;
|
|
136
|
+
}
|
|
137
|
+
interface ServiceTierCreateRequest {
|
|
138
|
+
tierName: string;
|
|
139
|
+
description?: string;
|
|
140
|
+
priorityLevel?: number;
|
|
141
|
+
features?: string[];
|
|
142
|
+
maxConcurrentBookings?: number;
|
|
143
|
+
advanceBookingDays?: number;
|
|
144
|
+
baseRateMultiplier?: number;
|
|
145
|
+
discountPercentage?: number;
|
|
146
|
+
isActive?: boolean;
|
|
147
|
+
}
|
|
148
|
+
interface ServiceTierUpdateRequest {
|
|
149
|
+
tierName?: string;
|
|
150
|
+
description?: string;
|
|
151
|
+
priorityLevel?: number;
|
|
152
|
+
features?: string[];
|
|
153
|
+
maxConcurrentBookings?: number;
|
|
154
|
+
advanceBookingDays?: number;
|
|
155
|
+
baseRateMultiplier?: number;
|
|
156
|
+
discountPercentage?: number;
|
|
157
|
+
isActive?: boolean;
|
|
158
|
+
}
|
|
159
|
+
interface BillableItemTypeCreateRequest {
|
|
160
|
+
name: string;
|
|
161
|
+
description?: string;
|
|
162
|
+
contentType: number;
|
|
163
|
+
defaultBillingUnit?: BillingUnit;
|
|
164
|
+
requiresApproval?: boolean;
|
|
165
|
+
isActive?: boolean;
|
|
166
|
+
}
|
|
167
|
+
interface BillableItemTypeUpdateRequest {
|
|
168
|
+
name?: string;
|
|
169
|
+
description?: string;
|
|
170
|
+
defaultBillingUnit?: BillingUnit;
|
|
171
|
+
requiresApproval?: boolean;
|
|
172
|
+
isActive?: boolean;
|
|
173
|
+
}
|
|
174
|
+
interface ServicePriceCreateRequest {
|
|
175
|
+
billableItemType: number;
|
|
176
|
+
serviceTier: number;
|
|
177
|
+
basePrice: number;
|
|
178
|
+
currency?: string;
|
|
179
|
+
billingUnit: BillingUnit;
|
|
180
|
+
minimumChargeUnits?: number;
|
|
181
|
+
setupFee?: number;
|
|
182
|
+
bulkThreshold?: number;
|
|
183
|
+
bulkDiscountPercentage?: number;
|
|
184
|
+
effectiveFrom?: string;
|
|
185
|
+
effectiveUntil?: string;
|
|
186
|
+
isActive?: boolean;
|
|
187
|
+
}
|
|
188
|
+
interface ServicePriceUpdateRequest {
|
|
189
|
+
basePrice?: number;
|
|
190
|
+
currency?: string;
|
|
191
|
+
billingUnit?: BillingUnit;
|
|
192
|
+
minimumChargeUnits?: number;
|
|
193
|
+
setupFee?: number;
|
|
194
|
+
bulkThreshold?: number;
|
|
195
|
+
bulkDiscountPercentage?: number;
|
|
196
|
+
effectiveFrom?: string;
|
|
197
|
+
effectiveUntil?: string;
|
|
198
|
+
isActive?: boolean;
|
|
199
|
+
}
|
|
200
|
+
interface BillingRecordCreateRequest {
|
|
201
|
+
contentType: number;
|
|
202
|
+
objectId: number;
|
|
203
|
+
user: number;
|
|
204
|
+
serviceTier: number;
|
|
205
|
+
servicePrice: number;
|
|
206
|
+
quantity: number;
|
|
207
|
+
billingPeriodStart: string;
|
|
208
|
+
billingPeriodEnd: string;
|
|
209
|
+
description?: string;
|
|
210
|
+
notes?: string;
|
|
211
|
+
costCenter?: string;
|
|
212
|
+
funder?: string;
|
|
213
|
+
}
|
|
214
|
+
interface BillingRecordUpdateRequest {
|
|
215
|
+
status?: BillingStatus;
|
|
216
|
+
description?: string;
|
|
217
|
+
notes?: string;
|
|
218
|
+
costCenter?: string;
|
|
219
|
+
funder?: string;
|
|
220
|
+
}
|
|
221
|
+
interface ServicePriceCalculationRequest {
|
|
222
|
+
quantity: number;
|
|
223
|
+
applyBulkDiscount?: boolean;
|
|
224
|
+
}
|
|
225
|
+
interface BillingRecordSummary {
|
|
226
|
+
totalRecords: number;
|
|
227
|
+
totalAmount: number;
|
|
228
|
+
currency: string;
|
|
229
|
+
byStatus: {
|
|
230
|
+
[key: string]: number;
|
|
231
|
+
};
|
|
232
|
+
byPeriod: {
|
|
233
|
+
[key: string]: number;
|
|
234
|
+
};
|
|
235
|
+
averageAmount: number;
|
|
236
|
+
}
|
|
237
|
+
interface BillingApprovalRequest {
|
|
238
|
+
notes?: string;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
interface ServiceTierQueryParams {
|
|
242
|
+
search?: string;
|
|
243
|
+
isActive?: boolean;
|
|
244
|
+
priorityLevel?: number;
|
|
245
|
+
limit?: number;
|
|
246
|
+
offset?: number;
|
|
247
|
+
ordering?: string;
|
|
248
|
+
}
|
|
249
|
+
declare class ServiceTierService extends BaseApiService {
|
|
250
|
+
/**
|
|
251
|
+
* Get all service tiers with optional filtering
|
|
252
|
+
*/
|
|
253
|
+
getServiceTiers(params?: ServiceTierQueryParams): Observable<PaginatedResponse<ServiceTier>>;
|
|
254
|
+
/**
|
|
255
|
+
* Get a single service tier by ID
|
|
256
|
+
*/
|
|
257
|
+
getServiceTier(id: number): Observable<ServiceTier>;
|
|
258
|
+
/**
|
|
259
|
+
* Create a new service tier
|
|
260
|
+
*/
|
|
261
|
+
createServiceTier(tier: ServiceTierCreateRequest): Observable<ServiceTier>;
|
|
262
|
+
/**
|
|
263
|
+
* Update an existing service tier
|
|
264
|
+
*/
|
|
265
|
+
updateServiceTier(id: number, tier: ServiceTierUpdateRequest): Observable<ServiceTier>;
|
|
266
|
+
/**
|
|
267
|
+
* Partially update a service tier
|
|
268
|
+
*/
|
|
269
|
+
patchServiceTier(id: number, tier: Partial<ServiceTierUpdateRequest>): Observable<ServiceTier>;
|
|
270
|
+
/**
|
|
271
|
+
* Delete a service tier
|
|
272
|
+
*/
|
|
273
|
+
deleteServiceTier(id: number): Observable<void>;
|
|
274
|
+
/**
|
|
275
|
+
* Calculate price for a given base amount using tier's modifiers
|
|
276
|
+
*/
|
|
277
|
+
calculatePrice(id: number, request: {
|
|
278
|
+
baseAmount: number;
|
|
279
|
+
}): Observable<{
|
|
280
|
+
calculatedPrice: number;
|
|
281
|
+
baseAmount: number;
|
|
282
|
+
multiplier: number;
|
|
283
|
+
discount: number;
|
|
284
|
+
}>;
|
|
285
|
+
/**
|
|
286
|
+
* Get active service tiers (Django custom action)
|
|
287
|
+
*/
|
|
288
|
+
getActiveTiers(): Observable<ServiceTier[]>;
|
|
289
|
+
/**
|
|
290
|
+
* Search service tiers by name or description
|
|
291
|
+
*/
|
|
292
|
+
searchServiceTiers(query: string): Observable<PaginatedResponse<ServiceTier>>;
|
|
293
|
+
/**
|
|
294
|
+
* Get active service tiers only
|
|
295
|
+
*/
|
|
296
|
+
getActiveServiceTiers(): Observable<PaginatedResponse<ServiceTier>>;
|
|
297
|
+
/**
|
|
298
|
+
* Get inactive service tiers
|
|
299
|
+
*/
|
|
300
|
+
getInactiveServiceTiers(): Observable<PaginatedResponse<ServiceTier>>;
|
|
301
|
+
/**
|
|
302
|
+
* Get service tiers by priority level
|
|
303
|
+
*/
|
|
304
|
+
getServiceTiersByPriority(priorityLevel: number): Observable<PaginatedResponse<ServiceTier>>;
|
|
305
|
+
/**
|
|
306
|
+
* Get service tiers ordered by priority (highest first)
|
|
307
|
+
*/
|
|
308
|
+
getServiceTiersByPriorityDesc(): Observable<PaginatedResponse<ServiceTier>>;
|
|
309
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ServiceTierService, never>;
|
|
310
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<ServiceTierService>;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
interface BillableItemTypeQueryParams {
|
|
314
|
+
search?: string;
|
|
315
|
+
isActive?: boolean;
|
|
316
|
+
requiresApproval?: boolean;
|
|
317
|
+
defaultBillingUnit?: BillingUnit;
|
|
318
|
+
limit?: number;
|
|
319
|
+
offset?: number;
|
|
320
|
+
ordering?: string;
|
|
321
|
+
}
|
|
322
|
+
declare class BillableItemTypeService extends BaseApiService {
|
|
323
|
+
/**
|
|
324
|
+
* Get all billable item types with optional filtering
|
|
325
|
+
*/
|
|
326
|
+
getBillableItemTypes(params?: BillableItemTypeQueryParams): Observable<PaginatedResponse<BillableItemType>>;
|
|
327
|
+
/**
|
|
328
|
+
* Get a single billable item type by ID
|
|
329
|
+
*/
|
|
330
|
+
getBillableItemType(id: number): Observable<BillableItemType>;
|
|
331
|
+
/**
|
|
332
|
+
* Create a new billable item type
|
|
333
|
+
*/
|
|
334
|
+
createBillableItemType(itemType: BillableItemTypeCreateRequest): Observable<BillableItemType>;
|
|
335
|
+
/**
|
|
336
|
+
* Update an existing billable item type
|
|
337
|
+
*/
|
|
338
|
+
updateBillableItemType(id: number, itemType: BillableItemTypeUpdateRequest): Observable<BillableItemType>;
|
|
339
|
+
/**
|
|
340
|
+
* Partially update a billable item type
|
|
341
|
+
*/
|
|
342
|
+
patchBillableItemType(id: number, itemType: Partial<BillableItemTypeUpdateRequest>): Observable<BillableItemType>;
|
|
343
|
+
/**
|
|
344
|
+
* Delete a billable item type
|
|
345
|
+
*/
|
|
346
|
+
deleteBillableItemType(id: number): Observable<void>;
|
|
347
|
+
/**
|
|
348
|
+
* Get billable item types grouped by content type (Django custom action)
|
|
349
|
+
*/
|
|
350
|
+
getByContentType(appLabel?: string, model?: string): Observable<PaginatedResponse<BillableItemType>>;
|
|
351
|
+
/**
|
|
352
|
+
* Search billable item types by name or description
|
|
353
|
+
*/
|
|
354
|
+
searchBillableItemTypes(query: string): Observable<PaginatedResponse<BillableItemType>>;
|
|
355
|
+
/**
|
|
356
|
+
* Get active billable item types only
|
|
357
|
+
*/
|
|
358
|
+
getActiveBillableItemTypes(): Observable<PaginatedResponse<BillableItemType>>;
|
|
359
|
+
/**
|
|
360
|
+
* Get inactive billable item types
|
|
361
|
+
*/
|
|
362
|
+
getInactiveBillableItemTypes(): Observable<PaginatedResponse<BillableItemType>>;
|
|
363
|
+
/**
|
|
364
|
+
* Get billable item types that require approval
|
|
365
|
+
*/
|
|
366
|
+
getApprovalRequiredItemTypes(): Observable<PaginatedResponse<BillableItemType>>;
|
|
367
|
+
/**
|
|
368
|
+
* Get billable item types that don't require approval
|
|
369
|
+
*/
|
|
370
|
+
getAutoApprovedItemTypes(): Observable<PaginatedResponse<BillableItemType>>;
|
|
371
|
+
/**
|
|
372
|
+
* Get billable item types by billing unit
|
|
373
|
+
*/
|
|
374
|
+
getBillableItemTypesByUnit(billingUnit: BillingUnit): Observable<PaginatedResponse<BillableItemType>>;
|
|
375
|
+
/**
|
|
376
|
+
* Get hourly billing item types
|
|
377
|
+
*/
|
|
378
|
+
getHourlyBillingItemTypes(): Observable<PaginatedResponse<BillableItemType>>;
|
|
379
|
+
/**
|
|
380
|
+
* Get usage-based billing item types
|
|
381
|
+
*/
|
|
382
|
+
getUsageBillingItemTypes(): Observable<PaginatedResponse<BillableItemType>>;
|
|
383
|
+
/**
|
|
384
|
+
* Get flat rate billing item types
|
|
385
|
+
*/
|
|
386
|
+
getFlatRateBillingItemTypes(): Observable<PaginatedResponse<BillableItemType>>;
|
|
387
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<BillableItemTypeService, never>;
|
|
388
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<BillableItemTypeService>;
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
interface ServicePriceQueryParams {
|
|
392
|
+
search?: string;
|
|
393
|
+
isActive?: boolean;
|
|
394
|
+
billingUnit?: BillingUnit;
|
|
395
|
+
currency?: string;
|
|
396
|
+
billableItemType?: number;
|
|
397
|
+
serviceTier?: number;
|
|
398
|
+
limit?: number;
|
|
399
|
+
offset?: number;
|
|
400
|
+
ordering?: string;
|
|
401
|
+
}
|
|
402
|
+
declare class ServicePriceService extends BaseApiService {
|
|
403
|
+
/**
|
|
404
|
+
* Get all service prices with optional filtering
|
|
405
|
+
*/
|
|
406
|
+
getServicePrices(params?: ServicePriceQueryParams): Observable<PaginatedResponse<ServicePrice>>;
|
|
407
|
+
/**
|
|
408
|
+
* Get a single service price by ID
|
|
409
|
+
*/
|
|
410
|
+
getServicePrice(id: number): Observable<ServicePrice>;
|
|
411
|
+
/**
|
|
412
|
+
* Create a new service price
|
|
413
|
+
*/
|
|
414
|
+
createServicePrice(price: ServicePriceCreateRequest): Observable<ServicePrice>;
|
|
415
|
+
/**
|
|
416
|
+
* Update an existing service price
|
|
417
|
+
*/
|
|
418
|
+
updateServicePrice(id: number, price: ServicePriceUpdateRequest): Observable<ServicePrice>;
|
|
419
|
+
/**
|
|
420
|
+
* Partially update a service price
|
|
421
|
+
*/
|
|
422
|
+
patchServicePrice(id: number, price: Partial<ServicePriceUpdateRequest>): Observable<ServicePrice>;
|
|
423
|
+
/**
|
|
424
|
+
* Delete a service price
|
|
425
|
+
*/
|
|
426
|
+
deleteServicePrice(id: number): Observable<void>;
|
|
427
|
+
/**
|
|
428
|
+
* Calculate total cost for a given quantity
|
|
429
|
+
*/
|
|
430
|
+
calculateCost(id: number, request: ServicePriceCalculationRequest): Observable<CostBreakdown>;
|
|
431
|
+
/**
|
|
432
|
+
* Get current effective prices (Django custom action)
|
|
433
|
+
*/
|
|
434
|
+
getCurrentPrices(): Observable<ServicePrice[]>;
|
|
435
|
+
/**
|
|
436
|
+
* Search service prices by item or tier name
|
|
437
|
+
*/
|
|
438
|
+
searchServicePrices(query: string): Observable<PaginatedResponse<ServicePrice>>;
|
|
439
|
+
/**
|
|
440
|
+
* Get active service prices only
|
|
441
|
+
*/
|
|
442
|
+
getActiveServicePrices(): Observable<PaginatedResponse<ServicePrice>>;
|
|
443
|
+
/**
|
|
444
|
+
* Get inactive service prices
|
|
445
|
+
*/
|
|
446
|
+
getInactiveServicePrices(): Observable<PaginatedResponse<ServicePrice>>;
|
|
447
|
+
/**
|
|
448
|
+
* Get service prices by billing unit
|
|
449
|
+
*/
|
|
450
|
+
getServicePricesByUnit(billingUnit: BillingUnit): Observable<PaginatedResponse<ServicePrice>>;
|
|
451
|
+
/**
|
|
452
|
+
* Get service prices by currency
|
|
453
|
+
*/
|
|
454
|
+
getServicePricesByCurrency(currency: string): Observable<PaginatedResponse<ServicePrice>>;
|
|
455
|
+
/**
|
|
456
|
+
* Get service prices for a specific billable item type
|
|
457
|
+
*/
|
|
458
|
+
getServicePricesForItemType(itemTypeId: number): Observable<PaginatedResponse<ServicePrice>>;
|
|
459
|
+
/**
|
|
460
|
+
* Get service prices for a specific service tier
|
|
461
|
+
*/
|
|
462
|
+
getServicePricesForTier(tierId: number): Observable<PaginatedResponse<ServicePrice>>;
|
|
463
|
+
/**
|
|
464
|
+
* Get hourly service prices
|
|
465
|
+
*/
|
|
466
|
+
getHourlyServicePrices(): Observable<PaginatedResponse<ServicePrice>>;
|
|
467
|
+
/**
|
|
468
|
+
* Get usage-based service prices
|
|
469
|
+
*/
|
|
470
|
+
getUsageServicePrices(): Observable<PaginatedResponse<ServicePrice>>;
|
|
471
|
+
/**
|
|
472
|
+
* Get flat rate service prices
|
|
473
|
+
*/
|
|
474
|
+
getFlatRateServicePrices(): Observable<PaginatedResponse<ServicePrice>>;
|
|
475
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ServicePriceService, never>;
|
|
476
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<ServicePriceService>;
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
interface BillingRecordQueryParams {
|
|
480
|
+
search?: string;
|
|
481
|
+
status?: BillingStatus;
|
|
482
|
+
currency?: string;
|
|
483
|
+
costCenter?: string;
|
|
484
|
+
user?: number;
|
|
485
|
+
serviceTier?: number;
|
|
486
|
+
dateFrom?: string;
|
|
487
|
+
dateTo?: string;
|
|
488
|
+
limit?: number;
|
|
489
|
+
offset?: number;
|
|
490
|
+
ordering?: string;
|
|
491
|
+
}
|
|
492
|
+
declare class BillingRecordService extends BaseApiService {
|
|
493
|
+
/**
|
|
494
|
+
* Get all billing records with optional filtering
|
|
495
|
+
*/
|
|
496
|
+
getBillingRecords(params?: BillingRecordQueryParams): Observable<PaginatedResponse<BillingRecord>>;
|
|
497
|
+
/**
|
|
498
|
+
* Get a single billing record by ID
|
|
499
|
+
*/
|
|
500
|
+
getBillingRecord(id: string): Observable<BillingRecord>;
|
|
501
|
+
/**
|
|
502
|
+
* Create a new billing record
|
|
503
|
+
*/
|
|
504
|
+
createBillingRecord(record: BillingRecordCreateRequest): Observable<BillingRecord>;
|
|
505
|
+
/**
|
|
506
|
+
* Update an existing billing record
|
|
507
|
+
*/
|
|
508
|
+
updateBillingRecord(id: string, record: BillingRecordUpdateRequest): Observable<BillingRecord>;
|
|
509
|
+
/**
|
|
510
|
+
* Partially update a billing record
|
|
511
|
+
*/
|
|
512
|
+
patchBillingRecord(id: string, record: Partial<BillingRecordUpdateRequest>): Observable<BillingRecord>;
|
|
513
|
+
/**
|
|
514
|
+
* Delete a billing record
|
|
515
|
+
*/
|
|
516
|
+
deleteBillingRecord(id: string): Observable<void>;
|
|
517
|
+
/**
|
|
518
|
+
* Approve a billing record
|
|
519
|
+
*/
|
|
520
|
+
approveBillingRecord(id: string, request: BillingApprovalRequest): Observable<BillingRecord>;
|
|
521
|
+
/**
|
|
522
|
+
* Get billing summary statistics (Django custom action)
|
|
523
|
+
*/
|
|
524
|
+
getSummary(params?: {
|
|
525
|
+
dateFrom?: string;
|
|
526
|
+
dateTo?: string;
|
|
527
|
+
currency?: string;
|
|
528
|
+
costCenter?: string;
|
|
529
|
+
serviceTier?: number;
|
|
530
|
+
}): Observable<BillingRecordSummary>;
|
|
531
|
+
/**
|
|
532
|
+
* Get billing records pending approval (Django custom action)
|
|
533
|
+
*/
|
|
534
|
+
getPendingApproval(): Observable<PaginatedResponse<BillingRecord>>;
|
|
535
|
+
/**
|
|
536
|
+
* Get billing records grouped by cost center (Django custom action)
|
|
537
|
+
*/
|
|
538
|
+
getByCostCenter(): Observable<{
|
|
539
|
+
[key: string]: BillingRecord[];
|
|
540
|
+
}>;
|
|
541
|
+
/**
|
|
542
|
+
* Get user billing records
|
|
543
|
+
*/
|
|
544
|
+
getUserBillingRecords(userId: number): Observable<PaginatedResponse<BillingRecord>>;
|
|
545
|
+
/**
|
|
546
|
+
* Get my billing records (current user)
|
|
547
|
+
*/
|
|
548
|
+
getMyBillingRecords(): Observable<PaginatedResponse<BillingRecord>>;
|
|
549
|
+
/**
|
|
550
|
+
* Search billing records by description, notes, or cost center
|
|
551
|
+
*/
|
|
552
|
+
searchBillingRecords(query: string): Observable<PaginatedResponse<BillingRecord>>;
|
|
553
|
+
/**
|
|
554
|
+
* Get pending billing records
|
|
555
|
+
*/
|
|
556
|
+
getPendingBillingRecords(): Observable<PaginatedResponse<BillingRecord>>;
|
|
557
|
+
/**
|
|
558
|
+
* Get approved billing records
|
|
559
|
+
*/
|
|
560
|
+
getApprovedBillingRecords(): Observable<PaginatedResponse<BillingRecord>>;
|
|
561
|
+
/**
|
|
562
|
+
* Get billed billing records
|
|
563
|
+
*/
|
|
564
|
+
getBilledBillingRecords(): Observable<PaginatedResponse<BillingRecord>>;
|
|
565
|
+
/**
|
|
566
|
+
* Get paid billing records
|
|
567
|
+
*/
|
|
568
|
+
getPaidBillingRecords(): Observable<PaginatedResponse<BillingRecord>>;
|
|
569
|
+
/**
|
|
570
|
+
* Get disputed billing records
|
|
571
|
+
*/
|
|
572
|
+
getDisputedBillingRecords(): Observable<PaginatedResponse<BillingRecord>>;
|
|
573
|
+
/**
|
|
574
|
+
* Get cancelled billing records
|
|
575
|
+
*/
|
|
576
|
+
getCancelledBillingRecords(): Observable<PaginatedResponse<BillingRecord>>;
|
|
577
|
+
/**
|
|
578
|
+
* Get billing records by status
|
|
579
|
+
*/
|
|
580
|
+
getBillingRecordsByStatus(status: BillingStatus): Observable<PaginatedResponse<BillingRecord>>;
|
|
581
|
+
/**
|
|
582
|
+
* Get billing records by currency
|
|
583
|
+
*/
|
|
584
|
+
getBillingRecordsByCurrency(currency: string): Observable<PaginatedResponse<BillingRecord>>;
|
|
585
|
+
/**
|
|
586
|
+
* Get billing records by cost center
|
|
587
|
+
*/
|
|
588
|
+
getBillingRecordsByCostCenter(costCenter: string): Observable<PaginatedResponse<BillingRecord>>;
|
|
589
|
+
/**
|
|
590
|
+
* Get billing records by service tier
|
|
591
|
+
*/
|
|
592
|
+
getBillingRecordsByServiceTier(tierId: number): Observable<PaginatedResponse<BillingRecord>>;
|
|
593
|
+
/**
|
|
594
|
+
* Get billing records for date range
|
|
595
|
+
*/
|
|
596
|
+
getBillingRecordsByDateRange(dateFrom: string, dateTo: string): Observable<PaginatedResponse<BillingRecord>>;
|
|
597
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<BillingRecordService, never>;
|
|
598
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<BillingRecordService>;
|
|
599
|
+
}
|
|
600
|
+
|
|
601
|
+
export { BillableItemTypeService, BillingRecordService, BillingStatus, BillingUnit, CupcakeSaltedCaramel, ServicePriceService, ServiceTierService };
|
|
602
|
+
export type { BaseTimestampedModel, BillableItemType, BillableItemTypeCreateRequest, BillableItemTypeQueryParams, BillableItemTypeUpdateRequest, BillingApprovalRequest, BillingRecord, BillingRecordCreateRequest, BillingRecordQueryParams, BillingRecordSummary, BillingRecordUpdateRequest, CostBreakdown, PaginatedResponse, ServicePrice, ServicePriceCalculationRequest, ServicePriceCreateRequest, ServicePriceQueryParams, ServicePriceUpdateRequest, ServiceTier, ServiceTierCreateRequest, ServiceTierQueryParams, ServiceTierUpdateRequest, UserBasic };
|
package/package.json
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@noatgnu/cupcake-salted-caramel",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "An extension for cupcake-core that provides additional api and interfaces for facility to manage billing.",
|
|
5
|
+
"author": "Toan Phung",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "https://github.com/noatgnu/cupcake-vanilla-ng"
|
|
10
|
+
},
|
|
11
|
+
"homepage": "https://github.com/noatgnu/cupcake-vanilla-ng#readme",
|
|
12
|
+
"bugs": {
|
|
13
|
+
"url": "https://github.com/noatgnu/cupcake-vanilla-ng/issues"
|
|
14
|
+
},
|
|
15
|
+
"peerDependencies": {
|
|
16
|
+
"@angular/common": "^20.1.0",
|
|
17
|
+
"@angular/core": "^20.1.0"
|
|
18
|
+
},
|
|
19
|
+
"dependencies": {
|
|
20
|
+
"tslib": "^2.3.0"
|
|
21
|
+
},
|
|
22
|
+
"sideEffects": false,
|
|
23
|
+
"module": "fesm2022/noatgnu-cupcake-salted-caramel.mjs",
|
|
24
|
+
"typings": "index.d.ts",
|
|
25
|
+
"exports": {
|
|
26
|
+
"./package.json": {
|
|
27
|
+
"default": "./package.json"
|
|
28
|
+
},
|
|
29
|
+
".": {
|
|
30
|
+
"types": "./index.d.ts",
|
|
31
|
+
"default": "./fesm2022/noatgnu-cupcake-salted-caramel.mjs"
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|