Skip to content
This repository was archived by the owner on May 6, 2022. It is now read-only.

Commit 5253238

Browse files
authored
Merge pull request #87 from Tolfix/dev
v2.5
2 parents 3ba22b5 + 16e168e commit 5253238

30 files changed

+337
-57
lines changed

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "cpg-api",
3-
"version": "v2.4",
3+
"version": "v2.6",
44
"description": "Central Payment Gateway",
55
"main": "./build/Main.js",
66
"dependencies": {

src/Database/Models/Customers/Customer.model.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { Default_Language, MongoDB_URI } from "../../../Config";
44
import { ICustomer, ICustomerMethods } from "../../../Interfaces/Customer.interface";
55
import Logger from "../../../Lib/Logger";
66
import GetText from "../../../Translation/GetText";
7-
import { A_PaymentCurrency } from "../../../Types/PaymentTypes";
7+
import { currencyCodes } from "../../../Types/PaymentTypes";
88

99
const CustomerSchema = new Schema
1010
(
@@ -101,7 +101,7 @@ const CustomerSchema = new Schema
101101

102102
currency: {
103103
type: String,
104-
enum: A_PaymentCurrency,
104+
enum: currencyCodes,
105105
required: true,
106106
},
107107

src/Database/Models/Invoices.model.ts

+7
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { Default_Language, MongoDB_URI } from "../../Config";
44
import { A_InvoiceStatus, IInvoice } from "../../Interfaces/Invoice.interface";
55
import Logger from "../../Lib/Logger";
66
import GetText from "../../Translation/GetText";
7+
import { currencyCodes } from "../../Types/PaymentTypes";
78

89
const InvoiceSchema = new Schema
910
(
@@ -92,6 +93,12 @@ const InvoiceSchema = new Schema
9293
default: false,
9394
},
9495

96+
currency: {
97+
type: String,
98+
enum: currencyCodes,
99+
default: 'USD',
100+
},
101+
95102
}
96103
);
97104

src/Database/Models/Orders.model.ts

+7-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { A_OrderStatus, IOrder } from "../../Interfaces/Orders.interface";
55
import Logger from "../../Lib/Logger";
66
import GetText from "../../Translation/GetText";
77
import { A_CC_Payments, A_RecurringMethod } from "../../Types/PaymentMethod";
8-
import { A_PaymentTypes } from "../../Types/PaymentTypes";
8+
import { A_PaymentTypes, currencyCodes } from "../../Types/PaymentTypes";
99

1010
const OrderSchema = new Schema
1111
(
@@ -95,6 +95,12 @@ const OrderSchema = new Schema
9595
require: false
9696
},
9797

98+
currency: {
99+
type: String,
100+
enum: currencyCodes,
101+
default: 'USD',
102+
},
103+
98104
}
99105
);
100106

src/Database/Models/Transactions.model.ts

+7
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { IDTransactions } from "../../Interfaces/Transactions.interface";
55
import Logger from "../../Lib/Logger";
66
import GetText from "../../Translation/GetText";
77
import { A_CC_Payments } from "../../Types/PaymentMethod";
8+
import { currencyCodes } from "../../Types/PaymentTypes";
89

910
const TransactionsSchema = new Schema
1011
(
@@ -47,6 +48,12 @@ const TransactionsSchema = new Schema
4748
default: 0,
4849
},
4950

51+
currency: {
52+
type: String,
53+
enum: currencyCodes,
54+
default: 'USD',
55+
},
56+
5057
}
5158
);
5259

src/Email/Templates/Invoices/Invoice.template.ts

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import { stripIndents } from "common-tags";
2-
import { Company_Currency, Full_Domain } from "../../../Config";
2+
import { Full_Domain } from "../../../Config";
33
import { ICustomer } from "../../../Interfaces/Customer.interface";
44
import { IInvoice } from "../../../Interfaces/Invoice.interface";
55
import getFullName from "../../../Lib/Customers/getFullName";
6+
import { GetCurrencySymbol } from "../../../Types/PaymentTypes";
67
import GetTableStyle from "../CSS/GetTableStyle";
78
import UseStyles from "../General/UseStyles";
89

