tango-app-api-payment-subscription 3.0.60-dev → 3.0.61-dev
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/index.js +5 -1
- package/package.json +3 -3
- package/src/controllers/billing.controllers.js +672 -0
- package/src/controllers/invoice.controller.js +867 -0
- package/src/controllers/payment.controller.js +47 -0
- package/src/controllers/paymentSubscription.controllers.js +221 -100
- package/src/dtos/validation.dtos.js +149 -5
- package/src/hbs/invoicePdf.hbs +134 -44
- package/src/hbs/invoicePdf1.hbs +1577 -0
- package/src/routes/billing.routes.js +50 -0
- package/src/routes/invoice.routes.js +10 -0
- package/src/routes/payment.routes.js +26 -0
- package/src/routes/paymentSubscription.routes.js +2 -0
- package/src/services/billing.service.js +34 -0
- package/src/services/paymentAccount.service.js +7 -0
|
@@ -40,11 +40,11 @@ export const validateProductListParams = {
|
|
|
40
40
|
};
|
|
41
41
|
|
|
42
42
|
export const validateProductsSchema = joi.object( {
|
|
43
|
-
camaraPerSqft: joi.string().
|
|
44
|
-
currencyType: joi.string().
|
|
45
|
-
planName: joi.string().
|
|
46
|
-
products: joi.array().
|
|
47
|
-
storesCount: joi.string().
|
|
43
|
+
camaraPerSqft: joi.string().optional(),
|
|
44
|
+
currencyType: joi.string().optional(),
|
|
45
|
+
planName: joi.string().optional(),
|
|
46
|
+
products: joi.array().optional(),
|
|
47
|
+
storesCount: joi.string().optional(),
|
|
48
48
|
} );
|
|
49
49
|
|
|
50
50
|
export const validateProducts = {
|
|
@@ -265,3 +265,147 @@ export const notificationSchema = {
|
|
|
265
265
|
export const notificationParams = {
|
|
266
266
|
query: notificationSchema,
|
|
267
267
|
};
|
|
268
|
+
|
|
269
|
+
export const subscribedStoreListBody = joi.object( {
|
|
270
|
+
limit: joi.number().required(),
|
|
271
|
+
offset: joi.number().required(),
|
|
272
|
+
clientId: joi.string().required(),
|
|
273
|
+
sortColumn: joi.string().optional(),
|
|
274
|
+
sortBy: joi.number().optional(),
|
|
275
|
+
searchValue: joi.string().optional(),
|
|
276
|
+
country: joi.array().optional(),
|
|
277
|
+
state: joi.array().optional(),
|
|
278
|
+
city: joi.array().optional(),
|
|
279
|
+
getFilters: joi.boolean().optional(),
|
|
280
|
+
} );
|
|
281
|
+
|
|
282
|
+
export const subscribedStoreListSchema = {
|
|
283
|
+
body: subscribedStoreListBody,
|
|
284
|
+
};
|
|
285
|
+
|
|
286
|
+
|
|
287
|
+
export const getBillingGroupQuery = {
|
|
288
|
+
clientId: joi.string().required(),
|
|
289
|
+
};
|
|
290
|
+
|
|
291
|
+
export const getBillingGroupsSchema = {
|
|
292
|
+
query: getBillingGroupQuery,
|
|
293
|
+
};
|
|
294
|
+
|
|
295
|
+
export const createBillingGroupBody = joi.object(
|
|
296
|
+
{
|
|
297
|
+
clientId: joi.string().required(),
|
|
298
|
+
groupName: joi.string().required(),
|
|
299
|
+
groupTag: joi.string().required(),
|
|
300
|
+
registeredCompanyName: joi.string().required(),
|
|
301
|
+
gst: joi.string().required(),
|
|
302
|
+
addressLineOne: joi.string().optional(),
|
|
303
|
+
addressLineTwo: joi.string().optional(),
|
|
304
|
+
city: joi.string().optional(),
|
|
305
|
+
state: joi.string().optional(),
|
|
306
|
+
country: joi.string().optional(),
|
|
307
|
+
pinCode: joi.string().optional(),
|
|
308
|
+
placeOfSupply: joi.string().required(),
|
|
309
|
+
po: joi.string().optional(),
|
|
310
|
+
stores: joi.array().optional(),
|
|
311
|
+
proRata: joi.string().optional(),
|
|
312
|
+
paymentCategory: joi.string().optional(),
|
|
313
|
+
currency: joi.string().optional(),
|
|
314
|
+
isInstallationOneTime: joi.boolean().optional(),
|
|
315
|
+
installationFee: joi.number().optional(),
|
|
316
|
+
paymentCycle: joi.string().optional(),
|
|
317
|
+
paymentTerm: joi.number().optional(),
|
|
318
|
+
generateInvoiceTo: joi.array().optional(),
|
|
319
|
+
attachAnnexure: joi.boolean().optional(),
|
|
320
|
+
isPrimary: joi.boolean().optional(),
|
|
321
|
+
} );
|
|
322
|
+
|
|
323
|
+
export const createBillingGroupsSchema = {
|
|
324
|
+
body: createBillingGroupBody,
|
|
325
|
+
};
|
|
326
|
+
|
|
327
|
+
export const updateBillingGroupBody = joi.object(
|
|
328
|
+
{
|
|
329
|
+
_id: joi.string().required(),
|
|
330
|
+
clientId: joi.string().required(),
|
|
331
|
+
groupName: joi.string().required(),
|
|
332
|
+
groupTag: joi.string().required(),
|
|
333
|
+
registeredCompanyName: joi.string().required(),
|
|
334
|
+
gst: joi.string().required(),
|
|
335
|
+
addressLineOne: joi.string().optional(),
|
|
336
|
+
addressLineTwo: joi.string().optional(),
|
|
337
|
+
city: joi.string().optional(),
|
|
338
|
+
state: joi.string().optional(),
|
|
339
|
+
country: joi.string().optional(),
|
|
340
|
+
pinCode: joi.string().optional(),
|
|
341
|
+
placeOfSupply: joi.string().required(),
|
|
342
|
+
po: joi.string().optional(),
|
|
343
|
+
stores: joi.array().optional(),
|
|
344
|
+
proRata: joi.string().optional(),
|
|
345
|
+
paymentCategory: joi.string().optional(),
|
|
346
|
+
currency: joi.string().optional(),
|
|
347
|
+
isInstallationOneTime: joi.boolean().optional(),
|
|
348
|
+
installationFee: joi.number().optional(),
|
|
349
|
+
paymentCycle: joi.string().optional(),
|
|
350
|
+
paymentTerm: joi.number().optional(),
|
|
351
|
+
generateInvoiceTo: joi.array().optional(),
|
|
352
|
+
attachAnnexure: joi.boolean().optional(),
|
|
353
|
+
isPrimary: joi.boolean().optional(),
|
|
354
|
+
} );
|
|
355
|
+
|
|
356
|
+
export const updateBillingGroupsSchema = {
|
|
357
|
+
body: updateBillingGroupBody,
|
|
358
|
+
};
|
|
359
|
+
|
|
360
|
+
export const deleteBillingGroupQuery = {
|
|
361
|
+
_id: joi.string().required(),
|
|
362
|
+
};
|
|
363
|
+
|
|
364
|
+
export const deleteBillingGroupsSchema = {
|
|
365
|
+
query: deleteBillingGroupQuery,
|
|
366
|
+
};
|
|
367
|
+
|
|
368
|
+
export const billingGroupBody = joi.object( {
|
|
369
|
+
limit: joi.number().required(),
|
|
370
|
+
offset: joi.number().required(),
|
|
371
|
+
clientId: joi.string().required(),
|
|
372
|
+
sortColumn: joi.string().optional(),
|
|
373
|
+
sortBy: joi.number().optional(),
|
|
374
|
+
searchValue: joi.string().optional(),
|
|
375
|
+
isExport: joi.boolean().optional(),
|
|
376
|
+
} );
|
|
377
|
+
|
|
378
|
+
export const billingGroupSchema = {
|
|
379
|
+
body: billingGroupBody,
|
|
380
|
+
};
|
|
381
|
+
|
|
382
|
+
export const getVirtualAccountQuery = {
|
|
383
|
+
clientId: joi.string().required(),
|
|
384
|
+
};
|
|
385
|
+
|
|
386
|
+
export const getVirtualAccountSchema = {
|
|
387
|
+
query: getVirtualAccountQuery,
|
|
388
|
+
};
|
|
389
|
+
|
|
390
|
+
export const getInvoiceBody = joi.object( {
|
|
391
|
+
limit: joi.number().required(),
|
|
392
|
+
offset: joi.number().required(),
|
|
393
|
+
clientId: joi.string().required(),
|
|
394
|
+
sortColumn: joi.string().optional(),
|
|
395
|
+
sortBy: joi.number().optional(),
|
|
396
|
+
searchValue: joi.string().optional(),
|
|
397
|
+
isExport: joi.boolean().optional(),
|
|
398
|
+
filter: joi.string().optional(),
|
|
399
|
+
} );
|
|
400
|
+
|
|
401
|
+
export const getInvoiceSchema = {
|
|
402
|
+
body: getInvoiceBody,
|
|
403
|
+
};
|
|
404
|
+
|
|
405
|
+
export const valletPayParam = joi.object().keys( {
|
|
406
|
+
invoice: joi.string().required(),
|
|
407
|
+
} );
|
|
408
|
+
|
|
409
|
+
export const valletPayValid = {
|
|
410
|
+
params: valletPayParam,
|
|
411
|
+
};
|
package/src/hbs/invoicePdf.hbs
CHANGED
|
@@ -34,7 +34,6 @@
|
|
|
34
34
|
padding: 24px;
|
|
35
35
|
display: flex;
|
|
36
36
|
flex-direction: column;
|
|
37
|
-
gap: 32px;
|
|
38
37
|
align-items: flex-start;
|
|
39
38
|
justify-content: flex-start;
|
|
40
39
|
position: relative;
|
|
@@ -655,7 +654,7 @@
|
|
|
655
654
|
border-style: solid;
|
|
656
655
|
border-color: var(--gray-200, #eaecf0);
|
|
657
656
|
border-width: 0px 0px 1px 0px;
|
|
658
|
-
|
|
657
|
+
|
|
659
658
|
display: flex;
|
|
660
659
|
flex-direction: row;
|
|
661
660
|
gap: 0px;
|
|
@@ -688,7 +687,7 @@
|
|
|
688
687
|
border-style: solid;
|
|
689
688
|
border-color: var(--gray-200, #eaecf0);
|
|
690
689
|
border-width: 0px 0px 1px 0px;
|
|
691
|
-
|
|
690
|
+
|
|
692
691
|
display: flex;
|
|
693
692
|
flex-direction: column;
|
|
694
693
|
gap: 0px;
|
|
@@ -756,7 +755,7 @@
|
|
|
756
755
|
border-style: solid;
|
|
757
756
|
border-color: var(--gray-200, #eaecf0);
|
|
758
757
|
border-width: 0px 0px 1px 0px;
|
|
759
|
-
|
|
758
|
+
|
|
760
759
|
display: flex;
|
|
761
760
|
flex-direction: column;
|
|
762
761
|
gap: 0px;
|
|
@@ -782,7 +781,7 @@
|
|
|
782
781
|
border-style: solid;
|
|
783
782
|
border-color: var(--gray-200, #eaecf0);
|
|
784
783
|
border-width: 0px 0px 1px 0px;
|
|
785
|
-
|
|
784
|
+
|
|
786
785
|
display: flex;
|
|
787
786
|
flex-direction: column;
|
|
788
787
|
gap: 0px;
|
|
@@ -1225,6 +1224,7 @@
|
|
|
1225
1224
|
flex-shrink: 0;
|
|
1226
1225
|
position: relative;
|
|
1227
1226
|
}
|
|
1227
|
+
|
|
1228
1228
|
.authorized-signature {
|
|
1229
1229
|
color: var(--Gray-500, #667085);
|
|
1230
1230
|
font-family: var(--text-xl-semibold-font-family,
|
|
@@ -1310,18 +1310,53 @@
|
|
|
1310
1310
|
</div>
|
|
1311
1311
|
</div>
|
|
1312
1312
|
</div>
|
|
1313
|
-
|
|
1313
|
+
|
|
1314
|
+
<div class="frame-2698" style="margin-top:100px;">
|
|
1314
1315
|
<div class="frame-9155">
|
|
1315
1316
|
<div class="frame-44">
|
|
1316
1317
|
<div class="frame-45">
|
|
1317
|
-
<div class="
|
|
1318
|
-
<div class="inv-24-25-00001"># {{invoice}}</div>
|
|
1318
|
+
<div class="balance-due">TAX INVOICE</div>
|
|
1319
1319
|
</div>
|
|
1320
1320
|
</div>
|
|
1321
|
+
<div class="_1234"># {{invoice}}</div>
|
|
1322
|
+
|
|
1323
|
+
</div>
|
|
1324
|
+
|
|
1325
|
+
</div>
|
|
1326
|
+
</div>
|
|
1327
|
+
|
|
1328
|
+
<div class="invoice-header">
|
|
1329
|
+
<div class="frame-9156">
|
|
1330
|
+
<div class="frame-55">
|
|
1331
|
+
<div class="frame-9158" style="margin-top:10px;">
|
|
1332
|
+
<div class="_2nd-floor-apeejay-business-centre-no-12-haddows-road-nungambakkam">
|
|
1333
|
+
BILL TO :</div>
|
|
1334
|
+
</div>
|
|
1335
|
+
<div class="frame-53">
|
|
1336
|
+
<div class="tango-it-solutions-india-private-ltd">
|
|
1337
|
+
{{companyName}}
|
|
1338
|
+
</div>
|
|
1339
|
+
</div>
|
|
1340
|
+
<div class="frame-9158">
|
|
1341
|
+
<div class="_2nd-floor-apeejay-business-centre-no-12-haddows-road-nungambakkam">
|
|
1342
|
+
{{companyAddress}}
|
|
1343
|
+
</div>
|
|
1344
|
+
<div class="chennai-tamil-nadu-600006-india">
|
|
1345
|
+
|
|
1346
|
+
</div>
|
|
1347
|
+
<div class="gstin-33-aagct-3124-r-1-z-2">GSTIN {{GSTNumber}}</div>
|
|
1348
|
+
</div>
|
|
1349
|
+
</div>
|
|
1350
|
+
<div class="gstin-33-aagct-3124-r-1-z-2">
|
|
1351
|
+
Place Of Supply: {{PlaceOfSupply}}
|
|
1352
|
+
</div>
|
|
1353
|
+
</div>
|
|
1354
|
+
<div class="frame-2698">
|
|
1355
|
+
<div class="frame-9155">
|
|
1321
1356
|
<div class="frame-2699">
|
|
1322
|
-
<div class="frame-45">
|
|
1323
|
-
<div class="balance-due">
|
|
1324
|
-
<div class="_1234">{{currencyType}}
|
|
1357
|
+
<div class="frame-45" style="margin-top:70px;">
|
|
1358
|
+
<div class="balance-due">Invoice Total</div>
|
|
1359
|
+
<div class="_1234">{{currencyType}}{{totalAmount}}</div>
|
|
1325
1360
|
</div>
|
|
1326
1361
|
</div>
|
|
1327
1362
|
</div>
|
|
@@ -1353,32 +1388,6 @@
|
|
|
1353
1388
|
</div>
|
|
1354
1389
|
</div>
|
|
1355
1390
|
</div>
|
|
1356
|
-
<div class="frame-9160">
|
|
1357
|
-
<div class="billing-info">
|
|
1358
|
-
<div class="frame-57">
|
|
1359
|
-
<div class="frame-56">
|
|
1360
|
-
<div class="bill-to">Bill to</div>
|
|
1361
|
-
<div class="frame-552">
|
|
1362
|
-
<div class="frame-53">
|
|
1363
|
-
<div class="registered-company-name">
|
|
1364
|
-
{{companyName}}
|
|
1365
|
-
</div>
|
|
1366
|
-
</div>
|
|
1367
|
-
<div
|
|
1368
|
-
class="billing-address-given-by-the-client-flat-no-012-ground-floor-the-banyan-apartment-jsr-layout-j-p-nagar-9th-phase-alahalli-anjanapura-post-bengaluru-560062-karnataka-india">
|
|
1369
|
-
{{companyAddress}}
|
|
1370
|
-
</div>
|
|
1371
|
-
<div class="frame-562">
|
|
1372
|
-
<div class="gstin-33-aafci-2595-g-1-z-9"> GSTIN {{GSTNumber}}</div>
|
|
1373
|
-
</div>
|
|
1374
|
-
</div>
|
|
1375
|
-
</div>
|
|
1376
|
-
</div>
|
|
1377
|
-
</div>
|
|
1378
|
-
<div class="place-of-supply-tamil-nadu-33">
|
|
1379
|
-
Place Of Supply: {{PlaceOfSupply}}
|
|
1380
|
-
</div>
|
|
1381
|
-
</div>
|
|
1382
1391
|
<div class="invoice-info">
|
|
1383
1392
|
<div class="card-header">
|
|
1384
1393
|
<div class="content">
|
|
@@ -1420,7 +1429,7 @@
|
|
|
1420
1429
|
</div>
|
|
1421
1430
|
{{#each products}}
|
|
1422
1431
|
<div class="table-cell3" style="padding:20px 24px 26px 24px;height:90px !important;">
|
|
1423
|
-
<div class="text4">{{
|
|
1432
|
+
<div class="text4">{{productName}}</div>
|
|
1424
1433
|
<div class="text5">{{description}}</div>
|
|
1425
1434
|
</div>
|
|
1426
1435
|
{{/each}}
|
|
@@ -1433,7 +1442,7 @@
|
|
|
1433
1442
|
</div>
|
|
1434
1443
|
{{#each products}}
|
|
1435
1444
|
<div class="table-cell4">
|
|
1436
|
-
<div class="text7">{{
|
|
1445
|
+
<div class="text7">{{month}}</div>
|
|
1437
1446
|
</div>
|
|
1438
1447
|
{{/each}}
|
|
1439
1448
|
</div>
|
|
@@ -1445,7 +1454,7 @@
|
|
|
1445
1454
|
</div>
|
|
1446
1455
|
{{#each products}}
|
|
1447
1456
|
<div class="table-cell4">
|
|
1448
|
-
<div class="text7">{{
|
|
1457
|
+
<div class="text7">{{HsnNumber}}</div>
|
|
1449
1458
|
</div>
|
|
1450
1459
|
{{/each}}
|
|
1451
1460
|
</div>
|
|
@@ -1457,7 +1466,7 @@
|
|
|
1457
1466
|
</div>
|
|
1458
1467
|
{{#each products}}
|
|
1459
1468
|
<div class="table-cell6">
|
|
1460
|
-
<div class="text8">{{
|
|
1469
|
+
<div class="text8">{{storeCount}}</div>
|
|
1461
1470
|
</div>
|
|
1462
1471
|
{{/each}}
|
|
1463
1472
|
</div>
|
|
@@ -1469,7 +1478,7 @@
|
|
|
1469
1478
|
</div>
|
|
1470
1479
|
{{#each products}}
|
|
1471
1480
|
<div class="table-cell6">
|
|
1472
|
-
<div class="text8">{{currency}} {{
|
|
1481
|
+
<div class="text8">{{currency}} {{price}}</div>
|
|
1473
1482
|
</div>
|
|
1474
1483
|
{{/each}}
|
|
1475
1484
|
|
|
@@ -1482,7 +1491,7 @@
|
|
|
1482
1491
|
</div>
|
|
1483
1492
|
{{#each products}}
|
|
1484
1493
|
<div class="table-cell6">
|
|
1485
|
-
<div class="text8">{{currency}} {{
|
|
1494
|
+
<div class="text8">{{currency}} {{amount}}</div>
|
|
1486
1495
|
</div>
|
|
1487
1496
|
{{/each}}
|
|
1488
1497
|
|
|
@@ -1492,7 +1501,7 @@
|
|
|
1492
1501
|
<div class="frame-2394">
|
|
1493
1502
|
<div class="text9">Sub Total</div>
|
|
1494
1503
|
<div class="frame-9157">
|
|
1495
|
-
<div class="text10">{{currencyType}} {{
|
|
1504
|
+
<div class="text10">{{currencyType}} {{amount}}</div>
|
|
1496
1505
|
</div>
|
|
1497
1506
|
</div>
|
|
1498
1507
|
{{#each tax }}
|
|
@@ -1569,6 +1578,87 @@
|
|
|
1569
1578
|
<div class="authorized-signature">This is a system generated invoice. No signature required</div>
|
|
1570
1579
|
{{!-- <div class="div">_________________________________</div> --}}
|
|
1571
1580
|
</div>
|
|
1581
|
+
|
|
1582
|
+
<div class="frame-9162">
|
|
1583
|
+
<div class="thanks-for-your-business">Annexure-1</div>
|
|
1584
|
+
</div>
|
|
1585
|
+
<div class="frame-2397">
|
|
1586
|
+
<div class="content2">
|
|
1587
|
+
<div class="column">
|
|
1588
|
+
<div class="table-header-cell" style="padding: 13px 80px 12px 100px;">
|
|
1589
|
+
<div class="table-header">
|
|
1590
|
+
<div class="text2">Store Name</div>
|
|
1591
|
+
</div>
|
|
1592
|
+
</div>
|
|
1593
|
+
{{#each annuxureData}}
|
|
1594
|
+
<div class="table-cell" style="height: 70px !important;width:250px">
|
|
1595
|
+
<div class="text3">{{storeName}}</div>
|
|
1596
|
+
</div>
|
|
1597
|
+
{{/each}}
|
|
1598
|
+
</div>
|
|
1599
|
+
<div class="column">
|
|
1600
|
+
<div class="table-header-cell" style="padding: 13px 60px 12px 22px;">
|
|
1601
|
+
<div class="table-header">
|
|
1602
|
+
<div class="text2">Products</div>
|
|
1603
|
+
</div>
|
|
1604
|
+
</div>
|
|
1605
|
+
{{#each annuxureData}}
|
|
1606
|
+
<div class="table-cell" style="height: 70px !important;">
|
|
1607
|
+
<div class="text3">{{productName}}</div>
|
|
1608
|
+
</div>
|
|
1609
|
+
{{/each}}
|
|
1610
|
+
</div>
|
|
1611
|
+
<div class="column">
|
|
1612
|
+
<div class="table-header-cell" style="padding: 13px 60px 12px 22px;">
|
|
1613
|
+
<div class="table-header">
|
|
1614
|
+
<div class="text2">Store ID</div>
|
|
1615
|
+
</div>
|
|
1616
|
+
</div>
|
|
1617
|
+
{{#each annuxureData}}
|
|
1618
|
+
<div class="table-cell" style="height: 70px !important;">
|
|
1619
|
+
<div class="text3">{{storeId}}</div>
|
|
1620
|
+
</div>
|
|
1621
|
+
{{/each}}
|
|
1622
|
+
</div>
|
|
1623
|
+
<div class="column">
|
|
1624
|
+
<div class="table-header-cell" style="padding: 13px 60px 12px 22px;">
|
|
1625
|
+
<div class="table-header">
|
|
1626
|
+
<div class="text2">Deployment Date</div>
|
|
1627
|
+
</div>
|
|
1628
|
+
</div>
|
|
1629
|
+
{{#each annuxureData}}
|
|
1630
|
+
<div class="table-cell" style="height: 70px !important;">
|
|
1631
|
+
<div class="text3">{{edgefirstFileDate}}</div>
|
|
1632
|
+
</div>
|
|
1633
|
+
{{/each}}
|
|
1634
|
+
</div>
|
|
1635
|
+
<div class="column">
|
|
1636
|
+
<div class="table-header-cell" style="padding: 13px 60px 12px 22px;">
|
|
1637
|
+
<div class="table-header">
|
|
1638
|
+
<div class="text6">Billing Days</div>
|
|
1639
|
+
</div>
|
|
1640
|
+
</div>
|
|
1641
|
+
{{#each annuxureData}}
|
|
1642
|
+
<div class="table-cell" style="height: 70px !important;">
|
|
1643
|
+
<div class="text7">{{workingdays}}</div>
|
|
1644
|
+
</div>
|
|
1645
|
+
{{/each}}
|
|
1646
|
+
|
|
1647
|
+
</div>
|
|
1648
|
+
<div class="column">
|
|
1649
|
+
<div class="table-header-cell" style="padding: 13px 60px 12px 22px;">
|
|
1650
|
+
<div class="table-header">
|
|
1651
|
+
<div class="text6">Price Per Month</div>
|
|
1652
|
+
</div>
|
|
1653
|
+
</div>
|
|
1654
|
+
{{#each annuxureData}}
|
|
1655
|
+
<div class="table-cell" style="height: 70px !important;">
|
|
1656
|
+
<div class="text7">{{currencyType}} {{runningCost}}</div>
|
|
1657
|
+
</div>
|
|
1658
|
+
{{/each}}
|
|
1659
|
+
</div>
|
|
1660
|
+
</div>
|
|
1661
|
+
</div>
|
|
1572
1662
|
</div>
|
|
1573
1663
|
</div>
|
|
1574
1664
|
|