tango-app-api-payment-subscription 3.0.31-dev → 3.0.33-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 +72 -4
- package/src/dtos/validation.dtos.js +8 -0
- package/src/hbs/invoiceRaised.hbs +59 -127
- package/src/hbs/revisedPriceEmail.hbs +53 -143
- package/src/routes/paymentSubscription.routes.js +2 -1
- package/src/services/user.service.js +3 -0
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;
|
|
@@ -1042,6 +1047,7 @@ export const unsubscribeApproval = async ( req, res ) => {
|
|
|
1042
1047
|
clientProducts.status = 'deactive';
|
|
1043
1048
|
clientProducts.save();
|
|
1044
1049
|
await storeService.updateMany( { clientId: requestData.clientId }, { status: 'deactive' } );
|
|
1050
|
+
await userService.updateMany( { clientId: requestData.clientId }, { isActive: false } );
|
|
1045
1051
|
let userDetails= await userService.findOne( { clientId: requestData.clientId, role: 'superadmin' } );
|
|
1046
1052
|
if ( userDetails ) {
|
|
1047
1053
|
const templateHtml = fs.readFileSync( path.resolve( path.dirname( '' ) ) + '/src/hbs/trialUnsubscribeEmail.hbs', 'utf8' );
|
|
@@ -1621,7 +1627,22 @@ export const pricingListUpdate = async ( req, res ) => {
|
|
|
1621
1627
|
if ( !req.body.type ) {
|
|
1622
1628
|
req.body.type = 'standard';
|
|
1623
1629
|
}
|
|
1630
|
+
let productList;
|
|
1624
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.priceType == 'step' ) {
|
|
1636
|
+
item.storeCount = item.storeRange;
|
|
1637
|
+
}
|
|
1638
|
+
amount = amount + item.price;
|
|
1639
|
+
} );
|
|
1640
|
+
productList = {
|
|
1641
|
+
...productList,
|
|
1642
|
+
amount: amount,
|
|
1643
|
+
total: amount.toFixed( 2 ),
|
|
1644
|
+
discount: 0,
|
|
1645
|
+
};
|
|
1625
1646
|
req.body.products.forEach( ( item ) => {
|
|
1626
1647
|
delete item.originalPrice;
|
|
1627
1648
|
delete item.oldPrice;
|
|
@@ -1650,10 +1671,10 @@ export const pricingListUpdate = async ( req, res ) => {
|
|
|
1650
1671
|
if ( userDetails ) {
|
|
1651
1672
|
const templateHtml = fs.readFileSync( path.resolve( path.dirname( '' ) ) + '/src/hbs/revisedPriceEmail.hbs', 'utf8' );
|
|
1652
1673
|
const template = Handlebars.compile( templateHtml );
|
|
1653
|
-
const html = template( { data:
|
|
1674
|
+
const html = template( { data: productList } );
|
|
1654
1675
|
let params = {
|
|
1655
1676
|
toEmail: userDetails.email,
|
|
1656
|
-
mailSubject: '
|
|
1677
|
+
mailSubject: 'Invoice Revised',
|
|
1657
1678
|
htmlBody: html,
|
|
1658
1679
|
attachment: '',
|
|
1659
1680
|
sourceEmail: appConfig.cloud.aws.ses.adminEmail,
|
|
@@ -1798,7 +1819,7 @@ export const updatedRevisedPrice = async ( req, res ) => {
|
|
|
1798
1819
|
const template = Handlebars.compile( templateHtml );
|
|
1799
1820
|
const html = template( { data: invoiceInfo } );
|
|
1800
1821
|
let params = {
|
|
1801
|
-
toEmail:
|
|
1822
|
+
toEmail: userDetails.email,
|
|
1802
1823
|
mailSubject: 'Credit Note',
|
|
1803
1824
|
htmlBody: html,
|
|
1804
1825
|
attachment: '',
|
|
@@ -2299,3 +2320,50 @@ function convertINRtoUSD( amountINR ) {
|
|
|
2299
2320
|
const amountUSD = amountINR * exchangeRate;
|
|
2300
2321
|
return amountUSD;
|
|
2301
2322
|
}
|
|
2323
|
+
|
|
2324
|
+
|
|
2325
|
+
export const invoiceRevised = async ( req, res ) => {
|
|
2326
|
+
try {
|
|
2327
|
+
let invoiceDetails = await invoiceService.findOne( { _id: req.params.invoiceId } );
|
|
2328
|
+
if ( !invoiceDetails ) {
|
|
2329
|
+
return res.sendError( 'no data found', 204 );
|
|
2330
|
+
}
|
|
2331
|
+
let userDetails= await userService.findOne( { clientId: invoiceDetails.clientId, role: 'superadmin' } );
|
|
2332
|
+
let clientDetails = await paymentService.findOne( { clientId: invoiceDetails.clientId } );
|
|
2333
|
+
if ( userDetails ) {
|
|
2334
|
+
let amount = 0;
|
|
2335
|
+
let invoiceDate= dayjs( invoiceDetails.createdAt ).format( 'DD MMM, YYYY' );
|
|
2336
|
+
let days = clientDetails?.paymentInvoice?.extendPaymentPeriodDays || 10;
|
|
2337
|
+
let dueDate = invoiceDetails?.dueDate ? dayjs( invoiceDetails?.dueDate ).format( 'DD MMM, YYYY' ) : dayjs().add( days, 'days' ).format( 'DD MMM, YYYY' );
|
|
2338
|
+
invoiceDetails.products.forEach( ( item ) => {
|
|
2339
|
+
if ( clientDetails.priceType == 'step' ) {
|
|
2340
|
+
item.count = item.product.storeRange;
|
|
2341
|
+
}
|
|
2342
|
+
amount = amount + item.price;
|
|
2343
|
+
} );
|
|
2344
|
+
let data = {
|
|
2345
|
+
...invoiceDetails._doc,
|
|
2346
|
+
amount: amount,
|
|
2347
|
+
discount: invoiceDetails.discount,
|
|
2348
|
+
total: amount.toFixed( 2 ),
|
|
2349
|
+
invoiceDate,
|
|
2350
|
+
dueDate,
|
|
2351
|
+
};
|
|
2352
|
+
const templateHtml = fs.readFileSync( path.resolve( path.dirname( '' ) ) + '/src/hbs/invoiceRaised.hbs', 'utf8' );
|
|
2353
|
+
const template = Handlebars.compile( templateHtml );
|
|
2354
|
+
const html = template( { data: data } );
|
|
2355
|
+
let params = {
|
|
2356
|
+
toEmail: userDetails.email,
|
|
2357
|
+
mailSubject: 'Invoice Revised Successfully',
|
|
2358
|
+
htmlBody: html,
|
|
2359
|
+
attachment: '',
|
|
2360
|
+
sourceEmail: appConfig.cloud.aws.ses.adminEmail,
|
|
2361
|
+
};
|
|
2362
|
+
await sendEmailWithSES( params.toEmail, params.mailSubject, params.htmlBody, params.attachment, params.sourceEmail );
|
|
2363
|
+
return res.sendSuccess( 'Invoice Revised Successfully' );
|
|
2364
|
+
}
|
|
2365
|
+
} catch ( e ) {
|
|
2366
|
+
logger.error( { error: e, function: 'invoiceRevised' } );
|
|
2367
|
+
return res.sendError( e, 500 );
|
|
2368
|
+
}
|
|
2369
|
+
};
|
|
@@ -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
|
+
|
|
@@ -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>${{basePrice}}</td>
|
|
563
|
+
<td>{{count}}</td>
|
|
564
|
+
<td>${{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.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.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.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>${{basePrice}}</td>
|
|
162
|
+
<td>{{storeCount}}</td>
|
|
163
|
+
<td>${{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.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.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.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 );
|
|
@@ -3,3 +3,6 @@ import model from 'tango-api-schema';
|
|
|
3
3
|
export const findOne = async ( query = {}, record = {} ) => {
|
|
4
4
|
return await model.userModel.findOne( query, record );
|
|
5
5
|
};
|
|
6
|
+
export const updateMany = async ( query = {}, record = {} ) => {
|
|
7
|
+
return await model.userModel.updateMany( query, record );
|
|
8
|
+
};
|