@@ -76,7 +77,7 @@ export default async (invoice: IInvoice, customer: ICustomer) => await UseStyles
7677
<tr>
7778
<td>${item.notes}</td>
7879
<td>${item.quantity}</td>
79-
<td>${item.amount} ${!customer.currency ? await Company_Currency() : customer.currency}</td>
80+
<td>${item.amount} ${GetCurrencySymbol(invoice.currency)}</td>
8081
</tr>
8182
`))).join('')}
8283
</tbody>
@@ -85,7 +86,7 @@ export default async (invoice: IInvoice, customer: ICustomer) => await UseStyles
8586
<strong>
8687
Total:
8788
</strong>
88-
${invoice.amount+invoice.amount*invoice.tax_rate/100} ${!customer.currency ? await Company_Currency() : customer.currency} (${invoice.tax_rate}%)
89+
${invoice.amount+invoice.amount*invoice.tax_rate/100} ${GetCurrencySymbol(invoice.currency)} (${invoice.tax_rate}%)
8990
</p>
9091
<p>
9192
<strong>

src/Email/Templates/Invoices/LateInvoice.Template.ts

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import { stripIndents } from "common-tags";
2-
import { Company_Currency, Full_Domain } from "../../../Config";
2+
import { Full_Domain } from "../../../Config";
33
import { ICustomer } from "../../../Interfaces/Customer.interface";
44
import { IInvoice } from "../../../Interfaces/Invoice.interface";
55
import getFullName from "../../../Lib/Customers/getFullName";
6+
import { GetCurrencySymbol } from "../../../Types/PaymentTypes";
67
import GetTableStyle from "../CSS/GetTableStyle";
78
import UseStyles from "../General/UseStyles";
89

@@ -64,7 +65,7 @@ export default async (invoice: IInvoice, customer: ICustomer) => await UseStyles
6465
<tr>
6566
<td>${item.notes}</td>
6667
<td>${item.quantity}</td>
67-
<td>${item.amount} ${!customer.currency ? await Company_Currency() : customer.currency}</td>
68+
<td>${item.amount} ${GetCurrencySymbol(invoice.currency)}</td>
6869
</tr>
6970
`))).join('')}
7071
</tbody>
@@ -73,7 +74,7 @@ export default async (invoice: IInvoice, customer: ICustomer) => await UseStyles
7374
<strong>
7475
Total:
7576
</strong>
76-
${invoice.amount+invoice.amount*invoice.tax_rate/100} ${!customer.currency ? await Company_Currency() : customer.currency} (${invoice.tax_rate}%)
77+
${invoice.amount+invoice.amount*invoice.tax_rate/100} ${GetCurrencySymbol(invoice.currency)} (${invoice.tax_rate}%)
7778
</p>
7879
<p>
7980
<strong>

src/Email/Templates/Orders/NewOrderCreated.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import { stripIndents } from "common-tags";
2-
import { Company_Currency } from "../../../Config";
32
import ConfigurableOptionsModel from "../../../Database/Models/ConfigurableOptions.model";
43
import { ICustomer } from "../../../Interfaces/Customer.interface";
54
import { IOrder } from "../../../Interfaces/Orders.interface";
65
import getFullName from "../../../Lib/Customers/getFullName";
76
import getProductById from "../../../Lib/Products/getProductById";
7+
import { GetCurrencySymbol } from "../../../Types/PaymentTypes";
88
import GetTableStyle from "../CSS/GetTableStyle";
99
import UseStyles from "../General/UseStyles";
1010

@@ -48,7 +48,7 @@ export default async (order: IOrder, customer: ICustomer) => await UseStyles(str
4848
<tr>
4949
<td>${p?.name}</td>
5050
<td>${product.quantity}</td>
51-
<td>${p?.price} ${!customer.currency ? await Company_Currency() : customer.currency}</td>
51+
<td>${p?.price} ${GetCurrencySymbol(order.currency)}</td>
5252
</tr>`;
5353
5454
if(p_c.length > 0)
@@ -59,7 +59,7 @@ export default async (order: IOrder, customer: ICustomer) => await UseStyles(str
5959
<tr>
6060
<td>+ ${p?.name} - ${c?.name}</td>
6161
<td>1</td>
62-
<td>${c?.price} ${!customer.currency ? await Company_Currency() : customer.currency}</td>
62+
<td>${c?.price} ${GetCurrencySymbol(order.currency)}</td>
6363
</tr>`
6464
}
6565
}
@@ -95,7 +95,7 @@ export default async (order: IOrder, customer: ICustomer) => await UseStyles(str
9595
total += p_c.reduce((a, b) => a + b);
9696
9797
return total;
98-
}))).reduce((acc, cur) => acc + cur, 0)} ${(!customer.currency ? await Company_Currency() : customer.currency).toLocaleUpperCase()}
98+
}))).reduce((acc, cur) => acc + cur, 0)} ${(order.currency).toLocaleUpperCase()}
9999
</p>
100100
</div>
101101
`);

src/Email/Templates/Transaction/NewTransaction.template.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { ICustomer } from "../../../Interfaces/Customer.interface";
44
import { ITransactions } from "../../../Interfaces/Transactions.interface";
55
import PrintCompanyInformation from "../../../Lib/Company/PrintCompanyInformation";
66
import getFullName from "../../../Lib/Customers/getFullName";
7+
import { GetCurrencySymbol, TPaymentCurrency } from "../../../Types/PaymentTypes";
78
import UseStyles from "../General/UseStyles";
89

910
export = async (t: ITransactions, c: ICustomer, charged = false) => UseStyles(stripIndents`
@@ -25,7 +26,7 @@ export = async (t: ITransactions, c: ICustomer, charged = false) => UseStyles(st
2526
${await PrintCompanyInformation()}
2627
</p>
2728
<p>
28-
Amount: ${t.amount} ${!c.currency ? await Company_Currency() : c.currency}
29+
Amount: ${t.amount} ${GetCurrencySymbol(t.currency)}
2930
</p>
3031
</div>
3132
`);

src/Interfaces/Customer.interface.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { TPaymentCurrency } from "../Types/PaymentTypes";
12
import { ICompanyConfig } from "./Admin/Configs.interface";
23
import { IImage } from "./Images.interface";
34

@@ -27,7 +28,7 @@ export interface ICustomer
2728
password: string;
2829
createdAt: Date;
2930
profile_picture: IImage["id"] | null;
30-
currency: string | ICompanyConfig["currency"];
31+
currency: TPaymentCurrency | ICompanyConfig["currency"];
3132
extra: {
3233
[key: string]: any;
3334
};

src/Interfaces/Invoice.interface.ts

+2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { TPaymentCurrency } from "../Types/PaymentTypes";
12
import { IConfigurableOptions } from "./ConfigurableOptions.interface";
23
import { ICustomer } from "./Customer.interface";
34
import { TOrderStatus } from "./Orders.interface";
@@ -56,6 +57,7 @@ export interface IInvoice
5657
tax_rate: number;
5758
notes: string;
5859
paid: boolean;
60+
currency: TPaymentCurrency;
5961
notified: boolean;
6062
}
6163

src/Interfaces/Orders.interface.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { TRecurringMethod } from "../Types/PaymentMethod";
2-
import { TPaymentTypes } from "../Types/PaymentTypes";
2+
import { TPaymentCurrency, TPaymentTypes } from "../Types/PaymentTypes";
33
import { IConfigurableOptions } from "./ConfigurableOptions.interface";
44
import { ICustomer } from "./Customer.interface";
55
import { IInvoice } from "./Invoice.interface";
@@ -45,6 +45,7 @@ export interface IOrder
4545
price_override?: number;
4646
dates: IOrderDates<IOrder["billing_type"]>;
4747
invoices: Array<IInvoice["uid"]>;
48+
currency: TPaymentCurrency;
4849
promotion_code?: IPromotionsCodes["id"];
4950
}
5051

src/Interfaces/Transactions.interface.ts

+2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { Document } from "mongoose";
2+
import { TPaymentCurrency } from "../Types/PaymentTypes";
23
import { ICustomer } from "./Customer.interface";
34
import { IInvoice } from "./Invoice.interface";
45

@@ -18,6 +19,7 @@ export interface ITransactions
1819
date: Date | string;
1920
payment_method: IInvoice["payment_method"];
2021
amount: IInvoice["amount"];
22+
currency: TPaymentCurrency;
2123
fees: number;
2224
}
2325

src/Lib/Orders/newInvoice.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ import Logger from "../Logger";
1515
import PromotionCodeModel from "../../Database/Models/PromotionsCode.model";
1616
import { sanitizeMongoose } from "../Sanitize";
1717

18-
1918
// Create a method that checks if the order next recycle is within 14 days
2019
export function isWithinNext14Days(date: Date | string): boolean
2120
{
@@ -103,6 +102,7 @@ export async function createInvoiceFromOrder(order: IOrder)
103102
tax_rate: Products?.reduce((acc, cur) => cur.tax_rate, 0),
104103
notes: "",
105104
paid: false,
105+
currency: order.currency,
106106
notified: false,
107107
})).save();
108108

src/Lib/Quotes/CreateQuotePdf.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ export default function createQuotePdf(quote: IQuotes): Promise<string>
4242
},
4343
"taxNotation": "vat",
4444
"settings": {
45-
"currency": (await Company_Currency()).toUpperCase(),
45+
"currency": (!Customer.currency ? await Company_Currency() : Customer.currency).toUpperCase(),
4646
"margin-top": 25,
4747
"margin-right": 25,
4848
"margin-left": 25,

src/Middlewares/EnsureAdmin.ts

+6-6
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,13 @@ export default function EnsureAdmin(eR = false)
3737
password = login.split(":")[1];
3838
login = login.split(":")[0];
3939
}
40-
41-
eR ? null : Logger.warning(`Authoring admin with username: ${login}`);
40+
41+
!eR ? Logger.warning(`Authoring admin with username: ${login}`) : null;
4242

4343
const match = bcrypt.compare(password, (CacheAdmin.get(getAdminByUsername(login) ?? "ADM_")?.["password"]) ?? "")
4444
if(!match)
4545
{
46-
eR ? null : Logger.warning(`Authorization failed for admin with username: ${login}`);
46+
!eR ? Logger.warning(`Authorization failed for admin with username: ${login}`) : null;
4747
return eR ? Promise.resolve(false) : APIError("Unauthorized admin", 403)(res);
4848
}
4949

@@ -53,19 +53,19 @@ export default function EnsureAdmin(eR = false)
5353
if(b64auth[0].toLocaleLowerCase() === "bearer")
5454
{
5555
const token = (Buffer.isBuffer(b64auth[1]) ? Buffer.from(b64auth[1], 'base64') : b64auth[1]).toString();
56-
eR ? null : Logger.warning(`Authoring admin with token: ${token}`);
56+
!eR ? Logger.warning(`Authoring admin with token: ${token}`) : null;
5757

5858
try
5959
{
6060
const payload = jwt.verify(token, JWT_Access_Token);
6161

6262
if(!payload)
6363
{
64-
eR ? null : Logger.warning(`Authorization failed for admin with token: ${token}`);
64+
!eR ? Logger.warning(`Authorization failed for admin with token: ${token}`) : null;
6565
return eR ? Promise.resolve(false) : APIError("Unauthorized admin", 403)(res);
6666
}
6767

68-
eR ? null : Logger.warning(`Authorized admin with token: ${token}`);
68+
eR ? Logger.warning(`Authorized admin with token: ${token}`) : null;
6969

7070
return eR ? Promise.resolve(true) : next?.();
7171
}

src/Middlewares/EnsureAuth.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ export default function EnsureAuth(eR = false)
5656
//@ts-ignore
5757
req.customer = payload.data;
5858
// @ts-ignore
59-
eR ? null : Logger.api(`Authorizing`, payload.data);
59+
!eR ? Logger.api(`Authorizing`, payload.data) : null;
6060

6161
return eR ? Promise.resolve(true) : next?.();
6262
}

src/Payments/Currencies/Paypal.currencies.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ const data = {
3333

3434
export const PaypalCurrencies = data.currencies;
3535

36-
export function validCurrencyPaypal(currency: typeof data["currencies"])
36+
export function validCurrencyPaypal(currency: typeof PaypalCurrencies)
3737
{
3838
// @ts-ignore
3939
return data.currencies.includes(currency);

src/Payments/Paypal.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import paypal from "paypal-rest-sdk";
2-
import { Company_Currency, DebugMode, Domain, Full_Domain, Http_Schema, Paypal_Client_Id, Paypal_Client_Secret, PORT } from "../Config";
2+
import { Company_Currency, DebugMode, Full_Domain, Paypal_Client_Id, Paypal_Client_Secret } from "../Config";
33
import CustomerModel from "../Database/Models/Customers/Customer.model";
44
import TransactionsModel from "../Database/Models/Transactions.model";
55
import { IInvoice } from "../Interfaces/Invoice.interface";
@@ -136,6 +136,7 @@ export async function retrievePaypalTransaction(payerId: string, paymentId: stri
136136
fees: 0,
137137
invoice_uid: invoice.id,
138138
customer_uid: invoice.customer_uid,
139+
currency: invoice.currency ?? await Company_Currency(),
139140
date: getDate(),
140141
uid: idTransicitons(),
141142
}).save());

src/Payments/Stripe.ts

+2
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,7 @@ export const ChargeCustomer = async (invoice_id: IInvoice["id"]) =>
177177
fees: 0,
178178
invoice_uid: invoice.id,
179179
customer_uid: invoice.customer_uid,
180+
currency: invoice.currency ?? await Company_Currency(),
180181
date: getDate(),
181182
uid: idTransicitons(),
182183
}).save());
@@ -219,6 +220,7 @@ export const markInvoicePaid = async (intent: stripe.Response<stripe.PaymentInte
219220
fees: 0,
220221
invoice_uid: invoice.id,
221222
customer_uid: invoice.customer_uid,
223+
currency: invoice.currency ?? await Company_Currency(),
222224
date: getDate(),
223225
uid: idTransicitons(),
224226
}).save());

src/Plugins/PluginHandler.ts

+2-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import Logger from "../Lib/Logger";
2-
import { Plugins } from "../Config";
2+
import {Plugins} from "../Config";
33
import npm from "npm";
44
import fs from "fs";
55
import GetText from "../Translation/GetText";
@@ -68,8 +68,6 @@ export function isPluginInstalled(plugin: string)
6868
export function getPlugins()
6969
{
7070
// get all installed npm packages
71-
const packages = Plugins;
7271
// get plugins starting with cpg-plugin
73-
const plugins = packages.filter(p => p.startsWith("cpg-plugin"));
74-
return plugins;
72+
return Plugins.filter(p => p.startsWith("cpg-plugin"));
7573
}

0 commit comments

Comments
 (0)