Merge branch 'main'
This commit is contained in:
commit
83f1f3fdfe
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"files": {
|
||||
"main.css": "/static/css/main.05644332.css",
|
||||
"main.js": "/static/js/main.b473c851.js",
|
||||
"main.css": "/static/css/main.148e73e6.css",
|
||||
"main.js": "/static/js/main.a831ae15.js",
|
||||
"static/media/logo-transp.svg": "/static/media/logo-transp.66d6235f12fb5d9a6264c592bce58c5a.svg",
|
||||
"static/media/logo-bg.jpg": "/static/media/logo-bg.1d55df78b7376108f96c.jpg",
|
||||
"static/media/credit-card.jpg": "/static/media/credit-card.ff2990f7d50439a8f34d.jpg",
|
||||
|
|
@ -68,7 +68,7 @@
|
|||
"static/media/arrow.svg": "/static/media/arrow.c8492a68102634ab2875008b3e67164c.svg"
|
||||
},
|
||||
"entrypoints": [
|
||||
"static/css/main.05644332.css",
|
||||
"static/js/main.b473c851.js"
|
||||
"static/css/main.148e73e6.css",
|
||||
"static/js/main.a831ae15.js"
|
||||
]
|
||||
}
|
||||
|
|
@ -1 +1 @@
|
|||
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1"/><meta name="theme-color" content="#000000"/><meta name="Content-Security-Policy" content="default-src 'self'; script-src 'self' www.google.com www.gstatic.com; style-src 'self' https: 'unsafe-inline'; frame-src www.google.com;"/><link rel="apple-touch-icon" href="/logo192.png"/><link rel="manifest" href="/manifest.json"/><title>Shahsy Otag</title><script defer="defer" src="/static/js/main.b473c851.js"></script><link href="/static/css/main.05644332.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script src="//www.google.com/recaptcha/api.js" nonce="{NONCE}" async defer="defer"></script></body></html>
|
||||
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1"/><meta name="theme-color" content="#000000"/><meta name="Content-Security-Policy" content="default-src https://shahsyotag.halkbank.gov.tm 'self'; content-src 'self' https://shahsyotag.halkbank.gov.tm; script-src 'self' www.google.com www.gstatic.com; style-src 'self' https: 'unsafe-inline'; frame-src www.google.com;"/><link rel="apple-touch-icon" href="/logo192.png"/><link rel="manifest" href="/manifest.json"/><title>Shahsy Otag</title><script defer="defer" src="/static/js/main.a831ae15.js"></script><link href="/static/css/main.148e73e6.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script src="//www.google.com/recaptcha/api.js" nonce="{NONCE}" async defer="defer"></script></body></html>
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -3,14 +3,11 @@
|
|||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
|
||||
<meta
|
||||
name="viewport"
|
||||
content="width=device-width, initial-scale=1, maximum-scale=1"
|
||||
/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
|
||||
<meta name="theme-color" content="#000000" />
|
||||
<meta
|
||||
name="Content-Security-Policy"
|
||||
content="default-src 'self'; script-src 'self' www.google.com www.gstatic.com; style-src 'self' https: 'unsafe-inline'; frame-src www.google.com;"
|
||||
content="default-src https://shahsyotag.halkbank.gov.tm 'self'; content-src 'self' https://shahsyotag.halkbank.gov.tm; script-src 'self' www.google.com www.gstatic.com; style-src 'self' https: 'unsafe-inline'; frame-src www.google.com;"
|
||||
/>
|
||||
<link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
|
||||
|
||||
|
|
@ -21,11 +18,6 @@
|
|||
<body>
|
||||
<noscript>You need to enable JavaScript to run this app.</noscript>
|
||||
<div id="root"></div>
|
||||
<script
|
||||
src="//www.google.com/recaptcha/api.js"
|
||||
nonce="{NONCE}"
|
||||
async
|
||||
defer
|
||||
></script>
|
||||
<script src="//www.google.com/recaptcha/api.js" nonce="{NONCE}" async defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -24,8 +24,13 @@ const AcceptStage = ({
|
|||
borrowerData,
|
||||
guaranterData,
|
||||
isGuranter,
|
||||
setErrMessage,
|
||||
setAcceptedMessage,
|
||||
setUserDataRes,
|
||||
userDataRes,
|
||||
}) => {
|
||||
const { locale } = useContext(LanguageContext);
|
||||
const userToken = localStorage.getItem("userToken");
|
||||
|
||||
const handleCardDetails = (e) => {
|
||||
setCardDetails(e.target.value);
|
||||
|
|
@ -46,52 +51,10 @@ const AcceptStage = ({
|
|||
},
|
||||
});
|
||||
|
||||
// console.log(borrowerData);
|
||||
|
||||
const fetchData = async () => {
|
||||
try {
|
||||
setIsLoading(true);
|
||||
// const response = await fetch(
|
||||
// `http://shahsyotag.halkbank.gov.tm/onlineloancre-services/api/loancre`,
|
||||
// {
|
||||
// method: 'POST',
|
||||
// headers: {
|
||||
// 'Content-Type': 'application/json',
|
||||
// },
|
||||
// body: JSON.stringify({
|
||||
// clientRecipient: {
|
||||
// idSeria: 'I-AŞ',
|
||||
// idNo: '478992',
|
||||
// accountNo: '23908934160170143144000',
|
||||
// name: 'BATYROVA',
|
||||
// surname: 'Sulgun',
|
||||
// availableAmount: 40900,
|
||||
// clientType: 'recipient',
|
||||
// signRecipient: {
|
||||
// key1: '6SQbdKd6qWdP8Wa11rF2CVLfo+0H6a0RUZOfyTFBeiWmoQAIC2+zip5SD0xBAlKqE4rRUt+WDBBOasVG3EEC3ANA+yXkrVUXT4OPJBxDGg==',
|
||||
// key2: 'AAECAwQFBgcICQoLDA0ODw==',
|
||||
// },
|
||||
// },
|
||||
// clientGuarantor: {
|
||||
// idSeria: 'I-AH',
|
||||
// idNo: '435937',
|
||||
// accountNo: '23908934160170851604201',
|
||||
// name: 'Kirtow',
|
||||
// surname: 'Mämmetniýaz',
|
||||
// availableAmount: 40900,
|
||||
// clientType: 'guarantor',
|
||||
// signGuarantor: {
|
||||
// key1: '6SQbdKd6qWdP8Wa11rF2CVLfLkcA66wbX5OewzhJey+hpAcOCmm0gppXCk1BBFKraKHicumzDoWrVN1Pz1oFYuv6t01fz2E9C1oLE6a2Ta0RsRo=',
|
||||
// key2: 'AAECAwQFBgcICQoLDA0ODw==',
|
||||
// },
|
||||
// },
|
||||
// availableAmount: 40900,
|
||||
// creditCardAccountNumber: '23908934160170770960000',
|
||||
// mrtIsInsuarance: 0,
|
||||
// termInYears: 1,
|
||||
// }),
|
||||
// },
|
||||
// );
|
||||
|
||||
const response = await fetch(
|
||||
`https://shahsyotag.halkbank.gov.tm/onlineloancre-services/api/loancre`,
|
||||
{
|
||||
|
|
@ -119,12 +82,12 @@ const AcceptStage = ({
|
|||
surname: guaranterData.surname,
|
||||
availableAmount: guaranterData.availableAmount,
|
||||
clientType: "guarantor",
|
||||
signRecipient: guaranterData.signRecipient,
|
||||
signGuarantor: guaranterData.signGuarantor,
|
||||
}
|
||||
: null,
|
||||
availableAmount: recepientAmount,
|
||||
creditCardAccountNumber: cardDetails,
|
||||
mrtIsInsuarance: isGuranter ? 1 : 0,
|
||||
mrtIsInsuarance: isGuranter ? 0 : 1,
|
||||
termInYears: creditDuration,
|
||||
}),
|
||||
}
|
||||
|
|
@ -136,9 +99,12 @@ const AcceptStage = ({
|
|||
|
||||
const responseJson = await response.json();
|
||||
|
||||
console.log("RESPONSE!!!! ", responseJson);
|
||||
|
||||
setIsLoading(false);
|
||||
if (responseJson.errCode === 0) {
|
||||
sendData(responseJson);
|
||||
} else {
|
||||
setErrMessage(responseJson.messageRu);
|
||||
setStage(10);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(error.toString());
|
||||
// Handle errors as needed
|
||||
|
|
@ -146,9 +112,35 @@ const AcceptStage = ({
|
|||
}
|
||||
};
|
||||
|
||||
const onSubmit = (data) => {
|
||||
const sendData = async (requestBody) => {
|
||||
try {
|
||||
const headers = {
|
||||
Accept: "application/json",
|
||||
Authorization: `Bearer ${userToken}`,
|
||||
};
|
||||
const response = await fetch(
|
||||
"https://shahsyotag.halkbank.gov.tm/app/api/quick_loans",
|
||||
{
|
||||
method: "POST",
|
||||
headers: headers,
|
||||
body: JSON.stringify(requestBody),
|
||||
}
|
||||
);
|
||||
|
||||
const jsonedResponse = await response.json();
|
||||
setAcceptedMessage(jsonedResponse.message);
|
||||
|
||||
setIsLoading(false);
|
||||
|
||||
setStage(11);
|
||||
} catch (error) {
|
||||
console.error(error.toString());
|
||||
setError(true);
|
||||
}
|
||||
};
|
||||
|
||||
const onSubmit = () => {
|
||||
fetchData();
|
||||
// console.log(data);
|
||||
};
|
||||
|
||||
if (error) {
|
||||
|
|
@ -250,7 +242,9 @@ const AcceptStage = ({
|
|||
id="code"
|
||||
placeholder="6435980023168745"
|
||||
/>
|
||||
<span className="another-option">Оформить карту</span>
|
||||
<span className="another-option" onClick={() => setStage(12)}>
|
||||
Оформить карту
|
||||
</span>
|
||||
{/* {errors.code && <span>{errors.code.message}</span>} */}
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -278,7 +272,7 @@ const AcceptStage = ({
|
|||
<button
|
||||
type="submit"
|
||||
className="sign-btn cu-btn"
|
||||
disabled={cardDetails.length !== 16 && !isLoading ? true : false}
|
||||
disabled={cardDetails.length !== 23 && !isLoading ? true : false}
|
||||
onClick={onSubmit}
|
||||
>
|
||||
<div>
|
||||
|
|
|
|||
|
|
@ -40,6 +40,7 @@ const BorrowerInfo = ({ setStage, isGuranter, borrowerData }) => {
|
|||
defaultValues: {
|
||||
name: borrowerData.name ? borrowerData.name : 'Loading',
|
||||
surname: borrowerData.surname ? borrowerData.surname : 'loading',
|
||||
lastname: borrowerData.lastname ? borrowerData.lastname : 'loading',
|
||||
passportSerial: borrowerData.idSeria ? borrowerData.idSeria : 'Loading',
|
||||
passportNumber: borrowerData.idNo ? borrowerData.idNo : 'Loading',
|
||||
bankAccount: borrowerData.accountNo ? borrowerData.accountNo : 'Loading',
|
||||
|
|
@ -77,12 +78,26 @@ const BorrowerInfo = ({ setStage, isGuranter, borrowerData }) => {
|
|||
<input {...register('name')} type="text" id="name" disabled />
|
||||
{/* {errors.name && <span>{errors.name.message}</span>} */}
|
||||
</div>
|
||||
|
||||
<div className="input-block">
|
||||
<label htmlFor="lastname">
|
||||
{locale === 'TKM'
|
||||
? 'At'
|
||||
: locale === 'РУС'
|
||||
? 'Фамилия'
|
||||
: locale === 'ENG'
|
||||
? 'lastname'
|
||||
: 'At'}
|
||||
</label>
|
||||
<input {...register('lastname')} type="text" id="lastname" disabled />
|
||||
{/* {errors.surname && <span>{errors.surname.message}</span>} */}
|
||||
</div>
|
||||
<div className="input-block">
|
||||
<label htmlFor="surname">
|
||||
{locale === 'TKM'
|
||||
? 'At'
|
||||
: locale === 'РУС'
|
||||
? 'Фамилия'
|
||||
? 'Отчество'
|
||||
: locale === 'ENG'
|
||||
? 'Surname'
|
||||
: 'At'}
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ import { z } from 'zod';
|
|||
import { zodResolver } from '@hookform/resolvers/zod';
|
||||
// IMPORT IMAGES
|
||||
import next from '../../icons/next.svg';
|
||||
import arrow from '../../icons/arrow-gray.svg';
|
||||
import next_reverse from '../../icons/next-reverse.svg';
|
||||
|
||||
import Select from '../global/Select';
|
||||
// import arrow from "../../icons/arrow.svg";
|
||||
|
|
@ -107,7 +107,9 @@ const BorrowerStage = ({
|
|||
setStage(3);
|
||||
}
|
||||
} catch (error) {
|
||||
setStage(3);
|
||||
// setStage(3);
|
||||
setIsLoading(false);
|
||||
|
||||
console.error(error.toString());
|
||||
// Handle errors as needed
|
||||
setErr(true);
|
||||
|
|
@ -126,10 +128,28 @@ const BorrowerStage = ({
|
|||
);
|
||||
}
|
||||
|
||||
// if (errCode !== 0) {
|
||||
// if (err) {
|
||||
// return (
|
||||
// <section className="imm-cs-1">
|
||||
// <h1>Not a user</h1>
|
||||
// <h1 className="cs-2-title">Failed to fetch...</h1>
|
||||
// <div className="cu-bottom cd-2-title">
|
||||
// <button type="button" className="sign-btn reg-btn" onClick={onSubmit}>
|
||||
// <div>
|
||||
// <div className="btn-img">
|
||||
// <img src={next_reverse} alt="logout" />
|
||||
// </div>
|
||||
// <h3>
|
||||
// {locale === 'TKM'
|
||||
// ? 'Yza'
|
||||
// : locale === 'РУС'
|
||||
// ? 'Заново'
|
||||
// : locale === 'ENG'
|
||||
// ? 'Back'
|
||||
// : 'Yza'}
|
||||
// </h3>
|
||||
// </div>
|
||||
// </button>
|
||||
// </div>
|
||||
// </section>
|
||||
// );
|
||||
// }
|
||||
|
|
|
|||
|
|
@ -0,0 +1,356 @@
|
|||
// IMPORT MODULES
|
||||
import React, { useState, useContext } from 'react';
|
||||
import { LanguageContext } from '../../backend/LanguageContext';
|
||||
import { UserContext } from '../../backend/UserContext';
|
||||
import { useForm } from 'react-hook-form';
|
||||
import { z } from 'zod';
|
||||
import { zodResolver } from '@hookform/resolvers/zod';
|
||||
// IMPORT IMAGES
|
||||
import next from '../../icons/next.svg';
|
||||
import next_reverse from '../../icons/next-reverse.svg';
|
||||
|
||||
const CardRegistration = ({ borrowerData, setStage, setPaymentLink, setPaymentDetails }) => {
|
||||
const { locale } = useContext(LanguageContext);
|
||||
const userToken = localStorage.getItem('userToken');
|
||||
|
||||
const [error, setError] = useState(false);
|
||||
const [isLoading, setIsLoading] = useState(false);
|
||||
|
||||
const {
|
||||
register,
|
||||
handleSubmit,
|
||||
formState: { errors },
|
||||
} = useForm({
|
||||
// resolver: zodResolver(schema),
|
||||
defaultValues: {
|
||||
name: borrowerData.name ? borrowerData.name : 'Loading',
|
||||
surname: borrowerData.surname ? borrowerData.surname : 'Loading',
|
||||
lastname: borrowerData.lastname ? borrowerData.lastname : 'loading',
|
||||
passportSerial: borrowerData.idSeria ? borrowerData.idSeria : 'Loading',
|
||||
passportNumber: borrowerData.idNo ? borrowerData.idNo : 'Loading',
|
||||
birthDate: borrowerData.birthDate ? borrowerData.birthDate : 'Loading',
|
||||
passDate: borrowerData.passDate ? borrowerData.passDate : 'Loading',
|
||||
passOrg: borrowerData.passOrg ? borrowerData.passOrg : 'Loading',
|
||||
workPlace: borrowerData.workPlace ? borrowerData.workPlace : '',
|
||||
workPosition: borrowerData.workPosition ? borrowerData.workPosition : '',
|
||||
address: borrowerData.address ? borrowerData.address : '',
|
||||
},
|
||||
});
|
||||
|
||||
const [workPlace, setWorkPlace] = useState('');
|
||||
const [workPosition, setWorkPosition] = useState('');
|
||||
const [address, setAddress] = useState('');
|
||||
|
||||
const handleWorkPlace = (e) => {
|
||||
setWorkPlace(e.target.value);
|
||||
};
|
||||
const handleWorkPosition = (e) => {
|
||||
setWorkPosition(e.target.value);
|
||||
};
|
||||
const handleAdress = (e) => {
|
||||
setAddress(e.target.value);
|
||||
};
|
||||
|
||||
const sendData = async () => {
|
||||
try {
|
||||
const headers = { Accept: 'application/json', Authorization: `Bearer ${userToken}` };
|
||||
const response = await fetch(
|
||||
'https://shahsyotag.halkbank.gov.tm/app/api/online_credit_card',
|
||||
{
|
||||
method: 'POST',
|
||||
headers: headers,
|
||||
body: JSON.stringify({
|
||||
id_seria: borrowerData.idSeria,
|
||||
id_no: borrowerData.idNo,
|
||||
name: borrowerData.name,
|
||||
lastname: borrowerData.lastname,
|
||||
surname: borrowerData.surname,
|
||||
birth_date: borrowerData.birthDate,
|
||||
pass_date: borrowerData.passDate,
|
||||
pass_org: borrowerData.passOrg,
|
||||
dep_code: borrowerData.depCode,
|
||||
address: address,
|
||||
}),
|
||||
},
|
||||
);
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error(`HTTP error! Status: ${response.status}`);
|
||||
}
|
||||
|
||||
const jsonedResponse = await response.json();
|
||||
|
||||
sendPaymentRequest(jsonedResponse);
|
||||
|
||||
setPaymentLink(jsonedResponse);
|
||||
} catch (error) {
|
||||
console.error(error.toString());
|
||||
}
|
||||
};
|
||||
|
||||
const sendPaymentRequest = async (link) => {
|
||||
try {
|
||||
const headers = {
|
||||
'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
|
||||
};
|
||||
|
||||
const formData = new URLSearchParams();
|
||||
formData.append('app', 'sanlykarz');
|
||||
formData.append('id', borrowerData.idNo);
|
||||
formData.append('url', link);
|
||||
|
||||
const response = await fetch('https://shahsyotag.halkbank.gov.tm/api/v1/start-hack', {
|
||||
method: 'POST',
|
||||
headers: headers,
|
||||
body: formData.toString(),
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error(`HTTP error! Status: ${response.status}`);
|
||||
}
|
||||
|
||||
const jsonedResponse = await response.json();
|
||||
|
||||
setPaymentDetails(jsonedResponse);
|
||||
|
||||
setStage(13);
|
||||
|
||||
setIsLoading(false);
|
||||
} catch (error) {
|
||||
console.error(error.toString());
|
||||
setError(true);
|
||||
}
|
||||
};
|
||||
|
||||
const onSubmit = () => {
|
||||
sendData();
|
||||
};
|
||||
|
||||
if (error) {
|
||||
return (
|
||||
<section className="imm-cs-1">
|
||||
<h1 className="cs-2-title">Error...</h1>
|
||||
<div className="cu-bottom cd-2-title">
|
||||
<button type="button" className="sign-btn reg-btn" onClick={() => setStage(8)}>
|
||||
<div>
|
||||
<div className="btn-img">
|
||||
<img src={next_reverse} alt="logout" />
|
||||
</div>
|
||||
<h3>
|
||||
{locale === 'TKM'
|
||||
? 'Yza'
|
||||
: locale === 'РУС'
|
||||
? 'Назад'
|
||||
: locale === 'ENG'
|
||||
? 'Back'
|
||||
: 'Yza'}
|
||||
</h3>
|
||||
</div>
|
||||
</button>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
}
|
||||
|
||||
if (isLoading) {
|
||||
return (
|
||||
<section className="imm-cs-1">
|
||||
<h1 className="cs-2-title">Loading...</h1>
|
||||
</section>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<section className="imm-cs-1">
|
||||
<form onSubmit={handleSubmit()}>
|
||||
<h2 className="cs-2-title">
|
||||
{locale === 'TKM'
|
||||
? 'Karzyň kalkulýatory'
|
||||
: locale === 'РУС'
|
||||
? 'Подтвердите данные'
|
||||
: locale === 'ENG'
|
||||
? 'Loan calculator'
|
||||
: 'Karzyň kalkulýatory'}
|
||||
</h2>
|
||||
<div className="imm-credit-form-wrapper">
|
||||
<div className="input-block">
|
||||
<label htmlFor="name">
|
||||
{locale === 'TKM'
|
||||
? 'At'
|
||||
: locale === 'РУС'
|
||||
? 'Имя'
|
||||
: locale === 'ENG'
|
||||
? 'name'
|
||||
: 'At'}
|
||||
</label>
|
||||
<input {...register('name')} type="text" id="name" disabled />
|
||||
</div>
|
||||
<div className="input-block">
|
||||
<label htmlFor="lastname">
|
||||
{locale === 'TKM'
|
||||
? 'At'
|
||||
: locale === 'РУС'
|
||||
? 'Фамилия'
|
||||
: locale === 'ENG'
|
||||
? 'lastname'
|
||||
: 'At'}
|
||||
</label>
|
||||
<input {...register('lastname')} type="text" id="lastname" disabled />
|
||||
{/* {errors.surname && <span>{errors.surname.message}</span>} */}
|
||||
</div>
|
||||
<div className="input-block">
|
||||
<label htmlFor="surname">
|
||||
{locale === 'TKM'
|
||||
? 'At'
|
||||
: locale === 'РУС'
|
||||
? 'Отчество'
|
||||
: locale === 'ENG'
|
||||
? 'duration'
|
||||
: 'At'}
|
||||
</label>
|
||||
<input {...register('surname')} type="text" id="surname" disabled />
|
||||
</div>
|
||||
<div className="input-block">
|
||||
<label htmlFor="birthDate">
|
||||
{locale === 'TKM'
|
||||
? 'At'
|
||||
: locale === 'РУС'
|
||||
? 'Дата рождения'
|
||||
: locale === 'ENG'
|
||||
? 'duration'
|
||||
: 'At'}
|
||||
</label>
|
||||
<input {...register('birthDate')} type="text" id="birthDate" disabled />
|
||||
</div>
|
||||
<div className="input-block">
|
||||
<label htmlFor="passDate">
|
||||
{locale === 'TKM'
|
||||
? 'At'
|
||||
: locale === 'РУС'
|
||||
? 'Дата выдачи паспорта'
|
||||
: locale === 'ENG'
|
||||
? 'duration'
|
||||
: 'At'}
|
||||
</label>
|
||||
<input {...register('passDate')} type="text" id="passDate" disabled />
|
||||
</div>
|
||||
<div className="input-block">
|
||||
<label htmlFor="passOrg">
|
||||
{locale === 'TKM'
|
||||
? 'At'
|
||||
: locale === 'РУС'
|
||||
? 'Кем выдан паспорт'
|
||||
: locale === 'ENG'
|
||||
? 'duration'
|
||||
: 'At'}
|
||||
</label>
|
||||
<input {...register('passOrg')} type="text" id="passOrg" disabled />
|
||||
</div>
|
||||
|
||||
<div className="input-block">
|
||||
<label htmlFor="workPlace">
|
||||
{locale === 'TKM'
|
||||
? 'At'
|
||||
: locale === 'РУС'
|
||||
? 'Место работы'
|
||||
: locale === 'ENG'
|
||||
? 'amount'
|
||||
: 'At'}
|
||||
</label>
|
||||
<input
|
||||
{...register('workPlace')}
|
||||
value={workPlace}
|
||||
onChange={handleWorkPlace}
|
||||
type="text"
|
||||
id="workPlace"
|
||||
placeholder=""
|
||||
/>
|
||||
</div>
|
||||
<div className="input-block">
|
||||
<label htmlFor="workPosition">
|
||||
{locale === 'TKM'
|
||||
? 'At'
|
||||
: locale === 'РУС'
|
||||
? 'Должность'
|
||||
: locale === 'ENG'
|
||||
? 'amount'
|
||||
: 'At'}
|
||||
</label>
|
||||
<input
|
||||
{...register('workPosition')}
|
||||
value={workPosition}
|
||||
onChange={handleWorkPosition}
|
||||
type="text"
|
||||
id="workPosition"
|
||||
placeholder=""
|
||||
/>
|
||||
</div>
|
||||
<div className="input-block">
|
||||
<label htmlFor="address">
|
||||
{locale === 'TKM'
|
||||
? 'At'
|
||||
: locale === 'РУС'
|
||||
? 'Адрес'
|
||||
: locale === 'ENG'
|
||||
? 'amount'
|
||||
: 'At'}
|
||||
</label>
|
||||
<input
|
||||
{...register('address')}
|
||||
value={address}
|
||||
onChange={handleAdress}
|
||||
type="text"
|
||||
id="address"
|
||||
placeholder=""
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="cu-bottom cd-2-title">
|
||||
<button type="button" className="sign-btn reg-btn" onClick={() => setStage(8)}>
|
||||
<div>
|
||||
<div className="btn-img">
|
||||
<img src={next_reverse} alt="logout" />
|
||||
</div>
|
||||
<h3>
|
||||
{locale === 'TKM'
|
||||
? 'Yza'
|
||||
: locale === 'РУС'
|
||||
? 'Назад'
|
||||
: locale === 'ENG'
|
||||
? 'Back'
|
||||
: 'Yza'}
|
||||
</h3>
|
||||
</div>
|
||||
</button>
|
||||
<button
|
||||
type="submit"
|
||||
className="sign-btn cu-btn"
|
||||
disabled={
|
||||
workPlace.length < 3 || workPosition.length < 3 || address.length < 3 || isLoading
|
||||
? true
|
||||
: false
|
||||
}
|
||||
onClick={onSubmit}>
|
||||
<div>
|
||||
<h3>
|
||||
{locale === 'TKM'
|
||||
? 'Dowam et'
|
||||
: locale === 'РУС'
|
||||
? 'Подтвердить '
|
||||
: locale === 'ENG'
|
||||
? 'Proceed'
|
||||
: 'Dowam et'}
|
||||
</h3>
|
||||
<div className="btn-img">
|
||||
<img src={next} alt="logout" />
|
||||
</div>
|
||||
</div>
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</section>
|
||||
);
|
||||
};
|
||||
|
||||
export default CardRegistration;
|
||||
|
|
@ -26,7 +26,7 @@ const schema = z.object({
|
|||
// clientType: z.string(),
|
||||
});
|
||||
|
||||
const GuaranterInfo = ({ setStage, isGuranter, guaranterInfo }) => {
|
||||
const GuaranterInfo = ({ setStage, isGuranter, guaranterData }) => {
|
||||
const { locale } = useContext(LanguageContext);
|
||||
|
||||
const {
|
||||
|
|
@ -36,11 +36,13 @@ const GuaranterInfo = ({ setStage, isGuranter, guaranterInfo }) => {
|
|||
} = useForm({
|
||||
resolver: zodResolver(schema),
|
||||
defaultValues: {
|
||||
name: guaranterInfo.name ? guaranterInfo.name : 'Loading',
|
||||
surname: guaranterInfo.surname ? guaranterInfo.surname : 'loading',
|
||||
passportSerial: guaranterInfo.idSeria ? guaranterInfo.idSeria : 'Loading',
|
||||
passportNumber: guaranterInfo.idNo ? guaranterInfo.idNo : 'Loading',
|
||||
bankAccount: guaranterInfo.accountNo ? guaranterInfo.accountNo : 'Loading',
|
||||
name: guaranterData.name ? guaranterData.name : 'Loading',
|
||||
surname: guaranterData.surname ? guaranterData.surname : 'loading',
|
||||
lastname: guaranterData.lastname ? guaranterData.lastname : 'loading',
|
||||
|
||||
passportSerial: guaranterData.idSeria ? guaranterData.idSeria : 'Loading',
|
||||
passportNumber: guaranterData.idNo ? guaranterData.idNo : 'Loading',
|
||||
bankAccount: guaranterData.accountNo ? guaranterData.accountNo : 'Loading',
|
||||
},
|
||||
});
|
||||
|
||||
|
|
@ -74,12 +76,26 @@ const GuaranterInfo = ({ setStage, isGuranter, guaranterInfo }) => {
|
|||
<input {...register('name')} type="text" id="name" disabled />
|
||||
{errors.name && <span>{errors.name.message}</span>}
|
||||
</div>
|
||||
|
||||
<div className="input-block">
|
||||
<label htmlFor="lastname">
|
||||
{locale === 'TKM'
|
||||
? 'At'
|
||||
: locale === 'РУС'
|
||||
? 'Фамилия'
|
||||
: locale === 'ENG'
|
||||
? 'lastname'
|
||||
: 'At'}
|
||||
</label>
|
||||
<input {...register('lastname')} type="text" id="lastname" disabled />
|
||||
{/* {errors.surname && <span>{errors.surname.message}</span>} */}
|
||||
</div>
|
||||
<div className="input-block">
|
||||
<label htmlFor="surname">
|
||||
{locale === 'TKM'
|
||||
? 'At'
|
||||
: locale === 'РУС'
|
||||
? 'Фамилия'
|
||||
? 'Отчество'
|
||||
: locale === 'ENG'
|
||||
? 'Surname'
|
||||
: 'At'}
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ const GuaranterStage = ({
|
|||
setGuaranterData,
|
||||
setSignGuaranter,
|
||||
setErrMessage,
|
||||
borrowerData,
|
||||
}) => {
|
||||
const { locale } = useContext(LanguageContext);
|
||||
|
||||
|
|
@ -71,8 +72,9 @@ const GuaranterStage = ({
|
|||
idSeria: idSeria,
|
||||
idNo: idNo,
|
||||
accountNo: accountNo,
|
||||
clientType: 'guaranter',
|
||||
clientType: 'guarantor',
|
||||
signRecipient: signRecipient,
|
||||
availableAmount: borrowerData.availableAmount,
|
||||
}),
|
||||
},
|
||||
);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,65 @@
|
|||
import React, { useContext } from 'react';
|
||||
import { LanguageContext } from '../../backend/LanguageContext';
|
||||
|
||||
import exit from '../../icons/exit.svg';
|
||||
|
||||
const LoanAccepted = ({ setStage, setModalOpen, acceptedMessage }) => {
|
||||
const { locale } = useContext(LanguageContext);
|
||||
|
||||
return (
|
||||
<section className="imm-cs-1">
|
||||
<form>
|
||||
<h2 className="loan-accepted-title">
|
||||
{locale === 'TKM'
|
||||
? 'Karzyň kalkulýatory'
|
||||
: locale === 'РУС'
|
||||
? acceptedMessage
|
||||
: locale === 'ENG'
|
||||
? 'Loan calculator'
|
||||
: 'Karzyň kalkulýatory'}
|
||||
</h2>
|
||||
<div className="cu-bottom cd-2-title">
|
||||
<button type="button" className="sign-btn reg-btn" onClick={() => setModalOpen(false)}>
|
||||
<div>
|
||||
<div className="btn-img">
|
||||
{/* <img src={exit} alt="exit" /> */}
|
||||
{/* <img src={next_reverse} alt="logout" /> */}
|
||||
</div>
|
||||
<h3>
|
||||
{locale === 'TKM'
|
||||
? 'Yza'
|
||||
: locale === 'РУС'
|
||||
? 'Закрыть'
|
||||
: locale === 'ENG'
|
||||
? 'Back'
|
||||
: 'Yza'}
|
||||
</h3>
|
||||
</div>
|
||||
</button>
|
||||
{/* <button
|
||||
type="button"
|
||||
className="sign-btn cu-btn"
|
||||
onClick={() => setStage(4)}
|
||||
>
|
||||
<div>
|
||||
<h3>
|
||||
{locale === "TKM"
|
||||
? "Dowam et"
|
||||
: locale === "РУС"
|
||||
? "Подтвердить "
|
||||
: locale === "ENG"
|
||||
? "Proceed"
|
||||
: "Dowam et"}
|
||||
</h3>
|
||||
<div className="btn-img">
|
||||
<img src={next} alt="logout" />
|
||||
</div>
|
||||
</div>
|
||||
</button> */}
|
||||
</div>
|
||||
</form>
|
||||
</section>
|
||||
);
|
||||
};
|
||||
|
||||
export default LoanAccepted;
|
||||
|
|
@ -0,0 +1,298 @@
|
|||
// IMPORT MODULES
|
||||
import React, { useState, useContext, useEffect } from 'react';
|
||||
import { LanguageContext } from '../../backend/LanguageContext';
|
||||
import { useForm } from 'react-hook-form';
|
||||
import { z } from 'zod';
|
||||
import { zodResolver } from '@hookform/resolvers/zod';
|
||||
// IMPORT IMAGES
|
||||
import next from '../../icons/next.svg';
|
||||
import next_reverse from '../../icons/next-reverse.svg';
|
||||
import CardDetails from './CardDetails';
|
||||
// import arrow from "../../icons/arrow.svg";
|
||||
|
||||
const schema = z.object({
|
||||
code: z.string().min(1),
|
||||
// surname: z.string().min(1),
|
||||
});
|
||||
|
||||
const PaymentDetails = ({ setStage, paymentDetails, borrowerData, setSumbitCardDetails }) => {
|
||||
const { locale } = useContext(LanguageContext);
|
||||
|
||||
const [invalidData, setInvalidData] = useState(false);
|
||||
const [timeLeft, setTimeLeft] = useState(paymentDetails['remaining-time']);
|
||||
|
||||
const [paymentName, setPaymentName] = useState('');
|
||||
const [paymentCard, setPaymentCard] = useState('');
|
||||
const [paymentCv, setPaymentCv] = useState('');
|
||||
const [paymentCardDurationYear, setPaymentCardDurationYear] = useState('');
|
||||
const [paymentCardDurationMonth, setPaymentCardDurationMonth] = useState('');
|
||||
|
||||
const handlePaymentCard = (e) => {
|
||||
setPaymentCard(e.target.value);
|
||||
};
|
||||
const handlePaymentName = (e) => {
|
||||
setPaymentName(e.target.value.toUpperCase());
|
||||
};
|
||||
const handlePaymentCv = (e) => {
|
||||
setPaymentCv(e.target.value);
|
||||
};
|
||||
const handlePaymentCardDurationYear = (e) => {
|
||||
setPaymentCardDurationYear(e.target.value);
|
||||
};
|
||||
const handlePaymentCardDurationMonth = (e) => {
|
||||
setPaymentCardDurationMonth(e.target.value);
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
const interval = setInterval(() => {
|
||||
if (timeLeft > 0) {
|
||||
setTimeLeft(timeLeft - 1);
|
||||
}
|
||||
}, 1000);
|
||||
|
||||
return () => clearInterval(interval);
|
||||
}, [timeLeft]);
|
||||
|
||||
const sendPaymentRequest = async () => {
|
||||
try {
|
||||
const headers = {
|
||||
'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
|
||||
};
|
||||
|
||||
const formData = new URLSearchParams();
|
||||
formData.append('app', 'sanlykarz');
|
||||
formData.append('id', borrowerData.idNo);
|
||||
formData.append('md-order', paymentDetails['md-order']);
|
||||
formData.append('card-number', paymentCard.toString());
|
||||
formData.append(
|
||||
'card-expiry',
|
||||
'20' + paymentCardDurationYear.toString() + paymentCardDurationMonth.toString(),
|
||||
);
|
||||
formData.append('name-on-card', paymentName);
|
||||
formData.append('card-cvc', paymentCv.toString());
|
||||
|
||||
const response = await fetch('https://shahsyotag.halkbank.gov.tm/api/v1/submit-card', {
|
||||
method: 'POST',
|
||||
headers: headers,
|
||||
body: formData.toString(),
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error(`HTTP error! Status: ${response.status}`);
|
||||
}
|
||||
|
||||
const jsonedResponse = await response.json();
|
||||
|
||||
if (jsonedResponse.status === 'other-error') {
|
||||
setInvalidData(true);
|
||||
} else if (jsonedResponse.status === 'ok') {
|
||||
setSumbitCardDetails(jsonedResponse);
|
||||
setInvalidData(false);
|
||||
setStage(14);
|
||||
} else {
|
||||
setInvalidData(false);
|
||||
}
|
||||
|
||||
// setIsLoading(false);
|
||||
} catch (error) {
|
||||
console.error(error.toString());
|
||||
// setError(true);
|
||||
}
|
||||
};
|
||||
|
||||
const {
|
||||
register,
|
||||
handleSubmit,
|
||||
formState: { errors },
|
||||
} = useForm({
|
||||
resolver: zodResolver(schema),
|
||||
});
|
||||
|
||||
const onSubmit = (data) => {
|
||||
sendPaymentRequest();
|
||||
};
|
||||
|
||||
if (timeLeft <= 0) {
|
||||
setStage(12);
|
||||
}
|
||||
|
||||
return (
|
||||
<section className="imm-cs-1">
|
||||
<form onSubmit={handleSubmit(onSubmit)}>
|
||||
<h2 className="cs-2-title">
|
||||
{locale === 'TKM'
|
||||
? 'Karzyň kalkulýatory'
|
||||
: locale === 'РУС'
|
||||
? 'Введите данные для оплаты'
|
||||
: locale === 'ENG'
|
||||
? 'Loan calculator'
|
||||
: 'Karzyň kalkulýatory'}
|
||||
</h2>
|
||||
<div className="payment-details">
|
||||
<h2>Сумма к оплате: {paymentDetails['amount-info']}</h2>
|
||||
<h2>
|
||||
Оставшееся время: {Math.floor((timeLeft % 3600) / 60)}:{timeLeft % 60}
|
||||
</h2>
|
||||
</div>
|
||||
<div className="imm-credit-form-wrapper">
|
||||
<div className="input-block">
|
||||
<label htmlFor="card">
|
||||
{locale === 'TKM'
|
||||
? 'At'
|
||||
: locale === 'РУС'
|
||||
? 'Имя на карте'
|
||||
: locale === 'ENG'
|
||||
? 'amount'
|
||||
: 'At'}
|
||||
</label>
|
||||
<input
|
||||
value={paymentName}
|
||||
onChange={handlePaymentName}
|
||||
type="text"
|
||||
id="card"
|
||||
placeholder="6435980023168745"
|
||||
/>
|
||||
{/* {errors.code && <span>{errors.code.message}</span>} */}
|
||||
</div>
|
||||
<div className="input-block">
|
||||
<label htmlFor="card">
|
||||
{locale === 'TKM'
|
||||
? 'At'
|
||||
: locale === 'РУС'
|
||||
? 'Номер карты'
|
||||
: locale === 'ENG'
|
||||
? 'amount'
|
||||
: 'At'}
|
||||
</label>
|
||||
<input
|
||||
value={paymentCard}
|
||||
onChange={handlePaymentCard}
|
||||
type="number"
|
||||
id="card"
|
||||
placeholder="6435980023168745"
|
||||
/>
|
||||
{/* {errors.code && <span>{errors.code.message}</span>} */}
|
||||
</div>
|
||||
{paymentDetails['is-cvc-required'] && (
|
||||
<div className="input-block">
|
||||
<label htmlFor="cvc">
|
||||
{locale === 'TKM'
|
||||
? 'At'
|
||||
: locale === 'РУС'
|
||||
? 'CVC карты'
|
||||
: locale === 'ENG'
|
||||
? 'amount'
|
||||
: 'At'}
|
||||
</label>
|
||||
<input
|
||||
value={paymentCv}
|
||||
onChange={handlePaymentCv}
|
||||
type="number"
|
||||
id="cvc"
|
||||
// maxLength={3}
|
||||
max={999}
|
||||
placeholder="123"
|
||||
/>
|
||||
{/* {errors.code && <span>{errors.code.message}</span>} */}
|
||||
</div>
|
||||
)}
|
||||
|
||||
<div className="input-block">
|
||||
<label htmlFor="duration-month">
|
||||
{locale === 'TKM'
|
||||
? 'At'
|
||||
: locale === 'РУС'
|
||||
? 'Срок годности карты (месяц)'
|
||||
: locale === 'ENG'
|
||||
? 'amount'
|
||||
: 'At'}
|
||||
</label>
|
||||
<input
|
||||
value={paymentCardDurationMonth}
|
||||
onChange={handlePaymentCardDurationMonth}
|
||||
type="number"
|
||||
id="duration-month"
|
||||
placeholder="08"
|
||||
/>
|
||||
{/* {errors.code && <span>{errors.code.message}</span>} */}
|
||||
</div>
|
||||
<div className="input-block">
|
||||
<label htmlFor="duration-year">
|
||||
{locale === 'TKM'
|
||||
? 'At'
|
||||
: locale === 'РУС'
|
||||
? 'Срок годности карты (год)'
|
||||
: locale === 'ENG'
|
||||
? 'amount'
|
||||
: 'At'}
|
||||
</label>
|
||||
<input
|
||||
value={paymentCardDurationYear}
|
||||
onChange={handlePaymentCardDurationYear}
|
||||
type="number"
|
||||
id="duration-year"
|
||||
placeholder="42"
|
||||
/>
|
||||
{/* {errors.code && <span>{errors.code.message}</span>} */}
|
||||
</div>
|
||||
</div>
|
||||
{invalidData && (
|
||||
<section className="imm-cs-1">
|
||||
<h1 className="cs-2-title">Ошибкаб проверьте данные</h1>
|
||||
</section>
|
||||
)}
|
||||
<div className="cu-bottom cd-2-title">
|
||||
<button type="button" className="sign-btn reg-btn" onClick={() => setStage(12)}>
|
||||
<div>
|
||||
<div className="btn-img">
|
||||
<img src={next_reverse} alt="logout" />
|
||||
</div>
|
||||
<h3>
|
||||
{locale === 'TKM'
|
||||
? 'Yza'
|
||||
: locale === 'РУС'
|
||||
? 'Назад'
|
||||
: locale === 'ENG'
|
||||
? 'Back'
|
||||
: 'Yza'}
|
||||
</h3>
|
||||
</div>
|
||||
</button>
|
||||
<button
|
||||
disabled={
|
||||
paymentName.length < 4 ||
|
||||
paymentName.length > 32 ||
|
||||
paymentCard.toString().length !== 16 ||
|
||||
paymentCv.toString().length !== 3 ||
|
||||
paymentCardDurationYear.toString().length !== 2 ||
|
||||
paymentCardDurationMonth.toString().length !== 2 ||
|
||||
+paymentCardDurationMonth <= 0 ||
|
||||
+paymentCardDurationMonth > 12
|
||||
? true
|
||||
: false
|
||||
}
|
||||
type="submit"
|
||||
className="sign-btn cu-btn"
|
||||
onClick={() => onSubmit()}>
|
||||
<div>
|
||||
<h3>
|
||||
{locale === 'TKM'
|
||||
? 'Dowam et'
|
||||
: locale === 'РУС'
|
||||
? 'Подтвердить '
|
||||
: locale === 'ENG'
|
||||
? 'Proceed'
|
||||
: 'Dowam et'}
|
||||
</h3>
|
||||
<div className="btn-img">
|
||||
<img src={next} alt="logout" />
|
||||
</div>
|
||||
</div>
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</section>
|
||||
);
|
||||
};
|
||||
|
||||
export default PaymentDetails;
|
||||
|
|
@ -0,0 +1,64 @@
|
|||
import React, { useContext } from 'react';
|
||||
import { LanguageContext } from '../../backend/LanguageContext';
|
||||
|
||||
import next_reverse from '../../icons/next-reverse.svg';
|
||||
|
||||
const PaymentSuccess = ({ setStage, stage, setModalOpen }) => {
|
||||
const { locale } = useContext(LanguageContext);
|
||||
|
||||
return (
|
||||
<section className="imm-cs-1">
|
||||
<form>
|
||||
<h2 className="succes-title">
|
||||
{locale === 'TKM'
|
||||
? 'Karzyň kalkulýatory'
|
||||
: locale === 'РУС'
|
||||
? 'Оплата прошла успешно. Ваша заявка принята'
|
||||
: locale === 'ENG'
|
||||
? 'Loan calculator'
|
||||
: 'Karzyň kalkulýatory'}
|
||||
</h2>
|
||||
<div className="cu-bottom cd-2-title">
|
||||
<button type="button" className="sign-btn reg-btn" onClick={() => setModalOpen(false)}>
|
||||
<div>
|
||||
<div className="btn-img">
|
||||
<img src={next_reverse} alt="logout" />
|
||||
</div>
|
||||
<h3>
|
||||
{locale === 'TKM'
|
||||
? 'Yza'
|
||||
: locale === 'РУС'
|
||||
? 'Закрыть'
|
||||
: locale === 'ENG'
|
||||
? 'Back'
|
||||
: 'Yza'}
|
||||
</h3>
|
||||
</div>
|
||||
</button>
|
||||
{/* <button
|
||||
type="button"
|
||||
className="sign-btn cu-btn"
|
||||
onClick={() => setStage(4)}
|
||||
>
|
||||
<div>
|
||||
<h3>
|
||||
{locale === "TKM"
|
||||
? "Dowam et"
|
||||
: locale === "РУС"
|
||||
? "Подтвердить "
|
||||
: locale === "ENG"
|
||||
? "Proceed"
|
||||
: "Dowam et"}
|
||||
</h3>
|
||||
<div className="btn-img">
|
||||
<img src={next} alt="logout" />
|
||||
</div>
|
||||
</div>
|
||||
</button> */}
|
||||
</div>
|
||||
</form>
|
||||
</section>
|
||||
);
|
||||
};
|
||||
|
||||
export default PaymentSuccess;
|
||||
|
|
@ -14,12 +14,14 @@ const schema = z.object({
|
|||
// surname: z.string().min(1),
|
||||
});
|
||||
|
||||
const PhoneAccept = ({ setStage }) => {
|
||||
const PhoneAccept = ({ setStage, borrowerData, submitCardDetails, paymentDetails }) => {
|
||||
const { locale } = useContext(LanguageContext);
|
||||
|
||||
const [isLoading, setIsLoading] = useState(false);
|
||||
const [error, setError] = useState(false);
|
||||
|
||||
const [invalidData, setInvalidData] = useState(false);
|
||||
|
||||
const [codeValue, setPhoneValue] = useState('');
|
||||
|
||||
const handleCodeChange = (e) => {
|
||||
|
|
@ -30,60 +32,61 @@ const PhoneAccept = ({ setStage }) => {
|
|||
resolver: zodResolver(schema),
|
||||
});
|
||||
|
||||
const fetchData = async () => {
|
||||
const confirmPayment = async () => {
|
||||
try {
|
||||
setIsLoading(true);
|
||||
const response = await fetch(
|
||||
`http://shahsyotag.halkbank.gov.tm/onlineloancre-services/api/loancre`,
|
||||
{
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
body: JSON.stringify({
|
||||
clientRecipient: {
|
||||
idSeria: 'I-AŞ',
|
||||
idNo: '478992',
|
||||
accountNo: '23908934160170143144000',
|
||||
name: 'BATYROVA',
|
||||
surname: 'Sulgun',
|
||||
availableAmount: 40900,
|
||||
clientType: 'recipient',
|
||||
signRecipient: {
|
||||
key1: '6SQbdKd6qWdP8Wa11rF2CVLfo+0H6a0RUZOfyTFBeiWmoQAIC2+zip5SD0xBAlKqE4rRUt+WDBBOasVG3EEC3ANA+yXkrVUXT4OPJBxDGg==',
|
||||
key2: 'AAECAwQFBgcICQoLDA0ODw==',
|
||||
},
|
||||
},
|
||||
clientGuarantor: {
|
||||
idSeria: 'I-AH',
|
||||
idNo: '435937',
|
||||
accountNo: '23908934160170851604201',
|
||||
name: 'Kirtow',
|
||||
surname: 'Mämmetniýaz',
|
||||
availableAmount: 40900,
|
||||
clientType: 'guarantor',
|
||||
signGuarantor: {
|
||||
key1: '6SQbdKd6qWdP8Wa11rF2CVLfLkcA66wbX5OewzhJey+hpAcOCmm0gppXCk1BBFKraKHicumzDoWrVN1Pz1oFYuv6t01fz2E9C1oLE6a2Ta0RsRo=',
|
||||
key2: 'AAECAwQFBgcICQoLDA0ODw==',
|
||||
},
|
||||
},
|
||||
availableAmount: 40900,
|
||||
creditCardAccountNumber: '23908934160170770960000',
|
||||
mrtIsInsuarance: 0,
|
||||
termInYears: 1,
|
||||
}),
|
||||
},
|
||||
);
|
||||
const headers = {
|
||||
'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
|
||||
};
|
||||
|
||||
const formData = new URLSearchParams();
|
||||
formData.append('app', 'sanlykarz');
|
||||
formData.append('id', borrowerData.idNo);
|
||||
formData.append('md-order', paymentDetails['md-order']);
|
||||
formData.append('acs-req-id', submitCardDetails['acs-request-id']);
|
||||
formData.append('acs-session-url', submitCardDetails['acs-session-url']);
|
||||
formData.append('otp', codeValue);
|
||||
formData.append('term-url', submitCardDetails['terminate-url']);
|
||||
|
||||
const response = await fetch('https://shahsyotag.halkbank.gov.tm/api/v1/confirm-payment', {
|
||||
method: 'POST',
|
||||
headers: headers,
|
||||
body: formData.toString(),
|
||||
});
|
||||
|
||||
const jsonedResponse = await response.json();
|
||||
|
||||
if (jsonedResponse.status === 'ok') {
|
||||
setInvalidData(false);
|
||||
setStage(15);
|
||||
} else {
|
||||
setInvalidData(true);
|
||||
}
|
||||
} catch (error) {}
|
||||
};
|
||||
|
||||
const codeResend = async () => {
|
||||
try {
|
||||
const headers = {
|
||||
'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
|
||||
};
|
||||
|
||||
const formData = new URLSearchParams();
|
||||
formData.append('app', 'sanlykarz');
|
||||
formData.append('id', borrowerData.idNo);
|
||||
formData.append('acs-req-id', submitCardDetails['acs-request-id']);
|
||||
formData.append('acs-session-url', submitCardDetails['acs-session-url']);
|
||||
|
||||
const response = await fetch('https://shahsyotag.halkbank.gov.tm/app/api/v1/resend-code', {
|
||||
method: 'POST',
|
||||
headers: headers,
|
||||
body: formData.toString(),
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error(`HTTP error! Status: ${response.status}`);
|
||||
}
|
||||
|
||||
const responseJson = await response.json();
|
||||
|
||||
console.log(responseJson);
|
||||
|
||||
setIsLoading(false);
|
||||
const jsonedResponse = await response.json();
|
||||
} catch (error) {
|
||||
console.error(error.toString());
|
||||
// Handle errors as needed
|
||||
|
|
@ -92,8 +95,7 @@ const PhoneAccept = ({ setStage }) => {
|
|||
};
|
||||
|
||||
const onSubmit = (data) => {
|
||||
console.log('fetch');
|
||||
fetchData();
|
||||
confirmPayment();
|
||||
};
|
||||
|
||||
if (isLoading) {
|
||||
|
|
@ -104,29 +106,29 @@ const PhoneAccept = ({ setStage }) => {
|
|||
);
|
||||
}
|
||||
|
||||
if (error) {
|
||||
return (
|
||||
<section className="imm-cs-1">
|
||||
<h1 className="cs-2-title">Error...</h1>
|
||||
<button type="button" className="sign-btn reg-btn" onClick={() => setStage(8)}>
|
||||
<div>
|
||||
<div className="btn-img">
|
||||
<img src={next_reverse} alt="logout" />
|
||||
</div>
|
||||
<h3>
|
||||
{locale === 'TKM'
|
||||
? 'Yza'
|
||||
: locale === 'РУС'
|
||||
? 'Назад'
|
||||
: locale === 'ENG'
|
||||
? 'Back'
|
||||
: 'Yza'}
|
||||
</h3>
|
||||
</div>
|
||||
</button>
|
||||
</section>
|
||||
);
|
||||
}
|
||||
// if (error) {
|
||||
// return (
|
||||
// <section className="imm-cs-1">
|
||||
// <h1 className="cs-2-title">Error...</h1>
|
||||
// <button type="button" className="sign-btn reg-btn" onClick={() => setStage(8)}>
|
||||
// <div>
|
||||
// <div className="btn-img">
|
||||
// <img src={next_reverse} alt="logout" />
|
||||
// </div>
|
||||
// <h3>
|
||||
// {locale === 'TKM'
|
||||
// ? 'Yza'
|
||||
// : locale === 'РУС'
|
||||
// ? 'Назад'
|
||||
// : locale === 'ENG'
|
||||
// ? 'Back'
|
||||
// : 'Yza'}
|
||||
// </h3>
|
||||
// </div>
|
||||
// </button>
|
||||
// </section>
|
||||
// );
|
||||
// }
|
||||
|
||||
return (
|
||||
<section className="imm-cs-1">
|
||||
|
|
@ -135,10 +137,11 @@ const PhoneAccept = ({ setStage }) => {
|
|||
{locale === 'TKM'
|
||||
? 'Karzyň kalkulýatory'
|
||||
: locale === 'РУС'
|
||||
? 'Введите код с СМС оповещения'
|
||||
? 'Введите код с СМС оповещения, отправленный на номер '
|
||||
: locale === 'ENG'
|
||||
? 'Loan calculator'
|
||||
: 'Karzyň kalkulýatory'}
|
||||
{submitCardDetails['three-d-secure-number']}
|
||||
</h2>
|
||||
<div className="imm-credit-form-wrapper">
|
||||
<div className="input-block">
|
||||
|
|
@ -152,12 +155,19 @@ const PhoneAccept = ({ setStage }) => {
|
|||
: 'At'}
|
||||
</label>
|
||||
<input value={codeValue} onChange={handleCodeChange} type="text" id="code" />
|
||||
<span className="another-option">Отправить код снова</span>
|
||||
{/* <span className="another-option" onClick={codeResend}>
|
||||
Отправить код снова
|
||||
</span> */}
|
||||
{/* {errors.code && <span>{errors.code.message}</span>} */}
|
||||
</div>
|
||||
</div>
|
||||
{invalidData && (
|
||||
<section className="imm-cs-1">
|
||||
<h1 className="cs-2-title">Ошибкаб проверьте данные</h1>
|
||||
</section>
|
||||
)}
|
||||
<div className="cu-bottom cd-2-title">
|
||||
<button type="button" className="sign-btn reg-btn" onClick={() => setStage(8)}>
|
||||
<button type="button" className="sign-btn reg-btn" onClick={() => setStage(13)}>
|
||||
<div>
|
||||
<div className="btn-img">
|
||||
<img src={next_reverse} alt="logout" />
|
||||
|
|
@ -174,7 +184,7 @@ const PhoneAccept = ({ setStage }) => {
|
|||
</div>
|
||||
</button>
|
||||
<button
|
||||
disabled={codeValue.length !== 6 && !isLoading ? true : false}
|
||||
disabled={codeValue.length !== 5 && !isLoading ? true : false}
|
||||
type="submit"
|
||||
onClick={onSubmit}
|
||||
className="sign-btn cu-btn">
|
||||
|
|
|
|||
|
|
@ -24,6 +24,10 @@ import CalculateStage from '../ImmediateCreditsStages/CalculateStage';
|
|||
import AcceptStage from '../ImmediateCreditsStages/AcceptStage';
|
||||
import PhoneAccept from '../ImmediateCreditsStages/PhoneAccept';
|
||||
import CardDetails from '../ImmediateCreditsStages/CardDetails';
|
||||
import LoanAccepted from '../ImmediateCreditsStages/LoanAccepted';
|
||||
import CardRegistration from '../ImmediateCreditsStages/CardRegistration';
|
||||
import PaymentDetails from '../ImmediateCreditsStages/PaymentDetails';
|
||||
import PaymentSuccess from '../ImmediateCreditsStages/PaymentSuccess';
|
||||
|
||||
const ImmediateCreditModal = ({
|
||||
modalOpen,
|
||||
|
|
@ -43,6 +47,7 @@ const ImmediateCreditModal = ({
|
|||
const [error, setError] = useState();
|
||||
|
||||
const [errMessage, setErrMessage] = useState('');
|
||||
const [acceptedMessage, setAcceptedMessage] = useState('');
|
||||
|
||||
const [borrowerData, setBorrowerData] = useState();
|
||||
const [guaranterData, setGuaranterData] = useState();
|
||||
|
|
@ -55,9 +60,11 @@ const ImmediateCreditModal = ({
|
|||
const [phoneNumber, setPhoneNumber] = useState('');
|
||||
const [cardDetails, setCardDetails] = useState('');
|
||||
|
||||
console.log(borrowerData);
|
||||
const [userDataRes, setUserDataRes] = useState();
|
||||
const [paymentLink, setPaymentLink] = useState('');
|
||||
|
||||
const userToken = localStorage.getItem('userToken');
|
||||
const [paymentDetails, setPaymentDetails] = useState();
|
||||
const [submitCardDetails, setSumbitCardDetails] = useState();
|
||||
|
||||
return (
|
||||
<section className={modalOpen ? 'modal credit-modal active' : 'modal credit-modal'}>
|
||||
|
|
@ -298,6 +305,7 @@ const ImmediateCreditModal = ({
|
|||
signRecipient={signRecipient}
|
||||
setErrMessage={setErrMessage}
|
||||
setSignGuaranter={setSignGuaranter}
|
||||
borrowerData={borrowerData}
|
||||
/>
|
||||
) : stage === 5 ? (
|
||||
<GuaranterInfo
|
||||
|
|
@ -329,6 +337,10 @@ const ImmediateCreditModal = ({
|
|||
borrowerData={borrowerData}
|
||||
guaranterData={guaranterData}
|
||||
isGuranter={isGuranter}
|
||||
setErrMessage={setErrMessage}
|
||||
setAcceptedMessage={setAcceptedMessage}
|
||||
setUserDataRes={setUserDataRes}
|
||||
userDataRes={userDataRes}
|
||||
/>
|
||||
) : stage === 9 ? (
|
||||
<PhoneAccept
|
||||
|
|
@ -339,6 +351,41 @@ const ImmediateCreditModal = ({
|
|||
recepientAmount={recepientAmount}
|
||||
creditDuration={creditDuration}
|
||||
/>
|
||||
) : stage === 10 ? (
|
||||
<NotAUser setStage={setStage} stage={stage} errMessage={errMessage} />
|
||||
) : stage === 11 ? (
|
||||
<LoanAccepted
|
||||
setModalOpen={setModalOpen}
|
||||
setStage={setStage}
|
||||
stage={stage}
|
||||
acceptedMessage={acceptedMessage}
|
||||
/>
|
||||
) : stage === 12 ? (
|
||||
<CardRegistration
|
||||
setStage={setStage}
|
||||
stage={stage}
|
||||
borrowerData={borrowerData}
|
||||
setPaymentLink={setPaymentLink}
|
||||
paymentLink={paymentLink}
|
||||
setPaymentDetails={setPaymentDetails}
|
||||
/>
|
||||
) : stage === 13 ? (
|
||||
<PaymentDetails
|
||||
setStage={setStage}
|
||||
paymentLink={paymentLink}
|
||||
paymentDetails={paymentDetails}
|
||||
borrowerData={borrowerData}
|
||||
setSumbitCardDetails={setSumbitCardDetails}
|
||||
/>
|
||||
) : stage === 14 ? (
|
||||
<PhoneAccept
|
||||
borrowerData={borrowerData}
|
||||
setStage={setStage}
|
||||
paymentDetails={paymentDetails}
|
||||
submitCardDetails={submitCardDetails}
|
||||
/>
|
||||
) : stage === 15 ? (
|
||||
<PaymentSuccess setStage={setStage} setModalOpen={setModalOpen} />
|
||||
) : (
|
||||
''
|
||||
)}
|
||||
|
|
|
|||
|
|
@ -1,23 +1,23 @@
|
|||
// IMPORT MODULES
|
||||
import React, { useState, useEffect, useContext } from "react";
|
||||
import { UserContext } from "../backend/UserContext";
|
||||
import { LanguageContext } from "../backend/LanguageContext";
|
||||
import axios from "axios";
|
||||
import React, { useState, useEffect, useContext } from 'react';
|
||||
import { UserContext } from '../backend/UserContext';
|
||||
import { LanguageContext } from '../backend/LanguageContext';
|
||||
import axios from 'axios';
|
||||
|
||||
// IMPORT COMPONENTS
|
||||
import Breadcrumb from "../components/global/Breadcrumb";
|
||||
import ImmediateCreditModal from "../components/immediateCredits/ImmediateCreditModal";
|
||||
import ProgressLoader from "../components/global/ProgressLoader";
|
||||
import Success from "../components/global/Success";
|
||||
import Error from "../components/global/Error";
|
||||
import Breadcrumb from '../components/global/Breadcrumb';
|
||||
import ImmediateCreditModal from '../components/immediateCredits/ImmediateCreditModal';
|
||||
import ProgressLoader from '../components/global/ProgressLoader';
|
||||
import Success from '../components/global/Success';
|
||||
import Error from '../components/global/Error';
|
||||
|
||||
// IMPORT HELPERS
|
||||
import { dataDestination } from "../destinationUrl";
|
||||
import { dataDestination } from '../destinationUrl';
|
||||
|
||||
// IMPORT IMAGES
|
||||
import credit from "../icons/credit-black.svg";
|
||||
import add from "../icons/add.svg";
|
||||
import allert from "../icons/info-circle.svg";
|
||||
import credit from '../icons/credit-black.svg';
|
||||
import add from '../icons/add.svg';
|
||||
import allert from '../icons/info-circle.svg';
|
||||
|
||||
const ImmediateCredit = () => {
|
||||
const { locale } = useContext(LanguageContext);
|
||||
|
|
@ -29,44 +29,75 @@ const ImmediateCredit = () => {
|
|||
const [loader, setLoader] = useState(false);
|
||||
// const [immediateCreditData, setImmediateCreditData] = useState();
|
||||
const [progress, setProgress] = useState(0);
|
||||
const userToken = localStorage.getItem('userToken');
|
||||
const [loansData, setLoansData] = useState();
|
||||
const [loanStatus, setLoanStatus] = useState();
|
||||
|
||||
useEffect(() => {
|
||||
if (modalOpen) {
|
||||
document.body.style.overflowY = "hidden";
|
||||
document.body.style.overflowY = 'hidden';
|
||||
} else {
|
||||
document.body.style.overflowY = "visible";
|
||||
document.body.style.overflowY = 'visible';
|
||||
}
|
||||
}, [modalOpen]);
|
||||
|
||||
// useEffect(() => {
|
||||
// let isMounted = true;
|
||||
// axios
|
||||
// .get(`${dataDestination}/credit_data`)
|
||||
// .then((res) => {
|
||||
// if (isMounted) {
|
||||
// setImmediateCreditData(res.data);
|
||||
// }
|
||||
// })
|
||||
// .catch();
|
||||
// return () => {
|
||||
// isMounted = false;
|
||||
// };
|
||||
// }, []);
|
||||
const fetchData = async () => {
|
||||
try {
|
||||
const headers = { Accept: 'application/json', Authorization: `Bearer ${userToken}` };
|
||||
|
||||
// console.log(immediateCreditData);
|
||||
const response = await fetch(`https://shahsyotag.halkbank.gov.tm/app/api/quick_loans`, {
|
||||
headers,
|
||||
});
|
||||
|
||||
const jsonedResponse = await response.json();
|
||||
|
||||
setLoansData(jsonedResponse);
|
||||
|
||||
// console.log('loan data', jsonedResponse);
|
||||
|
||||
checkStatus(jsonedResponse.request_hash.sign);
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
}
|
||||
};
|
||||
|
||||
const checkStatus = async (sign) => {
|
||||
try {
|
||||
const response = await fetch(
|
||||
`https://shahsyotag.halkbank.gov.tm/onlineloan-services/api/loancheck`,
|
||||
{
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
body: JSON.stringify({
|
||||
sign: sign,
|
||||
}),
|
||||
},
|
||||
);
|
||||
|
||||
const jsonedResponse = await response.json();
|
||||
|
||||
setLoanStatus(jsonedResponse);
|
||||
} catch (error) {}
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
fetchData();
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<section className="cards">
|
||||
{success ? (
|
||||
<Success
|
||||
message={
|
||||
locale === "TKM"
|
||||
? "Ýüzlenme ugradyldy!"
|
||||
: locale === "РУС"
|
||||
? "Ваш запрос успешно отправлен!"
|
||||
: locale === "ENG"
|
||||
? "Request was successfully sent!"
|
||||
: "Ýüzlenme ugradyldy!"
|
||||
locale === 'TKM'
|
||||
? 'Ýüzlenme ugradyldy!'
|
||||
: locale === 'РУС'
|
||||
? 'Ваш запрос успешно отправлен!'
|
||||
: locale === 'ENG'
|
||||
? 'Request was successfully sent!'
|
||||
: 'Ýüzlenme ugradyldy!'
|
||||
}
|
||||
setSuccess={setSuccess}
|
||||
/>
|
||||
|
|
@ -74,28 +105,28 @@ const ImmediateCredit = () => {
|
|||
{error ? (
|
||||
<Error
|
||||
message={
|
||||
locale === "TKM"
|
||||
? "Ýüzlenme ugradylmady"
|
||||
: locale === "РУС"
|
||||
? "Не удалось отправить запрос"
|
||||
: locale === "ENG"
|
||||
? "Failed to send request"
|
||||
: "Ýüzlenme ugradylmady"
|
||||
locale === 'TKM'
|
||||
? 'Ýüzlenme ugradylmady'
|
||||
: locale === 'РУС'
|
||||
? 'Не удалось отправить запрос'
|
||||
: locale === 'ENG'
|
||||
? 'Failed to send request'
|
||||
: 'Ýüzlenme ugradylmady'
|
||||
}
|
||||
setError={setError}
|
||||
/>
|
||||
) : null}
|
||||
<Breadcrumb
|
||||
image={credit}
|
||||
link={"/home/immediate-credits"}
|
||||
link={'/home/immediate-credits'}
|
||||
linkTitle={
|
||||
locale === "TKM"
|
||||
? "Çalt Karzlar"
|
||||
: locale === "РУС"
|
||||
? "Быстрые Кредиты"
|
||||
: locale === "ENG"
|
||||
? "Immediate Loans"
|
||||
: "Çalt Karzlar"
|
||||
locale === 'TKM'
|
||||
? 'Çalt Karzlar'
|
||||
: locale === 'РУС'
|
||||
? 'Быстрые Кредиты'
|
||||
: locale === 'ENG'
|
||||
? 'Immediate Loans'
|
||||
: 'Çalt Karzlar'
|
||||
}
|
||||
/>
|
||||
<ImmediateCreditModal
|
||||
|
|
@ -115,13 +146,13 @@ const ImmediateCredit = () => {
|
|||
<div className="cards-inner">
|
||||
<div className="card-title">
|
||||
<h2 className="cards-title">
|
||||
{locale === "TKM"
|
||||
? "Çalt karz almak üçin onlaýn-ýüzlenme"
|
||||
: locale === "РУС"
|
||||
? "Онлайн-заявка для получения быстрого кредита"
|
||||
: locale === "ENG"
|
||||
? "Online application for immediate loan issuance"
|
||||
: "Çalt karz almak üçin onlaýn-ýüzlenme"}
|
||||
{locale === 'TKM'
|
||||
? 'Çalt karz almak üçin onlaýn-ýüzlenme'
|
||||
: locale === 'РУС'
|
||||
? 'Онлайн-заявка для получения быстрого кредита'
|
||||
: locale === 'ENG'
|
||||
? 'Online application for immediate loan issuance'
|
||||
: 'Çalt karz almak üçin onlaýn-ýüzlenme'}
|
||||
</h2>
|
||||
<button
|
||||
type="button"
|
||||
|
|
@ -130,19 +161,18 @@ const ImmediateCredit = () => {
|
|||
window.scrollTo(0, 0);
|
||||
setStage(1);
|
||||
setModalOpen(true);
|
||||
}}
|
||||
>
|
||||
}}>
|
||||
<div className="card-img">
|
||||
<img src={add} alt="add" />
|
||||
</div>
|
||||
<h3>
|
||||
{locale === "TKM"
|
||||
? "Ýüzlenme doldurmak"
|
||||
: locale === "РУС"
|
||||
? "Заполнить заявку"
|
||||
: locale === "ENG"
|
||||
? "Fill in application"
|
||||
: "Ýüzlenme doldurmak"}
|
||||
{locale === 'TKM'
|
||||
? 'Ýüzlenme doldurmak'
|
||||
: locale === 'РУС'
|
||||
? 'Заполнить заявку'
|
||||
: locale === 'ENG'
|
||||
? 'Fill in application'
|
||||
: 'Ýüzlenme doldurmak'}
|
||||
</h3>
|
||||
</button>
|
||||
</div>
|
||||
|
|
@ -152,144 +182,41 @@ const ImmediateCredit = () => {
|
|||
<tr className="table-head">
|
||||
<th>ID</th>
|
||||
<th>
|
||||
{locale === "TKM"
|
||||
? "Görnüşi"
|
||||
: locale === "РУС"
|
||||
? "Тип"
|
||||
: locale === "ENG"
|
||||
? "Type"
|
||||
: "Görnüşi"}
|
||||
{locale === 'TKM'
|
||||
? 'Görnüşi'
|
||||
: locale === 'РУС'
|
||||
? 'Дата заявки'
|
||||
: locale === 'ENG'
|
||||
? 'Type'
|
||||
: 'Görnüşi'}
|
||||
</th>
|
||||
|
||||
<th>
|
||||
{locale === "TKM"
|
||||
? "Senesi"
|
||||
: locale === "РУС"
|
||||
? "Дата"
|
||||
: locale === "ENG"
|
||||
? "Date"
|
||||
: "Senesi"}
|
||||
</th>
|
||||
<th>
|
||||
{locale === "TKM"
|
||||
? "Ýagdaýy"
|
||||
: locale === "РУС"
|
||||
? "Статус"
|
||||
: locale === "ENG"
|
||||
? "Status"
|
||||
: "Ýagdaýy"}
|
||||
</th>
|
||||
<th>
|
||||
{locale === "TKM"
|
||||
? "Amal"
|
||||
: locale === "РУС"
|
||||
? "Действие"
|
||||
: locale === "ENG"
|
||||
? "Operation"
|
||||
: "Amal"}
|
||||
{locale === 'TKM'
|
||||
? 'Ýagdaýy'
|
||||
: locale === 'РУС'
|
||||
? 'Статус'
|
||||
: locale === 'ENG'
|
||||
? 'Status'
|
||||
: 'Ýagdaýy'}
|
||||
</th>
|
||||
</tr>
|
||||
{user ? (
|
||||
user.online_credit.length !== 0 ? (
|
||||
[...user.online_credit].reverse().map((el, i) => {
|
||||
return (
|
||||
<tr key={i}>
|
||||
<td>#{el.id}</td>
|
||||
<td>{el.type}</td>
|
||||
<td>{el.date}</td>
|
||||
<td
|
||||
className={
|
||||
el.status === "kart_chykarylmady"
|
||||
? "red"
|
||||
: el.status === "kart_chykaryldy" ||
|
||||
el.status === "kabul_edildi"
|
||||
? "green"
|
||||
: ""
|
||||
}
|
||||
>
|
||||
{el.status === "ugradyldy"
|
||||
? locale === "TKM"
|
||||
? "Ugradyldy"
|
||||
: locale === "РУС"
|
||||
? "Отправлено"
|
||||
: locale === "ENG"
|
||||
? "Sent"
|
||||
: "Ugradyldy"
|
||||
: el.status === "kabul_edildi"
|
||||
? locale === "TKM"
|
||||
? "Kabul edildi"
|
||||
: locale === "РУС"
|
||||
? "Принята"
|
||||
: locale === "ENG"
|
||||
? "Accepted"
|
||||
: "Kabul edildi"
|
||||
: el.status === "seredilyar"
|
||||
? locale === "TKM"
|
||||
? "Görülyar"
|
||||
: locale === "РУС"
|
||||
? "На стадии рассмотрения"
|
||||
: locale === "ENG"
|
||||
? "Under consideration"
|
||||
: "Görülyar"
|
||||
: el.status === "kart_chykaryldy"
|
||||
? locale === "TKM"
|
||||
? "Tassyklandy"
|
||||
: locale === "РУС"
|
||||
? "Утверждено"
|
||||
: locale === "ENG"
|
||||
? "Approved"
|
||||
: "Tassyklandy"
|
||||
: el.status === "kart_chykarylmady"
|
||||
? locale === "TKM"
|
||||
? "Ret edildi"
|
||||
: locale === "РУС"
|
||||
? "Отказано"
|
||||
: locale === "ENG"
|
||||
? "Denied"
|
||||
: "Ret edildi"
|
||||
: ""}
|
||||
</td>
|
||||
<td>
|
||||
{el.status === "5" ? (
|
||||
<div className="reject">
|
||||
<div className="reason">
|
||||
<h4>{el.action}</h4>
|
||||
</div>
|
||||
<img src={allert} alt="reject" />
|
||||
</div>
|
||||
) : (
|
||||
""
|
||||
)}
|
||||
</td>
|
||||
</tr>
|
||||
);
|
||||
})
|
||||
) : (
|
||||
<tr>
|
||||
<td>
|
||||
{locale === "TKM"
|
||||
? "Tabşyrlan ýüzlenme ýok"
|
||||
: locale === "РУС"
|
||||
? "Заявок на кредиты нет"
|
||||
: locale === "ENG"
|
||||
? "There are no applications for loan issuance"
|
||||
: "Tabşyrlan ýüzlenme ýok"}
|
||||
</td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
)
|
||||
{loansData && loanStatus ? (
|
||||
<tr>
|
||||
<td>#{loansData.id}</td>
|
||||
<td>{loansData.created_at}</td>
|
||||
<td>{loanStatus.messageRu}</td>
|
||||
</tr>
|
||||
) : (
|
||||
<tr>
|
||||
<td>
|
||||
{locale === "TKM"
|
||||
? "Tabşyrlan ýüzlenme ýok"
|
||||
: locale === "РУС"
|
||||
? "Заявок на кредиты нет"
|
||||
: locale === "ENG"
|
||||
? "There are no applications for loan issuance"
|
||||
: "Tabşyrlan ýüzlenme ýok"}
|
||||
{locale === 'TKM'
|
||||
? 'Tabşyrlan ýüzlenme ýok'
|
||||
: locale === 'РУС'
|
||||
? 'Заявок на кредиты нет'
|
||||
: locale === 'ENG'
|
||||
? 'There are no applications for loan issuance'
|
||||
: 'Tabşyrlan ýüzlenme ýok'}
|
||||
</td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
|
|
|
|||
|
|
@ -87,3 +87,22 @@
|
|||
font-size: 3rem;
|
||||
color: red;
|
||||
}
|
||||
|
||||
.succes-title {
|
||||
font-size: 3rem;
|
||||
color: $base-green;
|
||||
}
|
||||
|
||||
.loan-accepted-title {
|
||||
color: $base-green;
|
||||
}
|
||||
|
||||
.payment-details {
|
||||
display: flex;
|
||||
gap: 2.4rem;
|
||||
|
||||
h2 {
|
||||
font-weight: normal;
|
||||
font-size: 1.8rem;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue