tango-app-api-payment-subscription 3.0.32-dev → 3.0.34-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/package.json +1 -1
- package/src/controllers/paymentSubscription.controllers.js +94 -5
- package/src/dtos/validation.dtos.js +8 -0
- package/src/hbs/invoicePdf.hbs +5 -5
- package/src/hbs/invoiceRaised.hbs +59 -127
- package/src/hbs/revisedPriceEmail.hbs +53 -143
- package/src/routes/paymentSubscription.routes.js +2 -1
package/package.json
CHANGED
|
@@ -221,6 +221,7 @@ export const clientBillingSubscriptionInfo = async ( req, res, next ) => {
|
|
|
221
221
|
|
|
222
222
|
export const pricingInfo = async ( req, res ) => {
|
|
223
223
|
try {
|
|
224
|
+
req.body.calculateSignup = true;
|
|
224
225
|
let pricingDetails = await calculatePricing( req, res );
|
|
225
226
|
return res.sendSuccess( pricingDetails );
|
|
226
227
|
} catch ( e ) {
|
|
@@ -265,7 +266,11 @@ async function calculatePricing( req, res ) {
|
|
|
265
266
|
let getProduct = productList.find( ( item ) => item.productName == element );
|
|
266
267
|
let camaraPerSqft = getProduct.camaraPerStores.filter( ( data ) => data.sqft == input.camaraPerSqft );
|
|
267
268
|
let basicprice = Math.round( getProduct.basePrice * ( camaraPerSqft[0].camaraCount ) );
|
|
268
|
-
|
|
269
|
+
if ( req.body.calculateSignup ) {
|
|
270
|
+
productDiscounts.push( getProduct.signupPercentage );
|
|
271
|
+
} else {
|
|
272
|
+
productDiscounts.push( getProduct.discoutPercentage );
|
|
273
|
+
}
|
|
269
274
|
let stage = 0;
|
|
270
275
|
if ( input.storesCount == '1-25' ) {
|
|
271
276
|
stage = 0;
|
|
@@ -1622,7 +1627,27 @@ export const pricingListUpdate = async ( req, res ) => {
|
|
|
1622
1627
|
if ( !req.body.type ) {
|
|
1623
1628
|
req.body.type = 'standard';
|
|
1624
1629
|
}
|
|
1630
|
+
let productList;
|
|
1625
1631
|
if ( req.body?.products && req.body?.products?.length ) {
|
|
1632
|
+
productList = JSON.parse( JSON.stringify( req.body ) );
|
|
1633
|
+
let amount =0;
|
|
1634
|
+
productList.products.forEach( ( item ) => {
|
|
1635
|
+
if ( req.body.client.paymentInvoice.currencyType == 'dollar' ) {
|
|
1636
|
+
item.basePrice = convertINRtoUSD( item.basePrice );
|
|
1637
|
+
item.price = convertINRtoUSD( item.price );
|
|
1638
|
+
}
|
|
1639
|
+
if ( req.body.client.priceType == 'step' ) {
|
|
1640
|
+
item.storeCount = item.storeRange;
|
|
1641
|
+
}
|
|
1642
|
+
amount = amount + item.price;
|
|
1643
|
+
} );
|
|
1644
|
+
productList = {
|
|
1645
|
+
...productList,
|
|
1646
|
+
amount: amount,
|
|
1647
|
+
currencyType: req.body.client.paymentInvoice.currencyType == 'dollar' ? '$' : '₹',
|
|
1648
|
+
total: amount.toFixed( 2 ),
|
|
1649
|
+
discount: 0,
|
|
1650
|
+
};
|
|
1626
1651
|
req.body.products.forEach( ( item ) => {
|
|
1627
1652
|
delete item.originalPrice;
|
|
1628
1653
|
delete item.oldPrice;
|
|
@@ -1651,10 +1676,10 @@ export const pricingListUpdate = async ( req, res ) => {
|
|
|
1651
1676
|
if ( userDetails ) {
|
|
1652
1677
|
const templateHtml = fs.readFileSync( path.resolve( path.dirname( '' ) ) + '/src/hbs/revisedPriceEmail.hbs', 'utf8' );
|
|
1653
1678
|
const template = Handlebars.compile( templateHtml );
|
|
1654
|
-
const html = template( { data:
|
|
1679
|
+
const html = template( { data: productList } );
|
|
1655
1680
|
let params = {
|
|
1656
1681
|
toEmail: userDetails.email,
|
|
1657
|
-
mailSubject: '
|
|
1682
|
+
mailSubject: 'Invoice Revised',
|
|
1658
1683
|
htmlBody: html,
|
|
1659
1684
|
attachment: '',
|
|
1660
1685
|
sourceEmail: appConfig.cloud.aws.ses.adminEmail,
|
|
@@ -1799,7 +1824,7 @@ export const updatedRevisedPrice = async ( req, res ) => {
|
|
|
1799
1824
|
const template = Handlebars.compile( templateHtml );
|
|
1800
1825
|
const html = template( { data: invoiceInfo } );
|
|
1801
1826
|
let params = {
|
|
1802
|
-
toEmail:
|
|
1827
|
+
toEmail: userDetails.email,
|
|
1803
1828
|
mailSubject: 'Credit Note',
|
|
1804
1829
|
htmlBody: html,
|
|
1805
1830
|
attachment: '',
|
|
@@ -1933,7 +1958,7 @@ export const getExpiredClients = async ( req, res ) => {
|
|
|
1933
1958
|
{
|
|
1934
1959
|
$match: {
|
|
1935
1960
|
'planDetails.product.status': 'trial',
|
|
1936
|
-
'planDetails.product.trialEndDate': { $
|
|
1961
|
+
'planDetails.product.trialEndDate': { $gt: end },
|
|
1937
1962
|
},
|
|
1938
1963
|
},
|
|
1939
1964
|
];
|
|
@@ -1981,6 +2006,10 @@ export const invoiceDownload = async ( req, res ) => {
|
|
|
1981
2006
|
let clientDetails = await paymentService.findOne( { clientId: invoiceInfo.clientId } );
|
|
1982
2007
|
let amount = 0;
|
|
1983
2008
|
invoiceInfo.products.forEach( ( item ) => {
|
|
2009
|
+
if ( clientDetails.paymentInvoice.currencyType == 'dollar' ) {
|
|
2010
|
+
item.basePrice = convertINRtoUSD( item.basePrice );
|
|
2011
|
+
item.price = convertINRtoUSD( item.price );
|
|
2012
|
+
}
|
|
1984
2013
|
if ( clientDetails.priceType == 'step' ) {
|
|
1985
2014
|
item.count = item.product.storeRange;
|
|
1986
2015
|
}
|
|
@@ -1996,6 +2025,7 @@ export const invoiceDownload = async ( req, res ) => {
|
|
|
1996
2025
|
extendDays: clientDetails.paymentInvoice.extendPaymentPeriodDays,
|
|
1997
2026
|
address: clientDetails.billingDetails.billingAddress,
|
|
1998
2027
|
amount: amount,
|
|
2028
|
+
currencyType: clientDetails?.paymentInvoice?.currencyType == 'dollar' ? '$' : '₹',
|
|
1999
2029
|
// total: ( amount + ( parseFloat( amount ) * 0.19 ) ).toFixed( 2 ),
|
|
2000
2030
|
total: amount.toFixed( 2 ),
|
|
2001
2031
|
invoiceDate,
|
|
@@ -2271,14 +2301,21 @@ export const invoiceGenerate = async ( req, res ) => {
|
|
|
2271
2301
|
invoiceDetails.forEach( ( item ) => {
|
|
2272
2302
|
amount = item.price + amount;
|
|
2273
2303
|
} );
|
|
2304
|
+
let storeQuery = {
|
|
2305
|
+
clientId: requestClient[clientIndex],
|
|
2306
|
+
status: 'active',
|
|
2307
|
+
};
|
|
2308
|
+
let storeCount = await storeService.count( storeQuery );
|
|
2274
2309
|
let data = {
|
|
2275
2310
|
invoice: `invoice#${requestClient[clientIndex]}-${dayjs().format( 'MMM YYYY' )}`,
|
|
2276
2311
|
products: invoiceDetails,
|
|
2277
2312
|
status: 'pending',
|
|
2278
2313
|
amount: amount,
|
|
2314
|
+
totalAmount: amount,
|
|
2279
2315
|
clientId: requestClient[clientIndex],
|
|
2280
2316
|
paymentMethod: getClient?.paymentInvoice?.paymentType || 'online',
|
|
2281
2317
|
billingDate: new Date(),
|
|
2318
|
+
stores: storeCount,
|
|
2282
2319
|
};
|
|
2283
2320
|
|
|
2284
2321
|
await invoiceService.create( data );
|
|
@@ -2300,3 +2337,55 @@ function convertINRtoUSD( amountINR ) {
|
|
|
2300
2337
|
const amountUSD = amountINR * exchangeRate;
|
|
2301
2338
|
return amountUSD;
|
|
2302
2339
|
}
|
|
2340
|
+
|
|
2341
|
+
|
|
2342
|
+
export const invoiceRevised = async ( req, res ) => {
|
|
2343
|
+
try {
|
|
2344
|
+
let invoiceDetails = await invoiceService.findOne( { _id: req.params.invoiceId } );
|
|
2345
|
+
if ( !invoiceDetails ) {
|
|
2346
|
+
return res.sendError( 'no data found', 204 );
|
|
2347
|
+
}
|
|
2348
|
+
let userDetails= await userService.findOne( { clientId: invoiceDetails.clientId, role: 'superadmin' } );
|
|
2349
|
+
let clientDetails = await paymentService.findOne( { clientId: invoiceDetails.clientId } );
|
|
2350
|
+
if ( userDetails ) {
|
|
2351
|
+
let amount = 0;
|
|
2352
|
+
let invoiceDate= dayjs( invoiceDetails.createdAt ).format( 'DD MMM, YYYY' );
|
|
2353
|
+
let days = clientDetails?.paymentInvoice?.extendPaymentPeriodDays || 10;
|
|
2354
|
+
let dueDate = invoiceDetails?.dueDate ? dayjs( invoiceDetails?.dueDate ).format( 'DD MMM, YYYY' ) : dayjs().add( days, 'days' ).format( 'DD MMM, YYYY' );
|
|
2355
|
+
invoiceDetails.products.forEach( ( item ) => {
|
|
2356
|
+
if ( clientDetails?.paymentInvoice?.currencyType == 'dollar' ) {
|
|
2357
|
+
item.basePrice = convertINRtoUSD( item.basePrice );
|
|
2358
|
+
item.price = convertINRtoUSD( item.price );
|
|
2359
|
+
}
|
|
2360
|
+
if ( clientDetails.priceType == 'step' ) {
|
|
2361
|
+
item.count = item.product.storeRange;
|
|
2362
|
+
}
|
|
2363
|
+
amount = amount + item.price;
|
|
2364
|
+
} );
|
|
2365
|
+
let data = {
|
|
2366
|
+
...invoiceDetails._doc,
|
|
2367
|
+
amount: amount,
|
|
2368
|
+
discount: invoiceDetails.discount,
|
|
2369
|
+
currencyType: clientDetails?.paymentInvoice?.currencyType == 'dollar' ? '$' : '₹',
|
|
2370
|
+
total: amount.toFixed( 2 ),
|
|
2371
|
+
invoiceDate,
|
|
2372
|
+
dueDate,
|
|
2373
|
+
};
|
|
2374
|
+
const templateHtml = fs.readFileSync( path.resolve( path.dirname( '' ) ) + '/src/hbs/invoiceRaised.hbs', 'utf8' );
|
|
2375
|
+
const template = Handlebars.compile( templateHtml );
|
|
2376
|
+
const html = template( { data: data } );
|
|
2377
|
+
let params = {
|
|
2378
|
+
toEmail: userDetails.email,
|
|
2379
|
+
mailSubject: 'Invoice Revised Successfully',
|
|
2380
|
+
htmlBody: html,
|
|
2381
|
+
attachment: '',
|
|
2382
|
+
sourceEmail: appConfig.cloud.aws.ses.adminEmail,
|
|
2383
|
+
};
|
|
2384
|
+
await sendEmailWithSES( params.toEmail, params.mailSubject, params.htmlBody, params.attachment, params.sourceEmail );
|
|
2385
|
+
return res.sendSuccess( 'Invoice Revised Successfully' );
|
|
2386
|
+
}
|
|
2387
|
+
} catch ( e ) {
|
|
2388
|
+
logger.error( { error: e, function: 'invoiceRevised' } );
|
|
2389
|
+
return res.sendError( e, 500 );
|
|
2390
|
+
}
|
|
2391
|
+
};
|
|
@@ -220,3 +220,11 @@ export const invoiceUpdateParams = {
|
|
|
220
220
|
body: invoiceUpdateSchema,
|
|
221
221
|
};
|
|
222
222
|
|
|
223
|
+
|
|
224
|
+
export const invoiceRevisedSchema = {
|
|
225
|
+
invoiceId: joi.string().required(),
|
|
226
|
+
};
|
|
227
|
+
export const invoiceRevisedParams = {
|
|
228
|
+
params: invoiceRevisedSchema,
|
|
229
|
+
};
|
|
230
|
+
|
package/src/hbs/invoicePdf.hbs
CHANGED
|
@@ -93,9 +93,9 @@
|
|
|
93
93
|
{{#each data.products}}
|
|
94
94
|
<tr style="border:none;margin-top:10px;">
|
|
95
95
|
<td>{{product.product}}</td>
|
|
96
|
-
<td
|
|
96
|
+
<td><span style="font-size:15px">{{../data.currencyType}} </span>{{basePrice}}</td>
|
|
97
97
|
<td>{{count}}</td>
|
|
98
|
-
<td
|
|
98
|
+
<td><span style="font-size:15px">{{../data.currencyType}} </span> {{price}}</td>
|
|
99
99
|
</tr>
|
|
100
100
|
{{/each}}
|
|
101
101
|
<tr style="border:none;">
|
|
@@ -108,7 +108,7 @@
|
|
|
108
108
|
<td>Sub Total</td>
|
|
109
109
|
<td></td>
|
|
110
110
|
<td></td>
|
|
111
|
-
<td
|
|
111
|
+
<td><span style="font-size:15px">{{data.currencyType}} </span> {{data.amount}}</td>
|
|
112
112
|
</tr>
|
|
113
113
|
<tr style="border:none;margin-top:10px;">
|
|
114
114
|
<td>IGST</td>
|
|
@@ -120,7 +120,7 @@
|
|
|
120
120
|
<td>Total</td>
|
|
121
121
|
<td></td>
|
|
122
122
|
<td></td>
|
|
123
|
-
<td
|
|
123
|
+
<td><span style="font-size:15px">{{data.currencyType}} </span> {{data.total}}</td>
|
|
124
124
|
</tr>
|
|
125
125
|
<tr style="border:none;margin-top:10px;">
|
|
126
126
|
<td>Discount</td>
|
|
@@ -138,7 +138,7 @@
|
|
|
138
138
|
<td>Final Value</td>
|
|
139
139
|
<td></td>
|
|
140
140
|
<td></td>
|
|
141
|
-
<td
|
|
141
|
+
<td><span style="font-size:15px">{{data.currencyType}} </span> {{data.total}}</td>
|
|
142
142
|
</tr>
|
|
143
143
|
</table>
|
|
144
144
|
<br/>
|
|
@@ -545,138 +545,70 @@
|
|
|
545
545
|
<div class="body4">
|
|
546
546
|
<span>
|
|
547
547
|
<span class="body-4-span">No. Invoice:</span>
|
|
548
|
-
<span class="body-4-span2">
|
|
548
|
+
<span class="body-4-span2">{{data.invoice}}</span>
|
|
549
549
|
</span>
|
|
550
550
|
</div>
|
|
551
551
|
<div class="invoicedetailsframe">
|
|
552
|
-
<
|
|
553
|
-
<
|
|
554
|
-
<
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
</
|
|
562
|
-
<
|
|
563
|
-
|
|
564
|
-
</
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
<
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
</
|
|
575
|
-
<
|
|
576
|
-
|
|
577
|
-
</
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
</
|
|
581
|
-
<
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
</
|
|
585
|
-
<
|
|
586
|
-
<
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
<
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
<
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
<div class="table-cell">
|
|
611
|
-
<div class="text6">$10,000</div>
|
|
612
|
-
</div>
|
|
613
|
-
<div class="table-cell">
|
|
614
|
-
<div class="text6">$15,000</div>
|
|
615
|
-
</div>
|
|
616
|
-
</div>
|
|
617
|
-
</div>
|
|
618
|
-
<div class="billingvalueframe">
|
|
619
|
-
<div class="subtotal">
|
|
620
|
-
<div class="framestartvalue">
|
|
621
|
-
<div class="text7">Sub Total</div>
|
|
622
|
-
</div>
|
|
623
|
-
<div class="frame-endvalue">
|
|
624
|
-
<div class="text8">$0</div>
|
|
625
|
-
</div>
|
|
626
|
-
</div>
|
|
627
|
-
<div class="IGST">
|
|
628
|
-
<div class="framestartvalue">
|
|
629
|
-
<div class="text7">IGST</div>
|
|
630
|
-
</div>
|
|
631
|
-
<div class="frame-endvalue">
|
|
632
|
-
<div class="text8">9%</div>
|
|
633
|
-
</div>
|
|
634
|
-
</div>
|
|
635
|
-
<div class="Total">
|
|
636
|
-
<div class="framestartvalue">
|
|
637
|
-
<div class="text7">Total</div>
|
|
638
|
-
</div>
|
|
639
|
-
<div class="frame-endvalue">
|
|
640
|
-
<div class="text8">$0</div>
|
|
641
|
-
</div>
|
|
642
|
-
</div>
|
|
643
|
-
<div class="Discount">
|
|
644
|
-
<div class="framestartvalue">
|
|
645
|
-
<div class="text7">Discount</div>
|
|
646
|
-
</div>
|
|
647
|
-
<div class="frame-endvalue">
|
|
648
|
-
<div class="text8">0% (- $0 )</div>
|
|
649
|
-
</div>
|
|
650
|
-
</div>
|
|
651
|
-
<div class="divider">
|
|
652
|
-
<svg
|
|
653
|
-
class="container"
|
|
654
|
-
width="541"
|
|
655
|
-
height="1"
|
|
656
|
-
viewBox="0 0 541 1"
|
|
657
|
-
fill="none"
|
|
658
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
659
|
-
>
|
|
660
|
-
<path
|
|
661
|
-
fill-rule="evenodd"
|
|
662
|
-
clip-rule="evenodd"
|
|
663
|
-
d="M509 1H32V0H509V1Z"
|
|
664
|
-
fill="#EAECF0"
|
|
665
|
-
/>
|
|
666
|
-
</svg>
|
|
667
|
-
</div>
|
|
668
|
-
<div class="finalvalue">
|
|
669
|
-
<div class="framestartvalue">
|
|
670
|
-
<div class="text7">Final Value</div>
|
|
671
|
-
</div>
|
|
672
|
-
<div class="frame-endvalue">
|
|
673
|
-
<div class="text8">$0</div>
|
|
674
|
-
</div>
|
|
675
|
-
</div>
|
|
676
|
-
</div>
|
|
552
|
+
<table style="max-width: 600px;border:none" border="0" cellpadding="0" cellspacing="0" width="100%">
|
|
553
|
+
<tr style="border:none;height:40px;margin-top:10px;text-align:left">
|
|
554
|
+
<th style="width:300px;">Description</th>
|
|
555
|
+
<th style="width:120px;">Price</th>
|
|
556
|
+
<th style="width:120px;">Stores</th>
|
|
557
|
+
<th style="width:120px;">Total Amount</th>
|
|
558
|
+
</tr>
|
|
559
|
+
{{#each data.products}}
|
|
560
|
+
<tr style="border:none;margin-top:10px;">
|
|
561
|
+
<td>{{product.product}}</td>
|
|
562
|
+
<td>{{../data.currencyType}} {{basePrice}}</td>
|
|
563
|
+
<td>{{count}}</td>
|
|
564
|
+
<td>{{../data.currencyType}} {{price}}</td>
|
|
565
|
+
</tr>
|
|
566
|
+
{{/each}}
|
|
567
|
+
<tr style="border:1px solid grey;">
|
|
568
|
+
<td></td>
|
|
569
|
+
<td></td>
|
|
570
|
+
<td></td>
|
|
571
|
+
<td></td>
|
|
572
|
+
</tr>
|
|
573
|
+
<tr style="border:none;border-top: 5px solid #eaecf0;margin-top:10px;">
|
|
574
|
+
<td>Sub Total</td>
|
|
575
|
+
<td></td>
|
|
576
|
+
<td></td>
|
|
577
|
+
<td>{{data.currencyType}} {{data.amount}}</td>
|
|
578
|
+
</tr>
|
|
579
|
+
<tr style="border:none;margin-top:10px;">
|
|
580
|
+
<td>IGST</td>
|
|
581
|
+
<td></td>
|
|
582
|
+
<td></td>
|
|
583
|
+
<td>0%</td>
|
|
584
|
+
</tr>
|
|
585
|
+
<tr style="border:none;margin-top:10px;">
|
|
586
|
+
<td>Total</td>
|
|
587
|
+
<td></td>
|
|
588
|
+
<td></td>
|
|
589
|
+
<td>{{data.currencyType}} {{data.total}}</td>
|
|
590
|
+
</tr>
|
|
591
|
+
<tr style="border:none;margin-top:10px;">
|
|
592
|
+
<td>Discount</td>
|
|
593
|
+
<td></td>
|
|
594
|
+
<td></td>
|
|
595
|
+
<td>{{data.discount}}</td>
|
|
596
|
+
</tr>
|
|
597
|
+
<tr style="border:1px solid grey;">
|
|
598
|
+
<td></td>
|
|
599
|
+
<td></td>
|
|
600
|
+
<td></td>
|
|
601
|
+
<td></td>
|
|
602
|
+
</tr>
|
|
603
|
+
<tr style="border:none;border-top: 5px solid #eaecf0;margin-top:10px;">
|
|
604
|
+
<td>Final Value</td>
|
|
605
|
+
<td></td>
|
|
606
|
+
<td></td>
|
|
607
|
+
<td>{{data.currencyType}} {{data.total}}</td>
|
|
608
|
+
</tr>
|
|
609
|
+
</table>
|
|
677
610
|
</div>
|
|
678
611
|
</div>
|
|
679
|
-
<div class="line"></div>
|
|
680
612
|
<div class="text2">
|
|
681
613
|
<div class="subheading">
|
|
682
614
|
Please complete the payment at the earliest for the continuation of our
|
|
@@ -100,8 +100,8 @@
|
|
|
100
100
|
<p style="margin-top: 0px;margin-bottom: 0px;"><a class="o_text-white"
|
|
101
101
|
href="https://tangoeye.ai/"
|
|
102
102
|
style="text-decoration: none;outline: none;color: #ffffff;"><img
|
|
103
|
-
src="https://devtangoretail-api.tangoeye.ai/logo.png"
|
|
104
|
-
|
|
103
|
+
src="https://devtangoretail-api.tangoeye.ai/logo.png" width="200" height="100"
|
|
104
|
+
alt="SimpleApp"
|
|
105
105
|
style="-ms-interpolation-mode: bicubic;vertical-align: middle;border: 0;line-height: 100%;height: auto;outline: none;text-decoration: none;"></a>
|
|
106
106
|
</p>
|
|
107
107
|
</td>
|
|
@@ -145,162 +145,72 @@
|
|
|
145
145
|
</td>
|
|
146
146
|
</tr>
|
|
147
147
|
<tr>
|
|
148
|
-
<td align="center" bgcolor="#dbe5ea" style="padding:
|
|
149
|
-
<table border="0" cellpadding="0" cellspacing="0" width="100%"
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
</
|
|
156
|
-
<
|
|
157
|
-
style="padding-left: 30px;padding-right: 24px;padding-top:10px; font-size: 16px; line-height: 24px;font-weight:400;color:#384860">
|
|
158
|
-
<p style="margin: 0;">Price
|
|
159
|
-
</p>
|
|
160
|
-
</td>
|
|
161
|
-
<td align="left" bgcolor="#ffffff"
|
|
162
|
-
style="padding-left: 30px;padding-right: 24px;padding-top:10px; font-size: 16px; line-height: 24px;font-weight:400;color:#384860">
|
|
163
|
-
<p style="margin: 0;">Stores
|
|
164
|
-
</p>
|
|
165
|
-
</td>
|
|
166
|
-
<td align="left" bgcolor="#ffffff"
|
|
167
|
-
style="padding-left: 30px;padding-right: 24px;padding-top:10px; font-size: 16px; line-height: 24px;font-weight:400;color:#384860">
|
|
168
|
-
<p style="margin: 0;">Amount
|
|
169
|
-
</p>
|
|
170
|
-
</td>
|
|
148
|
+
<td align="center" bgcolor="#dbe5ea" style="padding:0 10px 0 10px">
|
|
149
|
+
<table align="center" bgcolor="#ffffff" border="0" cellpadding="0" cellspacing="0" width="100%"
|
|
150
|
+
style="max-width: 680px;">
|
|
151
|
+
<tr bgcolor="#ffffff"
|
|
152
|
+
style="border:none;height:40px;margin-top:10px;text-align:left">
|
|
153
|
+
<th style="width:300px;padding-left:30px;">Description</th>
|
|
154
|
+
<th style="width:120px;">Price</th>
|
|
155
|
+
<th style="width:120px;">Stores</th>
|
|
156
|
+
<th style="width:120px;">Total Amount</th>
|
|
171
157
|
</tr>
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
</td>
|
|
178
|
-
<td align="left" bgcolor="#ffffff"
|
|
179
|
-
style="padding-left: 30px;padding-right: 24px;padding-top:10px; font-size: 16px; line-height: 24px;font-weight:400;color:#384860">
|
|
180
|
-
<p style="margin: 0;">$0
|
|
181
|
-
</p>
|
|
182
|
-
</td>
|
|
183
|
-
<td align="left" bgcolor="#ffffff"
|
|
184
|
-
style="padding-left: 30px;padding-right: 24px;padding-top:10px; font-size: 16px; line-height: 24px;font-weight:400;color:#384860">
|
|
185
|
-
<p style="margin: 0;">1
|
|
186
|
-
</p>
|
|
187
|
-
</td>
|
|
188
|
-
<td align="left" bgcolor="#ffffff"
|
|
189
|
-
style="padding-left: 30px;padding-right: 24px;padding-top:10px; font-size: 16px; line-height: 24px;font-weight:400;color:#384860">
|
|
190
|
-
<p style="margin: 0;">$0
|
|
191
|
-
</p>
|
|
192
|
-
</td>
|
|
158
|
+
{{#each data.products}}
|
|
159
|
+
<tr bgcolor="#ffffff" style="border:none;margin-top:10px;">
|
|
160
|
+
<td style="padding-left:30px;">{{productName}}</td>
|
|
161
|
+
<td>{{../data.currencyType}} {{basePrice}}</td>
|
|
162
|
+
<td>{{storeCount}}</td>
|
|
163
|
+
<td>{{../data.currencyType}} {{price}}</td>
|
|
193
164
|
</tr>
|
|
165
|
+
{{/each}}
|
|
194
166
|
<tr>
|
|
195
167
|
<td align="left" bgcolor="#ffffff"
|
|
196
|
-
style="padding-left: 30px;padding-right: 24px;
|
|
197
|
-
<p
|
|
198
|
-
|
|
199
|
-
</td>
|
|
200
|
-
<td align="left" bgcolor="#ffffff"
|
|
201
|
-
style="padding-left: 30px;padding-right: 24px;padding-top:10px; font-size: 16px; line-height: 24px;font-weight:400;color:#384860">
|
|
202
|
-
<p style="margin: 0;">
|
|
203
|
-
</p>
|
|
204
|
-
</td>
|
|
205
|
-
<td align="left" bgcolor="#ffffff"
|
|
206
|
-
style="padding-left: 30px;padding-right: 24px;padding-top:10px; font-size: 16px; line-height: 24px;font-weight:400;color:#384860">
|
|
207
|
-
<p style="margin: 0;">
|
|
208
|
-
</p>
|
|
209
|
-
</td>
|
|
210
|
-
<td align="left" bgcolor="#ffffff"
|
|
211
|
-
style="padding-left: 30px;padding-right: 24px;padding-top:10px; font-size: 16px; line-height: 24px;font-weight:400;color:#384860">
|
|
212
|
-
<p style="margin: 0;">$0
|
|
168
|
+
style="padding-left: 30px;padding-right: 24px; font-size: 14px; line-height: 24px;">
|
|
169
|
+
<p class="o_heading o_mb-xxs"
|
|
170
|
+
style="width: 624px;height: 0px;border: 1px solid #CBD5E1;flex: none;order: 1;flex-grow: 0;">
|
|
213
171
|
</p>
|
|
214
172
|
</td>
|
|
215
173
|
</tr>
|
|
216
|
-
<tr
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
</td>
|
|
222
|
-
<td align="left" bgcolor="#ffffff"
|
|
223
|
-
style="padding-left: 30px;padding-right: 24px;padding-top:10px; font-size: 16px; line-height: 24px;font-weight:400;color:#384860">
|
|
224
|
-
<p style="margin: 0;">
|
|
225
|
-
</p>
|
|
226
|
-
</td>
|
|
227
|
-
<td align="left" bgcolor="#ffffff"
|
|
228
|
-
style="padding-left: 30px;padding-right: 24px;padding-top:10px; font-size: 16px; line-height: 24px;font-weight:400;color:#384860">
|
|
229
|
-
<p style="margin: 0;">
|
|
230
|
-
</p>
|
|
231
|
-
</td>
|
|
232
|
-
<td align="left" bgcolor="#ffffff"
|
|
233
|
-
style="padding-left: 30px;padding-right: 24px;padding-top:10px; font-size: 16px; line-height: 24px;font-weight:400;color:#384860">
|
|
234
|
-
<p style="margin: 0;">$0
|
|
235
|
-
</p>
|
|
236
|
-
</td>
|
|
174
|
+
<tr bgcolor="#ffffff"
|
|
175
|
+
style="border:none;margin-top:0px;">
|
|
176
|
+
<td style="padding-left:30px;">Sub Total</td>
|
|
177
|
+
<td></td>
|
|
178
|
+
<td></td>
|
|
179
|
+
<td>{{data.currencyType}} {{data.amount}}</td>
|
|
237
180
|
</tr>
|
|
238
|
-
<tr>
|
|
239
|
-
<td
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
</td>
|
|
244
|
-
<td align="left" bgcolor="#ffffff"
|
|
245
|
-
style="padding-left: 30px;padding-right: 24px;padding-top:10px; font-size: 16px; line-height: 24px;font-weight:400;color:#384860">
|
|
246
|
-
<p style="margin: 0;">
|
|
247
|
-
</p>
|
|
248
|
-
</td>
|
|
249
|
-
<td align="left" bgcolor="#ffffff"
|
|
250
|
-
style="padding-left: 30px;padding-right: 24px;padding-top:10px; font-size: 16px; line-height: 24px;font-weight:400;color:#384860">
|
|
251
|
-
<p style="margin: 0;">
|
|
252
|
-
</p>
|
|
253
|
-
</td>
|
|
254
|
-
<td align="left" bgcolor="#ffffff"
|
|
255
|
-
style="padding-left: 30px;padding-right: 24px;padding-top:10px; font-size: 16px; line-height: 24px;font-weight:400;color:#384860">
|
|
256
|
-
<p style="margin: 0;">$0
|
|
257
|
-
</p>
|
|
258
|
-
</td>
|
|
181
|
+
<tr bgcolor="#ffffff" style="border:none;margin-top:0px;">
|
|
182
|
+
<td style="padding-left:30px;">IGST</td>
|
|
183
|
+
<td></td>
|
|
184
|
+
<td></td>
|
|
185
|
+
<td>0%</td>
|
|
259
186
|
</tr>
|
|
260
|
-
<tr>
|
|
261
|
-
<td
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
<td align="left" bgcolor="#ffffff"
|
|
272
|
-
style="padding-left: 30px;padding-right: 24px;padding-top:10px; font-size: 16px; line-height: 24px;font-weight:400;color:#384860">
|
|
273
|
-
<p style="margin: 0;">
|
|
274
|
-
</p>
|
|
275
|
-
</td>
|
|
276
|
-
<td align="left" bgcolor="#ffffff"
|
|
277
|
-
style="padding-left: 30px;padding-right: 24px;padding-top:10px; font-size: 16px; line-height: 24px;font-weight:400;color:#384860">
|
|
278
|
-
<p style="margin: 0;">$0
|
|
279
|
-
</p>
|
|
280
|
-
</td>
|
|
187
|
+
<tr bgcolor="#ffffff" style="border:none;margin-top:0px;">
|
|
188
|
+
<td style="padding-left:30px;">Total</td>
|
|
189
|
+
<td></td>
|
|
190
|
+
<td></td>
|
|
191
|
+
<td>{{data.currencyType}} {{data.total}}</td>
|
|
192
|
+
</tr>
|
|
193
|
+
<tr bgcolor="#ffffff" style="border:none;margin-top:0px;">
|
|
194
|
+
<td style="padding-left:30px;">Discount</td>
|
|
195
|
+
<td></td>
|
|
196
|
+
<td></td>
|
|
197
|
+
<td>{{data.discount}}%</td>
|
|
281
198
|
</tr>
|
|
282
199
|
<tr>
|
|
283
200
|
<td align="left" bgcolor="#ffffff"
|
|
284
|
-
style="padding-left: 30px;padding-right: 24px;
|
|
285
|
-
<p
|
|
286
|
-
|
|
287
|
-
</td>
|
|
288
|
-
<td align="left" bgcolor="#ffffff"
|
|
289
|
-
style="padding-left: 30px;padding-right: 24px;padding-top:10px; font-size: 16px; line-height: 24px;font-weight:400;color:#384860">
|
|
290
|
-
<p style="margin: 0;">
|
|
291
|
-
</p>
|
|
292
|
-
</td>
|
|
293
|
-
<td align="left" bgcolor="#ffffff"
|
|
294
|
-
style="padding-left: 30px;padding-right: 24px;padding-top:10px; font-size: 16px; line-height: 24px;font-weight:400;color:#384860">
|
|
295
|
-
<p style="margin: 0;">
|
|
296
|
-
</p>
|
|
297
|
-
</td>
|
|
298
|
-
<td align="left" bgcolor="#ffffff"
|
|
299
|
-
style="padding-left: 30px;padding-right: 24px;padding-top:10px; font-size: 16px; line-height: 24px;font-weight:400;color:#384860">
|
|
300
|
-
<p style="margin: 0;">$0
|
|
201
|
+
style="padding-left: 30px;padding-right: 24px; font-size: 14px; line-height: 24px;">
|
|
202
|
+
<p class="o_heading o_mb-xxs"
|
|
203
|
+
style="width: 624px;height: 0px;border: 1px solid #CBD5E1;flex: none;order: 1;flex-grow: 0;">
|
|
301
204
|
</p>
|
|
302
205
|
</td>
|
|
303
206
|
</tr>
|
|
207
|
+
<tr bgcolor="#ffffff"
|
|
208
|
+
style="border:none;margin-top:10px;">
|
|
209
|
+
<td style="padding-left:30px;">Final Value</td>
|
|
210
|
+
<td></td>
|
|
211
|
+
<td></td>
|
|
212
|
+
<td>{{data.currencyType}} {{data.total}}</td>
|
|
213
|
+
</tr>
|
|
304
214
|
</table>
|
|
305
215
|
</td>
|
|
306
216
|
</tr>
|
|
@@ -157,5 +157,6 @@ paymentSubscriptionRouter.get( '/trialExpiredList', paymentController.getExpired
|
|
|
157
157
|
paymentSubscriptionRouter.post( '/invoiceDownload/:invoiceId', paymentController.invoiceDownload );
|
|
158
158
|
paymentSubscriptionRouter.post( '/invoiceStatusUpdate/:invoiceId', validate( validationDtos.invoiceUpdateParams ), paymentController.updateInvoiceStatus );
|
|
159
159
|
paymentSubscriptionRouter.post( '/invoice/create', validateClient, paymentController.invoiceCreate );
|
|
160
|
-
paymentSubscriptionRouter.post( '/dailyPricing/insert', validate( validationDtos.dailyPricingParams ), paymentController.dailyPricingInsert );
|
|
161
160
|
paymentSubscriptionRouter.post( '/invoiceGenerate', validate( validationDtos.invoiceGenerateParams ), paymentController.invoiceGenerate );
|
|
161
|
+
paymentSubscriptionRouter.post( '/dailyPricing/insert', validate( validationDtos.dailyPricingParams ), paymentController.dailyPricingInsert );
|
|
162
|
+
paymentSubscriptionRouter.get( '/invoiceRevised/:invoiceId', validate( validationDtos.invoiceRevisedParams ), paymentController.invoiceRevised );
|