diff --git a/actions/companyActions.js b/actions/companyActions.js index 1b70f05..24d986f 100644 --- a/actions/companyActions.js +++ b/actions/companyActions.js @@ -4,6 +4,7 @@ import Router from 'next/router'; import moment from 'moment'; import * as actionTypes from '../constants/actionTypes'; +import { getEDOOperatorList } from './index'; if(process.browser) { @@ -18,12 +19,12 @@ if(process.browser) this.append(keyName, obj[key]); } } - }; + }; } export const getCompanyInfo = ({ dispatch }) => { - //console.log("getCompanyInfo"); + console.log("ACTION", "company", "getCompanyInfo"); return new Promise((resolve, reject) => { @@ -32,9 +33,9 @@ export const getCompanyInfo = ({ dispatch }) => }) .then((response) => { + getEDOOperatorList({ dispatch }).then(() => {}).catch(() => {}); //console.log("getCompanyInfo", "response", response.data); - dispatch({ type: actionTypes.COMPANY, data: response.data }); resolve(); }) diff --git a/actions/contractActions.js b/actions/contractActions.js index 4bd959c..745ad17 100644 --- a/actions/contractActions.js +++ b/actions/contractActions.js @@ -336,7 +336,7 @@ export const getContractFines = ({ dispatch, contract, }) => //console.log("ACTION", "getContractFines", "response.data", response.data); - let query = nSQL(response.data.fines).query("select"); + let query = nSQL(response.data).query("select"); query = query.orderBy({ date: "desc" }); query.exec().then((rows) => { diff --git a/actions/dealsActions.js b/actions/dealsActions.js index 702199b..bd4eee3 100644 --- a/actions/dealsActions.js +++ b/actions/dealsActions.js @@ -3,101 +3,390 @@ import { Cookies } from 'react-cookie'; import Router from 'next/router'; import moment from 'moment'; import { nSQL } from "@nano-sql/core"; +import { eachSeries } from 'async'; +import fileDownload from 'js-file-download'; import * as actionTypes from '../constants/actionTypes'; import * as currentState from '../reducers/initialState'; -/*DEALS_LIST -/lk/ConsiderationOpportunity/quote - -[{ - "quote_number": "582189", - "price": 5490000, - "first_payment_perc": 30, - "first_payment_rub": 1647000, - "brand_name": "Volkswagen", - "model_name": "Touareg", - "object_count": 1, -}, { - "quote_number": "580008", - "price": 5341770, - "first_payment_perc": 30, - "first_payment_rub": 1647000, - "brand_name": "Volkswagen", - "model_name": "Touareg", - "object_count": 1, -}] - -[{ - "opp_number": "780", - "statuscode_id": 107, - "statuscode_name": " ", - "comment": null, -}, { - "opp_number": "37197", - "statuscode_id": 101, - "statuscode_name": " ", - "comment": null, -}] -opp_number- номер Лизинговой сделки -statuscode_id - номер этапа -statuscode_name - имя этапа -comment - сопроводительный текст для данного этапа, который надо выводить - -*/ - -export const getDeals = ({ dispatch }) => +if(process.browser) { - console.log("ACTION", "deals", "getDeals()", `${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/deals`); + FormData.prototype.appendObject = function(obj, namespace) + { + let keyName; + for (var key in obj) + { + if (obj.hasOwnProperty(key)) + { + keyName = [namespace, '[', key, ']'].join(''); + this.append(keyName, obj[key]); + } + } + }; +} + +export const getDeals = ({ dispatch, update = false }) => +{ + const url = `${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/deals`; + + console.log("ACTION", "deals", "getDeals()", { url }); + return new Promise((resolve, reject) => { - console.log("??????????????????????? WTF"); - - axios.post(`${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/deals`, {}, { + axios.post(url, {}, { withCredentials: true, }) .then((response) => { - console.log("!!!!!!!!!!!!!!!!!!!!!!!!! GOOOOOOD"); console.log("ACTION", "deals", "getDeals()", "response", response.data); + + /* + if(update) + { + for(let i in response.data) + { + if(response.data[i].opp_number == "20325") + { + response.data[i].statuscode_id = 101; + } + } + } + */ + dispatch({ type: actionTypes.DEALS_LIST, data: { - list: [{ - "opp_number": "780", - "statuscode_id": 107, - "statuscode_name": " ", - "comment": null, - }, { - "opp_number": "37197", - "statuscode_id": 101, - "statuscode_name": " ", - "comment": null, - }] + list: response.data } }); + resolve(); }) .catch((error) => { - console.log("!!!!!!!!!!!!!!!!!!!!!!!!! ERROR", { action: actionTypes.DEALS_LIST }); + console.error("ACTION", "deals", "getDeals()", "ERROR"); + console.error(error); + + const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при вызове метода ConsiderationOpportunity" } }); + window.dispatchEvent(eventMessage); + dispatch({ type: actionTypes.DEALS_LIST, data: { - list: [{ - "opp_number": "780", - "statuscode_id": 107, - "statuscode_name": " ", - "comment": null, - }, { - "opp_number": "37197", - "statuscode_id": 101, - "statuscode_name": " ", - "comment": null, - }] + list: [] } }); + + reject(); + }); + }); +} + +export const getDealOffers = ({ dispatch, deal_id }) => +{ + const url = `${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/deals/offer/list`; + + console.log("ACTION", "deals", "getDealOffers()", { url }); + console.log("ACTION", "deals", "getDealOffers()", { deal_id }); + + return new Promise((resolve, reject) => + { + axios.post(url, { deal_id }, { + withCredentials: true, + }) + .then((response) => + { + console.log("ACTION", "deals", "getDealOffers()", "response", response.data); + + dispatch({ + type: actionTypes.DEAL_OFFERS_LIST, + data: { + deal_id, + list: response.data + } + }); + + resolve(); + }) + .catch((error) => + { + console.error("ACTION", "deals", "getDealOffers()", "ERROR"); console.error(error); + + const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при вызове метода quote" } }); + window.dispatchEvent(eventMessage); + + dispatch({ + type: actionTypes.DEAL_OFFERS_LIST, + data: { + deal_id, + list: [] + } + }); + + reject(); + }); + }); +} + +export const downloadDealOffer = ({ quote_number, filename }) => +{ + return new Promise((resolve, reject) => + { + const url = `${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/deals/offer/download`; + + axios.get(url, { + params: { quote_number }, + responseType: 'blob', + }) + .then((response) => + { + fileDownload(response.data, filename); + resolve(); + }) + .catch((error) => + { + console.error("ACTION", "sign", "downloadDealOffer()", "ERROR"); + console.error(error); + + const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при вызове метода offerprintform" } }); + window.dispatchEvent(eventMessage); + + reject(error.data); + }); + }); +} + +export const acceptDealOffers = ({ deal_id, offers }) => +{ + const url = `${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/deals/accept`; + + console.log("ACTION", "deals", "acceptDealOffers()", { url }); + console.log("ACTION", "deals", "acceptDealOffers()", { deal_id, offers, }); + + return new Promise((resolve, reject) => + { + axios.post(url, { deal_id, offers }, { + withCredentials: true, + }) + .then((response) => + { + console.log("ACTION", "deals", "acceptDealOffers()", "response", response.data); + + resolve(); + }) + .catch((error) => + { + console.error("ACTION", "deals", "acceptDealOffers()", "ERROR"); + console.error(error); + + const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при вызове метода quote accept" } }); + window.dispatchEvent(eventMessage); + + reject(); + }); + }); +} + +export const getDealDocuments = ({ dispatch, deal_id }) => +{ + const url = `${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/deals/documents`; + + console.log("ACTION", "deals", "getDealDocuments()", { url }); + console.log("ACTION", "deals", "getDealDocuments()", { deal_id, }); + + return new Promise((resolve, reject) => + { + axios.post(url, { deal_id }, { + withCredentials: true, + }) + .then((response) => + { + console.log("ACTION", "deals", "getDealDocuments()", "response", response.data); + + dispatch({ + type: actionTypes.DEAL_DOCUMENTS_LIST, + data: { + deal_id, + documents: response.data.documents, + uploaded: response.data.uploaded, + } + }); + + resolve(); + }) + .catch((error) => + { + console.error("ACTION", "deals", "getDealDocuments()", "ERROR"); + console.error(error); + + const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при вызове метода document" } }); + window.dispatchEvent(eventMessage); + + dispatch({ + type: actionTypes.DEAL_DOCUMENTS_LIST, + data: { + deal_id, + documents: [], + uploaded: {}, + } + }); + + reject(); + }); + }); +} + +export const sendDealDocuments = ({ deal_id }) => +{ + return new Promise((resolve, reject) => + { + const payload = { + deal_id, + }; + + axios.post(`${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/deals/upload`, payload, + { + withCredentials: true, + }) + .then(async (response) => + { + console.log("ACTION", "deals", "sendDealDocuments", "response.data", response.data); + + setTimeout(() => + { + resolve(); + }, 20000); + }) + .catch((error) => + { + console.error(error); + + const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при отправке пакета документов для сделки" } }); + window.dispatchEvent(eventMessage); + + reject(); + }); + }); +} + +export const getDealContracts = ({ dispatch, deal_id }) => +{ + const url = `${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/deals/contracts`; + + console.log("ACTION", "deals", "getDealContracts()", { url }); + console.log("ACTION", "deals", "getDealContracts()", { deal_id, }); + + return new Promise((resolve, reject) => + { + axios.post(url, { deal_id }, { + withCredentials: true, + }) + .then((response) => + { + console.log("ACTION", "deals", "getDealContracts()", "response", response.data); + + dispatch({ + type: actionTypes.DEAL_CONTRACTS_LIST, + data: { + deal_id, + list: response.data + } + }); + + resolve(); + }) + .catch((error) => + { + console.error("ACTION", "deals", "getDealContracts()", "ERROR"); + console.error(error); + + const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при вызове метода contract" } }); + window.dispatchEvent(eventMessage); + + dispatch({ + type: actionTypes.DEAL_CONTRACTS_LIST, + data: { + deal_id, + list: [] + } + }); + + reject(); + }); + }); +} + +export const attachDealDocument = ({ deal_id, document_id, document_name, group, index, lastModified, filename, file, type }) => +{ + return new Promise((resolve, reject) => + { + let data = new FormData(); + data.append('file', file); + + const payload = new URLSearchParams({ + deal_id, + document_id, + document_name, + group, + filename, + index, + lastModified, + type + }); + + axios.post(`${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/deals/file/attach?${ payload.toString() }`, data, + { + headers: { + "Content-Type": "multipart/form-data", + }, + withCredentials: true, + }) + .then(async (response) => + { + console.log("ACTION", "deals", "attachDealDocument", "response.data", response.data); + + resolve(); + }) + .catch((error) => + { + console.error(error); + + const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при загрузке документа" } }); + window.dispatchEvent(eventMessage); + + reject(); + }); + }); +} + +export const removeDealDocument = ({ deal_id, group, index, }) => +{ + return new Promise((resolve, reject) => + { + const payload = new URLSearchParams({ + deal_id, + group, + index, + }); + + axios.post(`${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/deals/file/remove?${ payload.toString() }`, {}, + { + withCredentials: true, + }) + .then(async (response) => + { + console.log("ACTION", "deals", "removeDocument", "response.data", response.data); + + resolve(); + }) + .catch((error) => + { + console.error(error); + + const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при удалении документа" } }); + window.dispatchEvent(eventMessage); + reject(); }); }); diff --git a/actions/edoActions.js b/actions/edoActions.js new file mode 100644 index 0000000..2bca372 --- /dev/null +++ b/actions/edoActions.js @@ -0,0 +1,323 @@ +import axios from 'axios'; +import { Cookies } from 'react-cookie'; +import Router from 'next/router'; +import moment from 'moment'; +import { nSQL } from "@nano-sql/core"; +import { eachSeries } from 'async'; + +import * as actionTypes from '../constants/actionTypes'; +import * as currentState from '../reducers/initialState'; + +export const getEDOOperatorList = ({ dispatch, update = false }) => +{ + const url = `${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/edo/operators`; + + console.log("ACTION", "edo", "getEDOOperatorList()", { url }); + + return new Promise((resolve, reject) => + { + axios.post(url, {}, { + withCredentials: true, + }) + .then((response) => + { + console.log("ACTION", "edo", "getEDOOperatorList()", "response", response.data); + + /* + dispatch({ + type: actionTypes.EDO_OPERATORS_LIST, + data: { + list: [ + { + "box_name": "ООО С К \"МОНОЛИТ-РУ\"", + "box_id": "7785f775578d4646aea1d323e703065d@diadoc.ru" + }, { + "box_name": "ООО СК \"МОНОЛИТ-РУ\" (роуминг, ООО «Такском» (Файлер))", + "box_id": "b8fbc5c395f54deabe6b8d84a10921f0@diadoc.ru" + } + ] + } + }); + */ + + dispatch({ + type: actionTypes.EDO_OPERATORS_LIST, + data: { + operators: response.data.box_edo, + message: response.data.message, + } + }); + + resolve(); + }) + .catch((error) => + { + console.error("ACTION", "edo", "getEDOOperatorList()", "ERROR"); + console.error(error); + + const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при вызове метода GetEdoBox" } }); + window.dispatchEvent(eventMessage); + + dispatch({ + type: actionTypes.EDO_OPERATORS_LIST, + data: { + operators: [], + message: "Невозможно получить список операторов ЭДО", + } + }); + + reject(); + }); + }); +} + +export const getEDOInvitesList = ({ dispatch, update = false }) => +{ + const url = `${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/edo/invites`; + + console.log("ACTION", "edo", "getEDOInvitesList()", { url }); + + return new Promise((resolve, reject) => + { + axios.post(url, {}, { + withCredentials: true, + }) + .then((response) => + { + console.log("ACTION", "edo", "getEDOInvitesList()", "response", response.data); + + dispatch({ + type: actionTypes.EDO_INVITES_LIST, + data: { + invites: response.data.box_edo + } + }); + + resolve(); + }) + .catch((error) => + { + console.error("ACTION", "edo", "getEDOInvitesList()", "ERROR"); + console.error(error); + + const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при вызове метода GetInviteEdoBox" } }); + window.dispatchEvent(eventMessage); + + dispatch({ + type: actionTypes.EDO_INVITES_LIST, + data: { + invites: [] + } + }); + + reject(); + }); + }); +} + +export const inviteToEDO = () => +{ + const url = `${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/edo/invite/send`; + + console.log("ACTION", "edo", "inviteToEDO()", { url }); + + return new Promise((resolve, reject) => + { + axios.post(url, {}, { + withCredentials: true, + }) + .then((response) => + { + console.log("ACTION", "edo", "inviteToEDO()", "response", response.data); + + resolve(response.data); + }) + .catch((error) => + { + console.error("ACTION", "edo", "inviteToEDO()", "ERROR"); + console.error(error); + + const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при вызове метода InviteEdoBox" } }); + window.dispatchEvent(eventMessage); + + reject(error.data); + }); + }); +} + +export const createEDOProject = (payload) => +{ + const url = `${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/edo/project`; + + console.log("ACTION", "edo", "createEDOProject()", { url }); + + return new Promise((resolve, reject) => + { + axios.post(url, payload, { + withCredentials: true, + }) + .then((response) => + { + console.log("ACTION", "edo", "createEDOProject()", "response", response.data); + + resolve(response.data); + }) + .catch((error) => + { + console.error("ACTION", "edo", "createEDOProject()", "ERROR"); + console.error(error); + + const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при вызове метода CreateEDOProject" } }); + window.dispatchEvent(eventMessage); + + reject(error.data); + }); + }); +} + +export const docEDOSign = (payload) => +{ + const url = `${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/edo/sign`; + + if(parseInt(process.env.LOG, 10) === 1) + { + console.log("ACTION", "edo", "docEDOSign()", { url }); + } + + return new Promise((resolve, reject) => + { + axios.post(url, payload, { + withCredentials: true, + }) + .then((response) => + { + if(parseInt(process.env.LOG, 10) === 1) + { + console.log("ACTION", "edo", "docEDOSign()", "response", response.data); + } + + resolve(response.data); + }) + .catch((error) => + { + if(parseInt(process.env.LOG, 10) === 1) + { + console.error("ACTION", "edo", "docEDOSign()", "ERROR"); + console.error(error); + } + + const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при вызове метода SignEDODocument" } }); + window.dispatchEvent(eventMessage); + + reject(error.data); + }); + }); +} + +export const docEDOCancel = (payload) => +{ + const url = `${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/edo/cancel`; + + console.log("ACTION", "edo", "docEDOCancel()", { url }); + + return new Promise((resolve, reject) => + { + axios.post(url, payload, { + withCredentials: true, + }) + .then((response) => + { + console.log("ACTION", "edo", "docEDOCancel()", "response", response.data); + + resolve(response.data); + }) + .catch((error) => + { + console.error("ACTION", "edo", "docEDOCancel()", "ERROR"); + console.error(error); + + const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при вызове метода CancelDocument" } }); + window.dispatchEvent(eventMessage); + + reject(error.data); + }); + }); +} + +export const docEDOConnect = (payload) => +{ + const url = `${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/contract/sign/document/connect`; + + if(parseInt(process.env.LOG, 10) === 1) + { + console.log("ACTION", "edo", "docEDOConnect()", { url }); + } + + return new Promise((resolve, reject) => + { + axios.post(url, payload, { + withCredentials: true, + }) + .then((response) => + { + if(parseInt(process.env.LOG, 10) === 1) + { + console.log("ACTION", "edo", "docEDOConnect()", "response", response.data); + } + + resolve(response.data); + }) + .catch((error) => + { + if(parseInt(process.env.LOG, 10) === 1) + { + console.error("ACTION", "edo", "docEDOConnect()", "ERROR"); + console.error(error); + } + + const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при вызове метода DocEdoConnect" } }); + window.dispatchEvent(eventMessage); + + reject(error.data); + }); + }); +} + +export const docEDOStatus = (payload) => +{ + const url = `${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/contract/sign/document/status`; + + if(parseInt(process.env.LOG, 10) === 1) + { + console.log("ACTION", "edo", "docEDOStatus()", { url }); + } + + return new Promise((resolve, reject) => + { + axios.post(url, payload, { + withCredentials: true, + }) + .then((response) => + { + if(parseInt(process.env.LOG, 10) === 1) + { + console.log("ACTION", "edo", "docEDOStatus()", "response", response.data); + } + + resolve(response.data); + }) + .catch((error) => + { + if(parseInt(process.env.LOG, 10) === 1) + { + console.error("ACTION", "edo", "docEDOStatus()", "ERROR"); + console.error(error); + } + + const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при вызове метода GetEdoProjectID" } }); + window.dispatchEvent(eventMessage); + + reject(error.data); + }); + }); +} diff --git a/actions/fileActions.js b/actions/fileActions.js index c6554e3..131e7c3 100644 --- a/actions/fileActions.js +++ b/actions/fileActions.js @@ -5,6 +5,7 @@ import moment from 'moment'; import fileDownload from 'js-file-download'; import * as actionTypes from '../constants/actionTypes'; +import { logDocumentAccess } from './logsActions'; if(process.browser) { @@ -66,8 +67,6 @@ export const getFile = ({ id, filename }) => }) .catch((error) => { - //console.log("error"); - console.error(error); reject(); @@ -166,6 +165,14 @@ export const getReconciliationFile = ({ contract, date_from, date_to, filename } .then((response) => { fileDownload(response.data, filename); + logDocumentAccess({ + contract_number: contract, + document_name: "Акт сверки по ДЛ", + document_type: "act_bu", + document_period_from: date_from, + document_period_to: date_to, + }); + resolve(); }) .catch((error) => diff --git a/actions/index.js b/actions/index.js index 8b8f996..2e6213c 100644 --- a/actions/index.js +++ b/actions/index.js @@ -14,4 +14,6 @@ export * from './adminActions'; export * from './suggestsActions'; export * from './questionnaireActions'; export * from './feedbackActions'; -export * from './dealsActions'; \ No newline at end of file +export * from './dealsActions'; +export * from './edoActions'; +export * from './signActions'; \ No newline at end of file diff --git a/actions/logsActions.js b/actions/logsActions.js new file mode 100644 index 0000000..0c88ab3 --- /dev/null +++ b/actions/logsActions.js @@ -0,0 +1,40 @@ +import axios from 'axios'; +import { Cookies } from 'react-cookie'; +import Router from 'next/router'; +import moment from 'moment'; +import { nSQL } from "@nano-sql/core"; +import { eachSeries } from 'async'; + +import * as actionTypes from '../constants/actionTypes'; +import * as currentState from '../reducers/initialState'; + +export const logDocumentAccess = (payload) => +{ + const url = `${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/logs/track`; + + console.log("ACTION", "deals", "logDocumentAccess()", { url }); + console.log("ACTION", "deals", "logDocumentAccess()", { payload }); + + return new Promise((resolve, reject) => + { + payload.lk_user_id = global.store.getState().user.email; + payload.acc_number = global.store.getState().company.active; + + axios.post(url, [ payload ], { + withCredentials: true, + }) + .then((response) => + { + console.log("ACTION", "deals", "logDocumentAccess()", "response", response.data); + + resolve(); + }) + .catch((error) => + { + console.error("ACTION", "deals", "logDocumentAccess()", "ERROR"); + console.error(error); + + reject(); + }); + }); +} \ No newline at end of file diff --git a/actions/questionnaireActions.js b/actions/questionnaireActions.js index 4c222d5..fa22821 100644 --- a/actions/questionnaireActions.js +++ b/actions/questionnaireActions.js @@ -9,6 +9,7 @@ import { eachSeries, each } from "async"; import * as actionTypes from '../constants/actionTypes'; import { getCitizenshipTitleByCode } from '../utils/citizenship'; import { questionnaire_template } from '../reducers/initialState'; +import { getCompanyInfo } from './companyActions'; if(process.browser) { @@ -26,11 +27,28 @@ if(process.browser) }; } +export const createQuestionnaire = (deal_id) => +{ + return new Promise((resolve, reject) => + { + axios.post(`${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/questionnaire/create`, { deal_id }, { + withCredentials: true, + }) + .then(() => {}).catch(() => {}).finally(() => + { + getCompanyInfo({ dispatch: global.store.dispatch }) + .then(() => {}).catch(() => {}).finally(() => + { + resolve(); + }); + }); + }); +} + export const getQuestionnaire = ({ dispatch, id }) => { //console.log("ACTION", "support", "getAppeals()", `${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/questionnaire/get`); - return new Promise((resolve, reject) => { axios.get(`${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/questionnaire/read`, {}) diff --git a/actions/signActions.js b/actions/signActions.js new file mode 100644 index 0000000..b898fd9 --- /dev/null +++ b/actions/signActions.js @@ -0,0 +1,339 @@ +import axios from 'axios'; +import { Cookies } from 'react-cookie'; +import Router from 'next/router'; +import moment from 'moment'; +import { nSQL } from "@nano-sql/core"; +import { concatSeries, eachSeries } from 'async'; +import fileDownload from 'js-file-download'; + +import * as actionTypes from '../constants/actionTypes'; +import * as currentState from '../reducers/initialState'; + +export const signCheckCreatePrintForm = (payload) => +{ + const url = `${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/contract/sign/check`; + + console.log("ACTION", "sign", "signCheckCreatePrintForm()", { url }); + + return new Promise((resolve, reject) => + { + axios.post(url, payload, { + withCredentials: true, + }) + .then((response) => + { + console.log("ACTION", "sign", "signCheckCreatePrintForm()", "response", response.data); + + resolve(response.data); + }) + .catch((error) => + { + console.error("ACTION", "sign", "signCheckCreatePrintForm()", "ERROR"); + console.error(error); + + const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при вызове метода CheckCreatePrintForm" } }); + window.dispatchEvent(eventMessage); + + reject(error.data); + }); + }); +} + +export const signGetGUIDEntity = (payload) => +{ + const url = `${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/contract/sign/entity`; + + console.log("ACTION", "sign", "signGetGUIDEntity()", { url }); + + return new Promise((resolve, reject) => + { + axios.post(url, payload, { + withCredentials: true, + }) + .then((response) => + { + console.log("ACTION", "sign", "signGetGUIDEntity()", "response", response.data); + + resolve(response.data); + }) + .catch((error) => + { + console.error("ACTION", "sign", "signGetGUIDEntity()", "ERROR"); + console.error(error); + + const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при вызове метода GetGUIDEntity" } }); + window.dispatchEvent(eventMessage); + + resolve(response.data); + }); + }); +} + +export const signCheckPowerAttorneyClient = (payload) => +{ + const url = `${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/contract/sign/attorney/check`; + + return new Promise((resolve, reject) => + { + axios.post(url, payload, { + withCredentials: true, + }) + .then((response) => + { + console.log("ACTION", "sign", "signCheckPowerAttorneyClient()", "response", response.data); + resolve(response.data); + }) + .catch((error) => + { + console.error("ACTION", "sign", "signCheckPowerAttorneyClient()", "ERROR"); + console.error(error); + + const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при вызове метода CheckPowerAttorneyClient" } }); + window.dispatchEvent(eventMessage); + + reject(error.data); + }); + }); +} + +export const signGetPowerAttorneyClient = (payload) => +{ + const url = `${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/contract/sign/attorney/get`; + + return new Promise((resolve, reject) => + { + axios.post(url, payload, { + withCredentials: true, + }) + .then((response) => + { + console.log("ACTION", "sign", "signGetPowerAttorneyClient()", "response", response.data); + resolve(response.data); + }) + .catch((error) => + { + console.error("ACTION", "sign", "signGetPowerAttorneyClient()", "ERROR"); + console.error(error); + + const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при вызове метода GetPowerAttorneyClient" } }); + window.dispatchEvent(eventMessage); + + reject(error.data); + }); + }); +} + +export const signGetWMDoc = (payload) => +{ + const url = `${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/contract/sign/document/create`; + + return new Promise((resolve, reject) => + { + axios.post(url, payload, { + withCredentials: true, + }) + .then((response) => + { + console.log("ACTION", "sign", "signGetWMDoc()", "response", response.data); + resolve(response.data); + }) + .catch((error) => + { + console.error("ACTION", "sign", "signGetWMDoc()", "ERROR"); + console.error(error); + + const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при вызове метода GetWMDoc" } }); + window.dispatchEvent(eventMessage); + + reject(error.data); + }); + }); +} + +export const signDownloadFile = ({ payload, filename }) => +{ + const url = `${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/contract/sign/document/download`; + + return new Promise((resolve, reject) => + { + axios.get(url, { + params: payload, + responseType: 'blob', + }) + .then((response) => + { + fileDownload(response.data, filename); + resolve(); + }) + .catch((error) => + { + console.error("ACTION", "sign", "signDownloadFile()", "ERROR"); + console.error(error); + + const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при вызове метода GetWMDoc" } }); + window.dispatchEvent(eventMessage); + + reject(error.data); + }); + }); +} + +export const signGetFileContractProject = (payload) => +{ + const url = `${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/contract/sign/document/link`; + + return new Promise((resolve, reject) => + { + axios.post(url, payload, { + withCredentials: true, + }) + .then((response) => + { + if(parseInt(process.env.LOG, 10) === 1) { console.log("ACTION", "sign", "signGetFileContractProject()", "response", response.data); } + + resolve(response.data); + }) + .catch((error) => + { + console.error("ACTION", "sign", "signGetFileContractProject()", "ERROR"); + console.error(error); + + const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при вызове метода GetFileContractProject" } }); + window.dispatchEvent(eventMessage); + + reject(error.data); + }); + }); +} + +export const signCheckDownloadContractProject = (payload) => +{ + const url = `${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/contract/sign/document/check`; + + return new Promise((resolve, reject) => + { + axios.post(url, payload, { + withCredentials: true, + }) + .then((response) => + { + if(parseInt(process.env.LOG, 10) === 1) { console.log("ACTION", "sign", "signCheckDownloadContractProject()", "response", response.data); } + + resolve(response.data); + }) + .catch((error) => + { + console.error("ACTION", "sign", "signCheckDownloadContractProject()", "ERROR"); + console.error(error); + + const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при вызове метода CheckDownloadContractProject" } }); + window.dispatchEvent(eventMessage); + + reject(error.data); + }); + }); +} + +export const signUploadPaperDocument = (contract_number, deal_id, files) => +{ + console.log({ contract_number, files }); + const url = `${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/contract/sign/document/upload`; + + return new Promise((resolve, reject) => + { + let data = new FormData(); + data.append('contract_number', contract_number); + data.append('deal_id', deal_id); + + for(let i in files) + { + data.append('files', files[i]); + } + + axios.post(url, data, { + headers: { + "Content-Type": "multipart/form-data", + }, + withCredentials: true, + }) + .then((response) => + { + if(parseInt(process.env.LOG, 10) === 1) { console.log("ACTION", "sign", "signUploadPaperDocument()", "response", response.data); } + + setTimeout(() => + { + resolve(); + }, 2000); + }) + .catch((error) => + { + console.error("ACTION", "sign", "signUploadPaperDocument()", "ERROR"); + console.error(error); + + const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при отправке подписанного пакета документов" } }); + window.dispatchEvent(eventMessage); + + reject(error.data); + }); + }); +} + +export const signCheckCancelDocument = (payload) => +{ + const url = `${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/contract/sign/cancel/check`; + + console.log("ACTION", "sign", "signCheckCancelDocument()", { url }); + + return new Promise((resolve, reject) => + { + axios.post(url, payload, { + withCredentials: true, + }) + .then((response) => + { + console.log("ACTION", "sign", "signCheckCancelDocument()", "response", response.data); + + resolve(response.data); + }) + .catch((error) => + { + console.error("ACTION", "sign", "signCheckCancelDocument()", "ERROR"); + console.error(error); + + const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при вызове метода CheckCancelDocument" } }); + window.dispatchEvent(eventMessage); + + reject(error.data); + }); + }); +} + +export const signCancelDocument = (payload) => +{ + const url = `${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/contract/sign/cancel`; + + console.log("ACTION", "sign", "signCancelDocument()", { url }); + + return new Promise((resolve, reject) => + { + axios.post(url, payload, { + withCredentials: true, + }) + .then((response) => + { + console.log("ACTION", "sign", "signCancelDocument()", "response", response.data); + + resolve(response.data); + }) + .catch((error) => + { + console.error("ACTION", "sign", "signCancelDocument()", "ERROR"); + console.error(error); + + const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при вызове метода CancelDocument" } }); + window.dispatchEvent(eventMessage); + + reject(error.data); + }); + }); +} \ No newline at end of file diff --git a/components/DealsStatus/DealsList.js b/components/DealsStatus/DealsList.js index 58f9c87..3c8a2d2 100644 --- a/components/DealsStatus/DealsList.js +++ b/components/DealsStatus/DealsList.js @@ -7,25 +7,65 @@ export default class DealsList extends React.Component constructor(props) { super(props); + this.list_ref = React.createRef(); + this.items_ref = []; + } + + _scrollToDeal = (index) => + { + const element = this.list_ref.current.children[index]; + const y = (element.getBoundingClientRect().top + window.scrollY - 90); + window.scrollTo({top: y, behavior: 'smooth'}); + } + + _handle_onSelectDeal = (deal_id, index) => + { + const { onSelectDeal } = this.props; + onSelectDeal(deal_id); + setTimeout(() => + { + this._scrollToDeal(index); + }, 50); + } + + _handle_onCloseDeal = () => + { + const { onCloseDeal } = this.props; + onCloseDeal(); + + setTimeout(() => + { + const element = this.list_ref.current; + const y = (element.getBoundingClientRect().top + window.scrollY - 160); + window.scrollTo({top: y, behavior: 'smooth'}); + }, 50); } render() { - const { deals, dealSelected } = this.props; - - console.log({ deals }); + const { status, deals, questionnaire_status, dealSelected, onCloseDeal, onDealsUpdate, onDealContractsUpdate, onQuestionnaire } = this.props; return ( -
+
{ deals.list !== undefined && deals.list !== null && deals.list.map((deal, index) => { - if(index === dealSelected) + if(dealSelected === deal.opp_number) { return ( { - this._handleModalToggle("current") - }} + index={ index } + ref={ ref => this.items_ref[index] = ref } + status={ status } + dealSelected={ dealSelected } + deals={ deals } + questionnaire_status={ questionnaire_status } + onFocusDeal={ () => this._scrollToDeal(index) } + onCloseDeal={ this._handle_onCloseDeal } + onDealsUpdate={ onDealsUpdate } + onDealContractsUpdate={ onDealContractsUpdate } + onQuestionnaire={ onQuestionnaire } + { ...deal } />) } else @@ -34,7 +74,9 @@ export default class DealsList extends React.Component this.items_ref[index] = ref } { ...deal } + onSelectDeal={ this._handle_onSelectDeal } /> ) } diff --git a/components/DealsStatus/DealsListDeal.js b/components/DealsStatus/DealsListDeal.js index 2c5dfe2..6a5cf53 100644 --- a/components/DealsStatus/DealsListDeal.js +++ b/components/DealsStatus/DealsListDeal.js @@ -1,12 +1,48 @@ import React from "react"; import pluralize from 'pluralize-ru'; -const statuses = [ - { +const statuses = { + "100": { + index: undefined, + title: "Выбор КП", + icon: "/assets/images/status/icon_deal_status_100.svg", + }, + "101": { + index: 1, + title: "Выбор программы финансирования", + icon: "/assets/images/status/icon_deal_status_101.svg", + }, + "102": { + index: 2, title: "Сбор пакета документов", - icon: "/assets/images/status/1.svg", - } -]; + icon: "/assets/images/status/icon_deal_status_102.svg", + }, + "103": { + index: 3, + title: "Проверка документов", + icon: "/assets/images/status/icon_deal_status_103.svg", + }, + "104": { + index: 4, + title: "Принятие решения по сделке", + icon: "/assets/images/status/icon_deal_status_104.svg", + }, + "105": { + index: 5, + title: "Требуется изменение параметров", + icon: "/assets/images/status/icon_deal_status_105.svg", + }, + "106": { + index: 5, + title: "Принято положительное решение", + icon: "/assets/images/status/icon_deal_status_106.svg", + }, + "107": { + index: 6, + title: "Оформление лизинга", + icon: "/assets/images/status/icon_deal_status_107.svg", + }, +}; export default class DealsListDeal extends React.Component { @@ -15,21 +51,21 @@ export default class DealsListDeal extends React.Component super(props) } + //getDealOffers + render() { - const { index, comment, opp_number, statuscode_id, statuscode_name } = this.props; + const { onSelectDeal, index, comment, opp_number, statuscode_id, statuscode_name } = this.props; const step = statuscode_id - 100; - console.log("deal list item", { props: this.props }); - return (
-

Сделка { index + 1 }

+

№ { opp_number }

- { step === 0 ? "Не начата" : `${ step } ${ pluralize(step, 'этапа', 'этап', 'этапа', 'этапов') } ${ pluralize(step, 'пройдено', 'пройден', 'пройдено', 'пройдено') }` } + { statuses[ statuscode_id ].index === undefined ? "Новая сделка" : `${ statuses[ statuscode_id ].index } ${ pluralize(step, 'этапа', 'этап', 'этапа', 'этапов') } ${ pluralize(statuses[ statuscode_id ].index, 'пройдено', 'пройден', 'пройдено', 'пройдено') }` } {/*} @@ -38,12 +74,17 @@ export default class DealsListDeal extends React.Component

- -

Сбор пакета документов

+ + {/*}

{ statuscode_name }

{*/} +

{ statuses[ statuscode_id ].title }

- -
-
-

Проводится проверка анкеты Вашей организации

-
-

Устав организации

-
- -
-
-
-
-
-

№123/2023 от 01.01.2023

-
-
-
-
-

№123/2023 от 01.01.2023

-
-
-
-

Документы, отправленные Вами принадлежат другой организации бла бла коммент от менеджера

-
-
- -
-

Другое название документа

-
- -
-
-
-
-
-

Сделка 1

- -
-
- -

Проверка документов

-
-
-
-

Статусный текст о том что выбирается программа финансированияи может быть по центру иконочка часиков или слева от статусного текста иконочка часиков

-
-
-
-
-
-

Сделка 1

- -
-
- -

Принятие решения по заявке

-
-
-
-

Статусный текст о том что выбирается программа финансированияи может быть по центру иконочка часиков или слева от статусного текста иконочка часиков

-
-
-
-
-
-

Сделка 1

- -
-
- -

Оформление лизинга

-
-
-
-

Статусный текст о том что выбирается программа финансированияи может быть по центру иконочка часиков или слева от статусного текста иконочка часиков

-
-
-
-
-
-

Сделка 1

- -
-
- -

Выбор типа подписания

-
-
-
-
-
-

Подготовлено 3 из 12

-
-
-
-
-

- {} }/> - -

-
-
-
- - -
-
-
-
-
-

К подписанию 3 из 12

-
-
-
-
-

- №123/2023 от 01.01.2023 -

- -
-
-

- №123/2023 от 01.01.2023 -

- - -
-
-
-
-
-
-

Подписано 3 из 12

-
-
-
- -
-
-
-
-
-

Подготовлено 3 из 12

-
-
-
-
-

- №123/2023 от 01.01.2023 -

-
-
-
-
-
-
+ + + + + + + + + +
+ Свернуть +
) diff --git a/components/DealsStatus/components/DealContractsSignEDO.js b/components/DealsStatus/components/DealContractsSignEDO.js new file mode 100644 index 0000000..9f19dc4 --- /dev/null +++ b/components/DealsStatus/components/DealContractsSignEDO.js @@ -0,0 +1,592 @@ +import React from "react"; +import { connect } from "react-redux"; +import moment from "moment"; +import { SpinnerCircular } from "spinners-react"; +import { concatSeries } from "async"; +import { eachSeries } from 'async'; +import Select from 'react-select'; + +import { createEDOProject, signCheckCreatePrintForm, signCheckPowerAttorneyClient, signDownloadFile, signGetGUIDEntity, signGetPowerAttorneyClient, signGetWMDoc, docEDOSign, docEDOStatus, docEDOConnect, getFile, signGetFileContractProject, signCheckCancelDocument, signCancelDocument } from "../../../actions"; + +class DealContractsSignEDO extends React.Component +{ + constructor(props) + { + super(props) + this.state = { + finished: false, + operators: null, + edo_message: null, + loading: false, + disabled: false, + documents: [], + operator_selected: {}, + statuses: {}, + step: 0, + } + } + + static getDerivedStateFromProps(nextProps, prevState) + { + return { + operators: nextProps.operators, + edo_message: nextProps.edo_message, + } + } + + componentDidMount() + { + const docs = []; + for(let i in this.props.documents) + { + docs.push({ ...this.props.documents[i], ...{ index: i, loading: true, ready: false, attorney: false } }); + } + this.setState({ documents: docs }); + + if(this.state.operator_selected.box_id === undefined) + { + this.setState({ operator_selected: this.state.operators !== null && this.state.operators[0] !== undefined ? this.state.operators[0] : {} }); + } + } + + _updateDocs = (id, update) => + { + return new Promise((resolve) => + { + const docs = [ ...this.state.documents ]; + docs[ id ] = { ...docs[id], ...update }; + + this.setState({ documents: docs }, () => + { + resolve(); + }); + }); + } + + _checkDocumentsCompleted = () => + { + const { documents } = this.state; + let completed = true; + + for(let i in documents) + { + if(!documents[i].error && !documents[i].completed) + { + completed = false; + break; + } + } + + return completed; + } + + _sign = () => + { + const { operator_selected, step } = this.state; + const documents = [ ...this.state.documents ]; + + this.setState({ loading: true }, () => + { + eachSeries(documents, async (document, callback) => + { + if(document.completed) + { + callback(); + } + else if(document.signing) + { + await this._updateDocs(document.index, { loading: true, }); + const status_result = await docEDOStatus({ contract_number: document.id }); + + if(status_result.status === 3) + { + await this._updateDocs(document.index, { loading: false, signing: false, ready: false, completed: true, }); + } + else + { + await this._updateDocs(document.index, { loading: false, signing: true, ready: false, }); + } + + callback(); + } + else if(document.ready) + { + await this._updateDocs(document.index, { loading: true, }); + const status_result = await docEDOStatus({ contract_number: document.id }); + + if(status_result.status > 0) + { + const sign_result = await docEDOSign({ edoid: status_result.edoid }); + } + + await this._updateDocs(document.index, { loading: false, signing: true, ready: false, error: false, }); + callback(); + } + else + { + await this._updateDocs(document.index, { loading: true }); + + if(document.attorney && document.attorney_selected !== undefined) + { + const create_edo_project_result = await createEDOProject({ + contract_number: document.id, + power_attorney: document.attorney_selected.value, + power_attorney_number: document.attorney_selected.label, + edo_box: operator_selected.edo_box, + }); + + const get_guid_entity_result = await signGetGUIDEntity({ + contract_number: document.id, + }); + + const wmdoc_result = await signGetWMDoc({ + entity_name: "evo_contract", + entity_id: get_guid_entity_result.entityid, + sign_type: "EDO", + evo_id: "144", + code: "Leas_Contract", + }); + + const connect_result = await docEDOConnect({ contract_number: document.id }); + + await this._updateDocs(document.index, { + entity_id: get_guid_entity_result.entityid, + ready: true, + loading: false, + attorney: false, + }); + + callback(); + } + else + { + const create_print_form_result = await signCheckCreatePrintForm({ contract_number: document.id, sign_type: "EDO" }); + const docs = { status: create_print_form_result.status }; + + if(create_print_form_result.status !== "success") + { + docs.loading = false; + docs.error = true; + docs.ready = true; + docs.message = create_print_form_result.message; + } + + await this._updateDocs(document.index, docs); + + if(create_print_form_result.status === "success") + { + const check_attorney_client_result = await signCheckPowerAttorneyClient({ contract_number: document.id }) + + await this._updateDocs(document.index, { attorney: check_attorney_client_result.power_attorney_required, }); + + if(check_attorney_client_result.power_attorney_required) + { + const get_attorney_client_result = await signGetPowerAttorneyClient({ contract_number: document.id }); + + if(get_attorney_client_result === null) + { + await this._updateDocs(document.index, { loading: false, error: true, ready: true, message: "Возникла ошибка при создании документа для подписания." }); + callback(); + } + else + { + if(get_attorney_client_result.length === null) + { + await this._updateDocs(document.index, { loading: false, error: true, ready: true, message: "Не обнаружена доверенность на подписанта. Для продолжения подписания обратитесь к своему персональному менеджеру" }); + callback(); + } + else + { + const attorneys = []; + for(let i in get_attorney_client_result) + { + attorneys.push({ + value: get_attorney_client_result[i].power_attorney, + label: get_attorney_client_result[i].power_attorney_number, + }); + } + + await this._updateDocs(document.index, { loading: false, error: false, attorneys, attorney_selected: undefined }); + + callback(); + } + } + } + else + { + const create_edo_project_result = await createEDOProject({ + contract_number: document.id, + edo_box: operator_selected.edo_box, + }); + + const get_guid_entity_result = await signGetGUIDEntity({ + contract_number: document.id, + }); + + const wmdoc_result = await signGetWMDoc({ + entity_name: "evo_contract", + entity_id: get_guid_entity_result.entityid, + sign_type: "EDO", + evo_id: "144", + }); + + const connect_result = await docEDOConnect({ contract_number: document.id }); + + await this._updateDocs(document.index, { + entity_id: get_guid_entity_result.entityid, + ready: true, + loading: false, + attorney: false, + }); + + callback(); + } + } + else + { + await this._updateDocs(document.index, { + loading: false, + error: true, + ready: true, + message: create_print_form_result.message !== undefined && create_print_form_result.message !== null ? create_print_form_result.message : "Возникла ошибка при создании документа для подписания.", + }); + callback(); + } + } + } + }, () => + { + if(this._checkDocumentsCompleted()) + { + this.setState({ loading: false, disabled: false, finished: true, }); + } + else + { + this.setState({ loading: false, disabled: false, finished: false, }); + } + }); + }); + } + + _handle_onFormSubmit = (event) => + { + event.preventDefault(); + + const { onFinish, onGoToEDOInvites } = this.props; + const { operators, operator_selected, step, finished } = this.state; + + if(operators !== null && operators.length === 0) + { + onGoToEDOInvites(); + } + else + { + if(finished) + { + onFinish(); + } + else + { + switch(step) + { + case 0: + { + this.setState({ step: 1 }, () => + { + this._sign(); + }); + } + break; + + case 1: + { + this._sign(); + } + break; + } + } + } + } + + _handle_onSelectOperator = (operator) => + { + this.setState({ operator_selected: operator }); + } + + _handle_onAttorneyChange = (index, attorney) => + { + this._updateDocs(index, { attorney_selected: attorney }); + } + + _handle_onDownloadFile = (index) => + { + const { documents } = this.state; + + this.setState({ loading: true, disabled: true, }, async () => + { + await this._updateDocs(index, { loading: true }); + + const link_result = await signGetFileContractProject({ + contract_number: documents[index].id, + }); + + await getFile({ id: link_result.url, filename: `ЛК ЭВОЛЮЦИЯ ${ documents[index].id }.${ link_result.extension }` }); + + await this._updateDocs(index, { loading: false, disabled: false, }); + this.setState({ loading: false, disabled: false, }); + }); + } + + _handle_onCancelFile = async (index) => + { + const { onCancel } = this.props; + const { documents } = this.state; + await this._updateDocs(index, { loading: true }); + + this.setState({ loading: true, disabled: true }, async () => + { + const check_result = await signCheckCancelDocument({ contract_number: documents[index].id, doc_type_id: "144" }); + if(check_result.status === "success") + { + await signCancelDocument({ contract_number: documents[index].id, doc_type_id: "144" }); + const docs = [ ...this.state.documents ]; + docs.splice(index, 1); + + if(docs.length > 0) + { + this.setState({ documents: docs, loading: false, disabled: false, }); + } + else + { + onCancel(true); + } + } + else + { + await this._updateDocs(index, { + loading: false, + error: true, + message: check_result.message !== undefined && check_result.message !== null ? check_result.message : "Возникла ошибка при отмене подписания через ЭДО", + }); + } + }); + } + + _handle_onCancel = () => + { + const { onCancel } = this.props; + const { documents } = this.state; + + var clean = false; + if(documents.length === 0) + { + clean = true; + } + + onCancel(clean); + } + + _handle_onCheckEDOStatus = async (index) => + { + const { documents } = this.state; + + await this._updateDocs(index, { loading: true }); + + this.setState({ loading: true, disabled: true }, async () => + { + const status_result = await docEDOStatus({ contract_number: documents[index].id }); + + if(status_result.status >= 2) + { + await this._updateDocs(index, { loading: false, disabled: false, signing: false, completed: true, url: status_result.url_edo, }); + } + else + { + await this._updateDocs(index, { loading: false, disabled: false, signing: true, completed: false, url: status_result.url_edo, }); + } + + if(this._checkDocumentsCompleted()) + { + this.setState({ loading: false, disabled: false, finished: true, }); + } + else + { + this.setState({ loading: false, disabled: false, finished: false, }); + } + }); + } + + _handle_onGoToEDO = (index) => + { + const { documents } = this.state; + + if(documents[index].url !== undefined && documents[index].url !== null) + { + window.open(documents[index].url, "_blank"); + } + } + + render() + { + const { step, operators, edo_message, documents, loading, disabled, finished, operator_selected } = this.state; + const { onCancel, } = this.props; + + return ( +
+
+

Подписание через ЭДО

+
+ { step === 0 && ( +
+ +
+ { operators !== undefined && operators !== null && ( + <> + { operators.length === 0 ? ( +
+
+
+ { edo_message } +
+
+ ) : ( + operators.map((operator, index) => ( +
+ this._handle_onSelectOperator(operator) } + disabled={ false } + /> + +
+ ) ) + )} + + ) } +
+
+ ) } + { step === 1 && ( +
+ { documents.map((document, index) => + { + return ( +
+
+

+ { document.name } от { moment(document.date).format("DD.MM.YYYY") } + { document.type !== undefined && ({ document.type }) } +

+
+
+ { document.loading ? ( + <> + { loading && ( + + ) } + + ) : ( + <> + { document.error ? ( + <> +
+ { document.message !== undefined && document.message !== null ? document.message : "" } + + ) : ( + <> + { document.attorney && ( + <> +
+
+ +
+ ) } + + + + ) } + + ) } + { document.completed && ( + <> +
+
+ Договор отправлен вашему менеджеру "ЛК Эволюция" +
+ + ) } + + ) } + + ) } +
+
+ ) + } ) } +
+
{if (e.key === 'Enter') e.preventDefault() }}> +
+ + +
+
+
+ ) + } +} \ No newline at end of file diff --git a/components/DealsStatus/components/DocumentsForm.js b/components/DealsStatus/components/DocumentsForm.js new file mode 100644 index 0000000..5bbd812 --- /dev/null +++ b/components/DealsStatus/components/DocumentsForm.js @@ -0,0 +1,404 @@ +import React from "react"; +import { eachSeries } from "async"; +import { SpinnerCircular } from "spinners-react"; + +import FileDropzoneDeals from "../../FileDropzoneDeals"; + +import { attachDealDocument, createQuestionnaire, removeDealDocument, sendDealDocuments, } from "../../../actions"; + +import Step from "./Step"; +import md5 from "md5"; + +class QuestionnaireForm extends React.Component +{ + constructor(props) + { + super(props); + this.state = { + loading: false + } + } + + _handle_onQuestionnaire = (event) => + { + event.preventDefault(); + const { onQuestionnaire } = this.props; + + onQuestionnaire(); + } + + _handle_onCreateQuestionnaire = (event) => + { + event.preventDefault(); + const { onQuestionnaire, deal_id } = this.props; + + this.setState({ loading: true, }, () => + { + createQuestionnaire(deal_id) + .then(() => + { + onQuestionnaire(); + }); + }); + } + + render() + { + const { loading } = this.state; + const { questionnaire_status } = this.props; + + switch(questionnaire_status) + { + case "need_to_fill": + { + return ( +
+

Требуется обновить данные в анкете

+ +
+ ) + } + + case "need_to_create": + { + return ( +
+

Требуется предоставить данные в анкете клиента

+ +
+ ) + } + + case "up_to_date": + { +
+

Вам не требуется актуализация данных анкеты Клиента

+
+ } + + default: + { + return ( +
+

Проводится проверка анкеты Вашей организации

+
+ ) + } + } + } +} + +export default class DocumentsForm extends Step +{ + constructor(props) + { + super(props); + this.state = { + open: false, + uploaded: {}, + uploading: false, + completed: false, + loading: true, + questionnaire_loading: false, + }; + this.status = 102; + } + + componentDidMount() + { + if(this.status === this.props.statuscode_id) + { + this.setState({ open: true, }); + } + } + + componentDidUpdate(prevProps, prevState) + { + if(this.props.statuscode_id !== prevProps.statuscode_id) + { + if(this.status === this.props.statuscode_id) + { + this.setState({ open: true }); + } + else + { + this.setState({ open: false }); + } + } + + if(prevProps.uploaded !== this.props.uploaded) + { + this.setState({ uploaded: this.props.uploaded, loading: false }, () => + { + const completed = this._checkFilesCompleted(); + this.setState({ completed }); + }); + } + } + + _handle_onSendFiles = (event) => + { + event.stopPropagation(); + const { dealSelected, onDealsUpdate } = this.props; + + this.props.onFocusDeal(); + setTimeout(() => + { + this.setState({ loading: true }, () => + { + sendDealDocuments({ deal_id: dealSelected }) + .then(() => + { + onDealsUpdate(); + }) + .catch(() => + { + + }); + }); + }, 100); + } + + _onSendFileStats = (group, index) => + { + return new Promise((resolve) => + { + const uploaded = { ...this.state.uploaded }; + uploaded[group].files[index].uploaded = true; + + this.setState({ uploaded }, () => + { + resolve(); + }); + }) + } + + _handle_onAddFile = ({ document_id, document_name, files, update }) => + { + const existed_files = { ...this.state.uploaded }; + + const group = md5(`${ document_id }_${ document_name }`); + const document_files = existed_files[ group ] === undefined ? [] : existed_files[ group ].files; + + if(existed_files[ group ] === undefined) + { + existed_files[ group ] = { + files: [], + }; + } + + let index = parseInt(existed_files[ group ].files.length, 10); + + for(let nf in files) + { + files[nf].document_id = document_id; + files[nf].group = group; + files[nf].group_name = document_name; + files[nf].uploaded = false; + files[nf].update = update; + + document_files.push(files[nf]); + + existed_files[ group ].files = document_files; + } + + this.setState({ uploaded: existed_files, uploading: true }, () => + { + const { opp_number } = this.props; + + eachSeries(files, (file, callback) => + { + const payload = { + deal_id: opp_number, + document_id: file.document_id, + group: file.group, + document_name: file.group_name, + filename: file.name, + lastModified: file.lastModified, + type: file.type, + file, + update, + index, + }; + + attachDealDocument(payload) + .then(async () => + { + await this._onSendFileStats(group, index); + index++; + callback(); + }, 1000) + }, () => + { + const completed = this._checkFilesCompleted(); + this.setState({ uploading: false, completed }); + }); + }); + } + + _handle_onDeleteFile = (group, index) => + { + const uploaded = { ...this.state.uploaded }; + const { opp_number } = this.props; + + const list = [ ...uploaded[group].files ]; + list.splice(index, 1); + + uploaded[group].files = list; + + this.setState({ uploaded }, () => + { + const completed = this._checkFilesCompleted(); + this.setState({ completed }, () => + { + removeDealDocument({ deal_id: opp_number, group, index }); + }); + }); + } + + _checkFilesCompleted = () => + { + const { uploaded } = this.state; + const { documents, questionnaire_status, } = this.props; + + let c = true; + if(questionnaire_status !== "need_to_fill" && questionnaire_status !== "need_to_create") + { + if(documents !== undefined) + { + for(let g in documents) + { + if(!documents[g].add) + { + continue; + } + + const group = md5(`${ documents[g].doc_id }_${ documents[g].name }`); + + if(uploaded[group] === undefined || uploaded[group].files.length === 0) + { + c = false; + break; + } + else + { + for(let f in uploaded[group].files) + { + if(!uploaded[group].files[f].uploaded) + { + c = false; + break; + } + } + } + } + } + } + else + { + c = false; + } + + return c; + } + + render() + { + const { index, statuscode_id, dealSelected, documents, questionnaire_status, onQuestionnaire, } = this.props; + const { open, uploaded, uploading, loading, completed } = this.state; + + return ( +
this.status ? "done" : "" }`}> +

№ { dealSelected }

+ +
+ { this._renderHeader("Сборка пакета документов") } +
+ { loading ? ( +
+ +
+ ) : ( + <> +
+
+

Анкета клиента:

+
+
+ +
+
+ { documents === undefined ? ( + <> + ) : ( + <> + { documents.map((document, index) => { + const group = md5(`${ document.doc_id }_${ document.name }`); + return ( +
+
+

{ document.name }:

+
+
+ { document.add ? ( + { this._handle_onAddFile({ document_id: document.doc_id, document_name: document.name, files, update }) } } + onDeleteFile={ this._handle_onDeleteFile } + document={ document } + /> + ) : ( + <> + { document.check === "Документ принят" ? ( +
+

{ document.check }

+
+ ) : ( +
+

{ document.check }

+
+ ) } + + ) } +
+
+ ) + } ) } + + ) } + {/*} +
+
+
+

Документы, отправленные Вами принадлежат другой организации бла бла коммент от менеджера

+
+ {*/} + + ) } +
+ { open && !loading && ( +
+ { this.status === statuscode_id && ( +
+ +
+ ) } +
+ ) } +
+
+ ) + } +} \ No newline at end of file diff --git a/components/DealsStatus/components/FinancialProgram.js b/components/DealsStatus/components/FinancialProgram.js new file mode 100644 index 0000000..5f6a6d4 --- /dev/null +++ b/components/DealsStatus/components/FinancialProgram.js @@ -0,0 +1,44 @@ +import React from "react"; + +import Step from "./Step"; + +export default class FinancialProgram extends Step +{ + constructor(props) + { + super(props); + this.state = { + open: false, + }; + this.status = 101; + } + + render() + { + const { index, statuscode_id, dealSelected } = this.props; + const { open } = this.state; + + return ( +
this.status ? "done" : "" }`}> +

№ { dealSelected }

+ +
+ { this._renderHeader("Программа финансирования") } +
+
+ { statuscode_id === this.status ? ( +

Идёт подбор оптимальной программы финансирования

+ ) : ( +

Программа финансирования выбрана

+ ) } +
+
+ { open && ( +
+
+ ) } +
+
+ ) + } +} \ No newline at end of file diff --git a/components/DealsStatus/components/LeasingRegistration.js b/components/DealsStatus/components/LeasingRegistration.js new file mode 100644 index 0000000..989b5ac --- /dev/null +++ b/components/DealsStatus/components/LeasingRegistration.js @@ -0,0 +1,427 @@ +import React from "react"; +import moment from "moment"; +import { SpinnerCircular } from "spinners-react"; +import Link from "next/link"; + +//import EDOSign from "../../../components/EDOSign"; + +import Step from "./Step"; +import DealContractsSignEDO from "./DealContractsSignEDO"; +import DealContractsSignPaper from "./DealContractsSignPaper"; +import SignPlannedContract from "./SignPlannedContract"; +import SignedContract from "./SignedContract"; + +export default class LeasingRegistration extends Step +{ + constructor(props) + { + super(props); + this.state = { + open: false, + /* + checked: { + prepared_contracts: [], + signing_plan_contracts: [], + signing_fact_contracts: [], + issued_contracts: [], + annulled_contracts: [], + }, + */ + checked: [], + edo: false, + paper: false, + }; + this.status = 107; + this.types = [ + { + title: "Подготовлено", + key: "prepared_contracts", + }, + { + title: "К подписанию", + key: "signing_plan_contracts", + }, + { + title: "Подписано", + key: "signing_fact_contracts", + }, + { + title: "Выдано", + key: "issued_contracts", + }, + { + title: "Аннулировано", + key: "annulled_contracts", + }, + ]; + this.container_ref = React.createRef(); + } + + _handle_onScrollToContainer = () => + { + const element = this.container_ref.current; + const y = (element.getBoundingClientRect().top + window.scrollY - 160); + window.scrollTo({top: y, behavior: 'smooth'}); + } + + _handle_onPreparedContract = (contract) => + { + const checked = [ ...this.state.checked ]; + + if(checked.indexOf(contract) > -1) + { + checked.splice(checked.indexOf(contract), 1); + } + else + { + checked.push(contract); + } + + this.setState({ checked }); + } + + _handle_onSignEDO = () => + { + this.setState({ edo: true, paper: false }, () => + { + this._handle_onScrollToContainer(); + }); + } + + _handle_onSignPaper = (contract) => + { + this.setState({ edo: false, paper: true }, () => + { + this._handle_onScrollToContainer(); + }); + } + + _onEDOCancel = (clean = false) => + { + if(clean) + { + this.setState({ edo: false, checked: [] }); + } + else + { + this.setState({ edo: false }); + } + } + + _handle_onCancelEDO = () => + { + const { onDealContractsUpdate } = this.props; + + this.setState({ edo: false, checked: [] }, () => + { + onDealContractsUpdate(); + }); + } + + _handle_onFinishEDO = () => + { + const { onDealContractsUpdate } = this.props; + + this.setState({ edo: false, checked: [] }, () => + { + onDealContractsUpdate(); + }); + } + + _handle_onCancelPaper = () => + { + const { onDealContractsUpdate } = this.props; + + this.setState({ paper: false, checked: [] }, () => + { + onDealContractsUpdate(); + }); + } + + _handle_onFinishPaper = () => + { + const { onDealContractsUpdate } = this.props; + + this.setState({ paper: false, checked: [] }, () => + { + onDealContractsUpdate(); + }); + } + + _handle_onGoToEDOInvites = () => + { + console.log("_handle_onGoToEDOInvites", { props: this.props }); + + this.props.router.push("/settings/digital"); + } + + _getDocuments = () => + { + const contracts = this.props.contracts['prepared_contracts']; + const { checked } = this.state; + const documents = []; + + for(let i in contracts) + { + if(checked.indexOf(contracts[i].name) > -1) + { + documents.push({ + id: contracts[i].name, + name: `Договор № ${ contracts[i].name }`, + date: contracts[i].date, + type: `${ contracts[i].brand_name } ${ contracts[i].model_name }`, + extension: 'pdf', + }) + } + } + + return documents; + } + + _render_preparedContracts = () => + { + const { dealSelected } = this.props; + const { edo, paper, checked } = this.state; + //const checked = this.state.checked.prepared_contracts; + + const contracts = this.props.contracts['prepared_contracts']; + console.log("_render_preparedContracts", { contracts }); + + if(edo) + { + return ( + + ) + } + + if(paper) + { + return ( + + ) + } + + return ( +
+
+ { contracts.length > 0 ? + contracts.map((contract, index) => ( +
+
+ -1 ? true : false } onChange={ () => { this._handle_onPreparedContract(contract.name) } }/> + +
+ { moment(contract.date).format('MM.DD.YYYY') } + { contract.brand_name } + { contract.model_name } +
+
+
+ )) : ( +

Нет договоров

+ ) } +
+ { contracts.length > 0 && + ( +
+ + +
+ ) } +
+ ) + } + + _render_signingPlanContracts = () => + { + const contracts = this.props.contracts['signing_plan_contracts']; + const { onDealContractsUpdate, dealSelected } = this.props; + console.log("_render_signingPlanContracts", { contracts }); + + return ( +
+ { contracts.length > 0 ? + contracts.map((contract, index) => ( + + ) + ) : ( +

Нет договоров

+ ) } +
+ ) + } + + _render_signingFactContracts = () => + { + const contracts = this.props.contracts['signing_fact_contracts']; + console.log("_render_signingFactContracts", { contracts }); + + return ( +
+ { contracts.length > 0 ? + contracts.map((contract, index) => ( + + ) + ) : ( +

Нет договоров

+ ) } +
+ ) + } + + _render_issuedContracts = () => + { + const contracts = this.props.contracts['issued_contracts']; + console.log("_render_issuedContracts", { contracts }); + + return ( +
+ { contracts.length > 0 ? + contracts.map((contract, index) => ( +
+
+
+

{ contract.name }

+
+ { moment(contract.date).format("DD.MM.YYYY") } + { contract.brand_name } + { contract.model_name } +
+
+
+ )) : ( +

Нет договоров

+ ) } +
+ ) + } + + _render_annuledContracts = () => + { + const contracts = this.props.contracts['annulled_contracts']; + console.log("_render_annuledContracts", { contracts }); + + return ( +
+ { contracts.length > 0 ? + contracts.map((contract, index) => ( +
+
+
+

{ contract.name }

+
+ { moment(contract.date).format("DD.MM.YYYY") } + { contract.brand_name } + { contract.model_name } +
+
+
+ )) : ( +

Нет договоров

+ ) } +
+ ) + } + + _render_contracts = (type) => + { + const { contracts } = this.props; + + if(contracts !== undefined) + { + switch (type) + { + case "prepared_contracts": + { + return this._render_preparedContracts(); + } + + case "signing_plan_contracts": + { + return this._render_signingPlanContracts(); + } + + case "signing_fact_contracts": + { + return this._render_signingFactContracts(); + } + + case "issued_contracts": + { + return this._render_issuedContracts(); + } + + case "annulled_contracts": + { + return this._render_annuledContracts(); + } + } + } + else + { + return null; + } + } + + render() + { + const { index, statuscode_id, dealSelected } = this.props; + const { open, edo } = this.state; + + return ( +
this.status ? "done" : "" }`} ref={ this.container_ref }> +

№ { dealSelected }

+ +
+ { this._renderHeader("Оформление лизинга") } +
+ { this.props.contracts === undefined ? ( +
+ +
+ ) : ( + <> + { this.types.map((type, index) => ( +
+ { edo ? ( + <> + { type.key !== "prepared_contracts" && ( +

{ type.title }

+ ) } + + ) : ( +

{ type.title }

+ ) } +
+ { this._render_contracts(type.key) } +
+
+ )) } + + ) } +
+
+
+ ) + } +} \ No newline at end of file diff --git a/components/DealsStatus/components/Offers.js b/components/DealsStatus/components/Offers.js new file mode 100644 index 0000000..9c234bd --- /dev/null +++ b/components/DealsStatus/components/Offers.js @@ -0,0 +1,234 @@ +import React from "react"; +import numeral from "numeral"; +import { SpinnerCircular } from "spinners-react"; + +import { acceptDealOffers, downloadDealOffer, } from "../../../actions"; +import Step from "./Step"; + +class OfferDownload extends React.Component +{ + constructor(props) + { + super(props); + this.state = { + loading: false, + } + } + + _handle_onOffer = (quote_number) => + { + this.setState({ loading: true }, () => + { + downloadDealOffer({ quote_number, filename: `ЛК Эволюция КП №${ quote_number }.pdf` }) + .then(() => { + this.setState({ loading: false }); + }) + .catch(() => { + this.setState({ loading: false }); + }); + }) + } + + render() + { + const { offer } = this.props; + const { loading } = this.state; + + return ( +
this._handle_onOffer(offer.quote_number) }> +
+
+ { loading ? ( +
+ +
+ ) : ( +

+ КП + №{ offer.quote_number } +

+ ) } +
+
+
+ ) + } +} + +export default class Offers extends Step +{ + constructor(props) + { + super(props); + this.state = { + open: false, + loading: false, + checked: [], + }; + this.status = 100; + } + + _handle_onCheckOffer = (quote_number) => + { + const checked = [ ...this.state.checked ]; + let is_new = true; + + if(checked.indexOf(quote_number) > -1) + { + checked.splice(checked.indexOf(quote_number), 1); + is_new = false; + } + + if(is_new) + { + checked.push(quote_number); + } + + this.setState({ checked }); + } + + _handle_onSend = (event) => + { + event.preventDefault(); + event.stopPropagation(); + + this.setState({ loading: true }, () => + { + const { checked } = this.state; + const { dealSelected, onDealsUpdate } = this.props; + const offers = []; + + for(let i in checked) + { + offers.push({ + quote_number: checked[i], + agreed: true, + }); + } + + acceptDealOffers({ deal_id: dealSelected, offers }) + .then(() => + { + onDealsUpdate() + .then(() => + { + this.setState({ loading: false }); + }) + .catch(() => + { + this.setState({ loading: false }); + }); + }) + }); + } + + /* + _renderHeaderButtons = () => + { + const { open, checked, loading } = this.state; + const { statuscode_id } = this.props; + + if(statuscode_id === this.status) + { + if(!loading && open && checked.length > 0) + { + return ( +
+ +
+ ) + } + } + + return null; + } + */ + + render() + { + const { index, statuscode_id, dealSelected, offers } = this.props; + const { checked, open, loading } = this.state; + + return ( +
this.status ? "done" : "" }`}> +

№ { dealSelected }

+ +
+ { this._renderHeader("Выбор КП ") } +
+ { offers === undefined || loading ? ( +
+ +
+ ) : ( + <> + { offers.length > 0 ? ( + + + + + + + + + + + + + + + + { offers.map((offer, offer_index) => + { + return ( + + { statuscode_id === this.status && offer.quote_status ? ( + + ) : ( + + ) } + + + + + + + + + + ) + } ) } + +
СтоимостьПервый платеж, ₽Первый платеж, %МаркаМодельОбъектов лизинга
+
+ -1 } onChange={ () => { this._handle_onCheckOffer(offer.quote_number) } }/> + +
+
+
+ { } } style={{ filter: "grayscale", opacity: 0.5 }}/> + +
+
{ offer_index + 1 }{ numeral(offer.price).format(' ., ') } ₽{ numeral(offer.first_payment_rub).format(' ., ') } ₽{ offer.first_payment_perc }%{ offer.brand_name }{ offer.model_name }{ offer.object_count } + +
+ ) : ( +

Нет предложений

+ ) } + + ) } +
+ { open && !loading && ( +
+ { checked.length > 0 && statuscode_id === this.status && ( +
+ +
+ ) } +
+ ) } +
+
+ ) + } +} \ No newline at end of file diff --git a/components/DealsStatus/components/SignPlannedContract.js b/components/DealsStatus/components/SignPlannedContract.js new file mode 100644 index 0000000..bc8ec8e --- /dev/null +++ b/components/DealsStatus/components/SignPlannedContract.js @@ -0,0 +1,288 @@ +import React from "react"; +import moment from "moment"; +import { SpinnerCircular } from "spinners-react"; +import Dropzone from 'react-dropzone'; + +import { docEDOSign, docEDOStatus, getFile, signCancelDocument, signCheckCancelDocument, signCheckDownloadContractProject, signGetFileContractProject, signUploadPaperDocument } from "../../../actions"; + +export default class SignPlannedContract extends React.Component +{ + constructor(props) + { + super(props); + this.state = { + loading: true, + uploading: false, + finished: false, + loading_download_file: false, + loading_cancel_sign: false, + loading_signing: false, + loading_uploading_file: false, + disabled: false, + status: undefined, + contract_entity_id: undefined, + url: undefined, + error: false, + message: undefined, + }; + } + + async componentDidMount() + { + const { contract } = this.props; + + if(contract.sign_type === "EDO") + { + const status_result = await docEDOStatus({ contract_number: contract.name }); + this.setState({ contract_entity_id: status_result.edoid, status: status_result.status, loading: false, url: status_result.url_edo }); + } + else + { + this.setState({ loading: false }); + } + } + + _handle_onUploadFile = async (files, index) => + { + const { contract, deal_id } = this.props; + + this.setState({ loading: true, disabled: true, uploading: true, loading_uploading_file: true, finished: false, }, async () => + { + await signUploadPaperDocument(contract.name, deal_id, files); + this.setState({ loading: false, disabled: false, uploading: false, loading_uploading_file: false, finished: true, }); + }); + } + + _handle_downloadFile = () => + { + const { contract } = this.props; + + this.setState({ disabled: true, loading_download_file: true, error: false, }, async () => + { + const check_result = await signCheckDownloadContractProject({ contract_number: contract.name }); + if(check_result.status === "success") + { + const link_result = await signGetFileContractProject({ + contract_number: contract.name + }); + + await getFile({ id: link_result.url, filename: `ЛК ЭВОЛЮЦИЯ ${ contract.name }.${ link_result.extension }` }); + this.setState({ disabled: false, loading_download_file: false, error: false, uploading: contract.sign_type === "EDO" ? false : true, }); + } + else + { + this.setState({ disabled: false, loading_download_file: false, error: true, uploading: false, message: check_result.message !== undefined && check_result.message !== null ? check_result.message : "Возникла ошибка обработки документа" }) + } + }); + } + + _handle_cancelSign = () => + { + const { contract, onDealContractsUpdate } = this.props; + + this.setState({ disabled: true, loading_cancel_sign: true }, async () => + { + const check_result = await signCheckCancelDocument({ contract_number: contract.name, doc_type_id: contract.sign_type === "EDO" ? "144" : "60" }); + if(check_result.status === "success") + { + const cancel_result = await signCancelDocument({ contract_number: contract.name, doc_type_id: contract.sign_type === "EDO" ? "144" : "60" }); + setTimeout(() => { + onDealContractsUpdate(); + }, 1000); + } + else + { + this.setState({ + loading: false, + loading_cancel_sign: false, + error: true, + message: check_result.message !== undefined && check_result.message !== null ? check_result.message : `Возникла ошибка при отмене подписания${ contract.sign_type === "EDO" ? " через ЭДО" : "" }`, + }); + } + }); + } + + _handle_sendToEDO = () => + { + const { contract, onDealContractsUpdate } = this.props; + + this.setState({ disabled: true, loading_signing: true }, async () => + { + const check_result = await signCheckDownloadContractProject({ contract_number: contract.name }); + if(check_result.status === "success") + { + const status_result = await docEDOStatus({ contract_number: contract.name }); + + if(status_result.status > 0) + { + const sign_result = await docEDOSign({ edoid: status_result.edoid }); + + const new_status_result = await docEDOStatus({ contract_number: contract.name }); + this.setState({ status: new_status_result.status, loading: false, disabled: false, loading_signing: false }); + } + else + { + this.setState({ + loading: false, + loading_signing: false, + error: true, + message: status_result.message !== undefined && status_result.message !== null ? status_result.message : `Возникла ошибка при отправке в ЭДО`, + }); + } + } + else + { + this.setState({ + loading: false, + loading_signing: false, + error: true, + message: check_result.message !== undefined && check_result.message !== null ? check_result.message : `Возникла ошибка при отправке в ЭДО`, + }); + } + }); + } + + _handle_onGoToEDO = () => + { + const { url } = this.state; + + if(url !== undefined && url !== null) + { + window.open(url, "_blank"); + } + } + + render() + { + const { index, contract, } = this.props; + const { loading, status, uploading, disabled, finished, error, message, loading_download_file, loading_uploading_file, loading_cancel_sign, loading_signing } = this.state; + + return ( +
+
+ PDF +
+
+

{ contract.name }

+
+ { moment(contract.date).format("DD.MM.YYYY") } + { contract.brand_name } + { contract.model_name } +
+
+ { loading ? ( +
+ +
+ ) : ( + <> + { error ? ( +
+
+
+ { message } +
+
+ ) : ( + <> + { contract.sign_type === "PAPER" && ( + <> + { finished ? ( +
+
+
+ Договор отправлен вашему менеджеру "ЛК Эволюция" +
+
+ ) : ( +
+ { uploading ? ( + this._handle_onUploadFile(acceptedFiles, index) } maxFiles={ 10 }> + { ({getRootProps, getInputProps}) => ( +
+ + +
+ ) } +
+ ) : ( + <> + + + + ) } +
+ ) } + + ) } + { contract.sign_type === "EDO" && ( + <> + { status === 3 ? ( +
+
+
+ Подписанный договор будет доступен для скачивания в течение 1-2 минут. +
+
+ ) : ( +
+ { status === 1 && ( + + ) } + { status === 1 && ( + + )} + { status === 1 && ( + + ) } + { status === 2 && ( + + ) } +
+ ) } + + ) } + + ) } + + ) } +
+ ) + } +} \ No newline at end of file diff --git a/components/DealsStatus/components/SignedContract.js b/components/DealsStatus/components/SignedContract.js new file mode 100644 index 0000000..177bb0b --- /dev/null +++ b/components/DealsStatus/components/SignedContract.js @@ -0,0 +1,82 @@ +import React from "react"; +import moment from "moment"; +import { SpinnerCircular } from "spinners-react"; +import Link from "next/link"; + +import { signCheckDownloadContractProject, signGetFileContractProject, getFile, } from "../../../actions"; + +export default class SignedContract extends React.Component +{ + constructor(props) + { + super(props); + this.state = { + loading: false, + url: undefined, + error: false, + message: undefined, + }; + } + + async componentDidMount() + { + } + + _handle_downloadFile = () => + { + const { contract } = this.props; + + this.setState({ loading: true, error: false, }, async () => + { + const check_result = await signCheckDownloadContractProject({ contract_number: contract.name }); + if(check_result.status === "success") + { + const link_result = await signGetFileContractProject({ + contract_number: contract.name + }); + + await getFile({ id: link_result.url, filename: `ЛК ЭВОЛЮЦИЯ ${ contract.name }.${ link_result.extension }` }); + this.setState({ loading: false, error: false, }); + } + else + { + this.setState({ loading: false, error: true, message: check_result.message !== undefined && check_result.message !== null ? check_result.message : "Возникла ошибка обработки документа" }) + } + }); + } + + render() + { + const { index, contract, } = this.props; + const { loading, error, message, } = this.state; + + return ( +
+
+ PDF +
+
+

{ contract.name }

+
+ { moment(contract.date).format("DD.MM.YYYY") } + { contract.brand_name } + { contract.model_name } +
+
+
+
+
+ { contract.statuscode_name } +
+ { loading ? ( +
+ +
+ ) : ( + + ) } +
+
+ ) + } +} \ No newline at end of file diff --git a/components/DealsStatus/components/StatusDecisionMaking.js b/components/DealsStatus/components/StatusDecisionMaking.js new file mode 100644 index 0000000..e762a05 --- /dev/null +++ b/components/DealsStatus/components/StatusDecisionMaking.js @@ -0,0 +1,49 @@ +import React from "react"; + +import Step from "./Step"; + +export default class StatusDecisionMaking extends Step +{ + constructor(props) + { + super(props); + this.state = { + open: false, + }; + this.status = 104; + } + + render() + { + const { index, statuscode_id, dealSelected } = this.props; + const { open } = this.state; + + if(statuscode_id === 105) + { + return null; + } + + return ( +
this.status) ? "done" : "" }`}> +

№ { dealSelected }

+ +
+ { this._renderHeader("Принятие решения по сделке") } +
+
+ { this.status === statuscode_id ? ( +

Принятие решение о финансировании

+ ) : ( +

Поздравляем! Принято положительное решение по сделке.

+ ) } +
+
+ { open && ( +
+
+ ) } +
+
+ ) + } +} \ No newline at end of file diff --git a/components/DealsStatus/components/StatusDecisionRefuse.js b/components/DealsStatus/components/StatusDecisionRefuse.js new file mode 100644 index 0000000..de6ade9 --- /dev/null +++ b/components/DealsStatus/components/StatusDecisionRefuse.js @@ -0,0 +1,45 @@ +import React from "react"; + +import Step from "./Step"; + +export default class StatusDecisionRefuse extends Step +{ + constructor(props) + { + super(props); + this.state = { + open: false, + }; + this.status = 105; + } + + render() + { + const { index, statuscode_id, dealSelected } = this.props; + const { open } = this.state; + + if(statuscode_id !== this.status) + { + return null; + } + + return ( +
this.status) ? "done" : "" }`}> +

№ { dealSelected }

+ +
+ { this._renderHeader("Требуется изменение параметров") } +
+
+

Продолжение оформления заблокировано

+
+
+ { open && ( +
+
+ ) } +
+
+ ) + } +} \ No newline at end of file diff --git a/components/DealsStatus/components/StatusDocumentsCheck.js b/components/DealsStatus/components/StatusDocumentsCheck.js new file mode 100644 index 0000000..6fbce7b --- /dev/null +++ b/components/DealsStatus/components/StatusDocumentsCheck.js @@ -0,0 +1,44 @@ +import React from "react"; + +import Step from "./Step"; + +export default class StatusDocumentsCheck extends Step +{ + constructor(props) + { + super(props); + this.state = { + open: false, + }; + this.status = 103; + } + + render() + { + const { index, statuscode_id, dealSelected } = this.props; + const { open } = this.state; + + return ( +
this.status ? "done" : "" }`}> +

№ { dealSelected }

+ +
+ { this._renderHeader("Проверка документов") } +
+
+ { statuscode_id === this.status ? ( +

Идёт проверка предоставленных документов

+ ) : ( +

Документы проверены

+ ) } +
+
+ { open && ( +
+
+ ) } +
+
+ ) + } +} \ No newline at end of file diff --git a/components/DealsStatus/components/StatusPositiveDecision.js b/components/DealsStatus/components/StatusPositiveDecision.js new file mode 100644 index 0000000..79d938d --- /dev/null +++ b/components/DealsStatus/components/StatusPositiveDecision.js @@ -0,0 +1,44 @@ +import React from "react"; + +import Step from "./Step"; + +export default class StatusPositiveDecision extends Step +{ + constructor(props) + { + super(props); + this.state = { + open: false, + }; + this.status = 106; + } + + render() + { + const { index, statuscode_id, dealSelected } = this.props; + const { open } = this.state; + + return ( +
this.status ? "done" : "" }`}> +

№ { dealSelected }

+ +
+ { this._renderHeader("Принято положительное решение") } +
+
+ { statuscode_id === this.status ? ( +

Идёт подготовка необходимых документов для заключения сделки

+ ) : ( +

Документы подготовлены

+ ) } +
+
+ { open && ( +
+
+ ) } +
+
+ ) + } +} \ No newline at end of file diff --git a/components/DealsStatus/components/Step.js b/components/DealsStatus/components/Step.js new file mode 100644 index 0000000..74489c0 --- /dev/null +++ b/components/DealsStatus/components/Step.js @@ -0,0 +1,53 @@ +import React from "react"; + +export default class Step extends React.Component +{ + componentDidMount() + { + if(this.status === this.props.statuscode_id) + { + this.setState({ open: true }); + } + } + + componentDidUpdate(prevProps, prevState) + { + if(this.props.statuscode_id !== prevProps.statuscode_id) + { + if(this.status === this.props.statuscode_id) + { + this.setState({ open: true }); + } + else + { + this.setState({ open: false }); + } + } + } + + _handle_onSwitch = () => + { + const { statuscode_id } = this.props; + this.setState({ open: !this.state.open ? true : false }); + } + + _renderHeader = (title) => + { + const { statuscode_id } = this.props; + const { open } = this.state; + + return ( +
= this.status ? { position: "relative", } : { position: "relative", cursor: "inherit" }} onClick={ statuscode_id >= this.status ? this._handle_onSwitch : () => {} }> + { this.status === statuscode_id && (
)} + +

{ title }

+ { statuscode_id >= this.status && ( +
+
+
+ ) } + { this._renderHeaderButtons !== undefined && this._renderHeaderButtons() } +
+ ) + } +} \ No newline at end of file diff --git a/components/DealsStatus/index.js b/components/DealsStatus/index.js index 5eae91a..fda915c 100644 --- a/components/DealsStatus/index.js +++ b/components/DealsStatus/index.js @@ -2,79 +2,7 @@ import React from "react" import { connect } from "react-redux" import DealsList from "./DealsList"; import SingleDeal from "./SingleDeal"; -import { getDeals } from "../../actions"; - -class AllContractsModal extends React.Component -{ - constructor(props) - { - super(props); - } - - render() - { - const { open, close, activeContract, handleContractSelected } = this.props - - return ( -
-
-
-

Статусы сделок

- -
-
-
-
-
-

Сделка 1

- - -

Выбор КП

-
-
-

Сделка 1

- - -

Программа финансирования

-
-
-

Сделка 1

- - -

Сборка пакета документов

-
-
-

Сделка 1

- - -

Проверка документов

-
-
-

Сделка 1

- - -

Принятие решения по заявке

-
-
-

Сделка 1

- - -

Оформление лизинга

-
-
-

Сделка 1

- - -

Выбор типа подписания

-
-
-
-
-
-
- ) - } -} +import { getDeals, getDealOffers, getDealDocuments, getDealContracts } from "../../actions"; class DealsStatus extends React.Component { @@ -82,17 +10,17 @@ class DealsStatus extends React.Component { super(props) this.state = { + status: 2, currentContractModalOpened: false, allContractModalOpened: false, currentSelected: null, - dealSelected: false, + dealSelected: undefined, deals: undefined, } } static getDerivedStateFromProps(nextProps, prevState) { - console.log("DealsStatus", "getDerivedStateFromProps", { nextProps }); return { deals: nextProps.deals, } @@ -106,6 +34,30 @@ class DealsStatus extends React.Component componentDidUpdate(prevProps, prevState) { } + _onDealsUpdate = () => + { + return new Promise((resolve) => + { + const { dispatch } = this.props; + + getDeals({ dispatch, update: true }) + .then(() => + { + resolve(); + }) + .catch(() => + { + resolve(); + }); + }); + } + + _onDealContractsUpdate = (deal_id) => + { + const { dispatch } = this.props; + getDealContracts({ dispatch, deal_id, }); + } + _handleModalToggle = (modal) => { if (modal === "current") @@ -129,26 +81,49 @@ class DealsStatus extends React.Component }) } + _handle_onSelectDeal = (deal_id) => + { + const { dispatch } = this.props; + + this.setState({ dealSelected: deal_id }); + + getDealOffers({ dispatch, deal_id, }); + getDealDocuments({ dispatch, deal_id, }); + getDealContracts({ dispatch, deal_id, }); + } + + _handle_onCloseDeal = () => + { + this.setState({ dealSelected: undefined }); + } + render() { - const { currentContractModalOpened, allContractModalOpened, currentSelected, dealSelected, deals } = this.state + const { currentContractModalOpened, allContractModalOpened, currentSelected, dealSelected, deals, status, } = this.state + const { questionnaire_status, onQuestionnaire, } = this.props; return ( <> -
-

Статусы сделок

-
- - {/*} - { - this._handleModalToggle("all") - }} - activeContract={currentSelected} - handleContractSelected={this._handleContractSelected} - /> - {*/} + { deals.list !== undefined && deals.list !== null && deals.list.length > 0 && ( + <> +
+

Статусы сделок

+
+ + + ) } ) } @@ -156,7 +131,6 @@ class DealsStatus extends React.Component function mapStateToProps(state, ownProps) { - console.log({ "DealsStatus.state": state }); return { deals: state.deals, } diff --git a/components/DigitalDocumentAutomationBanner/index.js b/components/DigitalDocumentAutomationBanner/index.js new file mode 100644 index 0000000..794fc36 --- /dev/null +++ b/components/DigitalDocumentAutomationBanner/index.js @@ -0,0 +1,21 @@ +import React from "react"; + +export default class DigitalDocumentAutomationBanner extends React.Component +{ + constructor(props) + { + super(props); + this.state = {}; + } + + render() + { + return ( +
+

Наш оператор Диадок. Идентификатор участника ЭДО (GUID) 2BM-9724016636-772401001-202007300714591533849».

+
Что такое ЭДО?
+
Получить приглашение в ЭДО
+
+ ) + } +} \ No newline at end of file diff --git a/components/EDOSign/index.js b/components/EDOSign/index.js new file mode 100644 index 0000000..d65bf06 --- /dev/null +++ b/components/EDOSign/index.js @@ -0,0 +1,580 @@ +import React from "react"; +import { connect } from "react-redux"; +import moment from "moment"; +import { SpinnerCircular } from "spinners-react"; +import { concatSeries } from "async"; +import { eachSeries } from 'async'; +import Select from 'react-select'; + +import { createEDOProject, signCheckCreatePrintForm, signCheckPowerAttorneyClient, signDownloadFile, signGetGUIDEntity, signGetPowerAttorneyClient, signGetWMDoc, docEDOSign, docEDOStatus, docEDOConnect, getFile, signGetFileContractProject, signCheckCancelDocument } from "../../actions"; +//import { getDeals, getDealOffers, getDealDocuments, getDealContracts } from "../../actions"; + +class EDOSign extends React.Component +{ + constructor(props) + { + super(props) + this.state = { + finished: false, + operators: null, + edo_message: null, + loading: false, + disabled: false, + documents: [], + operator_selected: {}, + statuses: {}, + step: 0, + } + } + + static getDerivedStateFromProps(nextProps, prevState) + { + return { + operators: nextProps.operators, + edo_message: nextProps.edo_message, + } + } + + componentDidMount() + { + const docs = []; + for(let i in this.props.documents) + { + docs.push({ ...this.props.documents[i], ...{ index: i, loading: true, ready: false, attorney: false } }); + } + this.setState({ documents: docs }); + + if(this.state.operator_selected.box_id === undefined) + { + this.setState({ operator_selected: this.state.operators !== null && this.state.operators[0] !== undefined ? this.state.operators[0] : {} }); + } + } + + _updateDocs = (id, update) => + { + return new Promise((resolve) => + { + const docs = [ ...this.state.documents ]; + docs[ id ] = { ...docs[id], ...update }; + + this.setState({ documents: docs }, () => + { + resolve(); + }); + }); + } + + _checkDocumentsCompleted = () => + { + const { documents } = this.state; + let completed = true; + + for(let i in documents) + { + if(!documents[i].completed) + completed = false; + break; + } + + return completed; + } + + _sign = () => + { + const { operator_selected, step } = this.state; + const documents = [ ...this.state.documents ]; + + this.setState({ loading: true }, () => + { + eachSeries(documents, async (document, callback) => + { + if(document.completed) + { + callback(); + } + else if(document.signing) + { + await this._updateDocs(document.index, { loading: true, }); + + const status_result = await docEDOStatus({ contract_number: document.id }); + if(status_result.status === 3) + { + await this._updateDocs(document.index, { loading: false, signing: false, ready: false, completed: true, }); + } + else + { + await this._updateDocs(document.index, { loading: false, signing: true, ready: false, }); + } + + callback(); + } + else if(document.ready) + { + await this._updateDocs(document.index, { loading: true, }); + const status_result = await docEDOStatus({ contract_number: document.id }); + + if(status_result.status > 0) + { + const sign_result = await docEDOSign({ edoid: status_result.edoid }); + } + + await this._updateDocs(document.index, { loading: false, signing: true, ready: false, error: false, }); + callback(); + } + else + { + await this._updateDocs(document.index, { loading: true }); + + if(document.attorney && document.attorney_selected !== undefined) + { + const create_edo_project_result = await createEDOProject({ + contract_number: document.id, + power_attorney: document.attorney_selected.value, + power_attorney_number: document.attorney_selected.label, + edo_box: operator_selected.edo_box, + }); + + const get_guid_entity_result = await signGetGUIDEntity({ + contract_number: document.id, + }); + + const wmdoc_result = await signGetWMDoc({ + entity_name: "evo_contract", + entity_id: get_guid_entity_result.entityid, + sign_type: "EDO", + evo_id: "144", + code: "Leas_Contract", + }); + + const connect_result = await docEDOConnect({ contract_number: document.id }); + + await this._updateDocs(document.index, { + entity_id: get_guid_entity_result.entityid, + ready: true, + loading: false, + attorney: false, + }); + + callback(); + } + else + { + const create_print_form_result = await signCheckCreatePrintForm({ contract_number: document.id, sign_type: "EDO" }); + const docs = { status: create_print_form_result.status }; + + if(create_print_form_result.status !== "success") + { + docs.loading = false; + docs.error = true; + docs.ready = true; + docs.message = create_print_form_result.message; + } + + await this._updateDocs(document.index, docs); + + if(create_print_form_result.status === "success") + { + const check_attorney_client_result = await signCheckPowerAttorneyClient({ contract_number: document.id }) + + await this._updateDocs(document.index, { attorney: check_attorney_client_result.power_attorney_required, }); + + if(check_attorney_client_result.power_attorney_required) + { + const get_attorney_client_result = await signGetPowerAttorneyClient({ contract_number: document.id }); + + if(get_attorney_client_result === null) + { + await this._updateDocs(document.index, { loading: false, error: true, ready: true, message: "Возникла ошибка при создании документа для подписания." }); + callback(); + } + else + { + if(get_attorney_client_result.length === null) + { + await this._updateDocs(document.index, { loading: false, error: true, ready: true, message: "Не обнаружена доверенность на подписанта. Для продолжения подписания обратитесь к своему персональному менеджеру" }); + callback(); + } + else + { + const attorneys = []; + for(let i in get_attorney_client_result) + { + attorneys.push({ + value: get_attorney_client_result[i].power_attorney, + label: get_attorney_client_result[i].power_attorney_number, + }); + } + + await this._updateDocs(document.index, { loading: false, error: false, attorneys, attorney_selected: undefined }); + + callback(); + } + } + } + else + { + const create_edo_project_result = await createEDOProject({ + contract_number: document.id, + edo_box: operator_selected.edo_box, + }); + + const get_guid_entity_result = await signGetGUIDEntity({ + contract_number: document.id, + }); + + const wmdoc_result = await signGetWMDoc({ + entity_name: "evo_contract", + entity_id: get_guid_entity_result.entityid, + sign_type: "EDO", + evo_id: "144", + }); + + const connect_result = await docEDOConnect({ contract_number: document.id }); + + await this._updateDocs(document.index, { + entity_id: get_guid_entity_result.entityid, + ready: true, + loading: false, + attorney: false, + }); + + callback(); + } + } + else + { + await this._updateDocs(document.index, { + loading: false, + error: true, + ready: true, + message: create_print_form_result.message !== undefined && create_print_form_result.message !== null ? create_print_form_result.message : "Возникла ошибка при создании документа для подписания.", + }); + callback(); + } + } + } + }, () => + { + if(this._checkDocumentsCompleted()) + { + this.setState({ loading: false, disabled: false, finished: true, }); + } + else + { + this.setState({ loading: false, disabled: false, finished: false, }); + } + }); + }); + } + + _handle_onFormSubmit = (event) => + { + event.preventDefault(); + + const { onFinish, onGoToEDOInvites } = this.props; + const { operators, operator_selected, step, finished } = this.state; + const documents = [ ...this.state.documents ]; + + if(operators !== null && operators.length === 0) + { + onGoToEDOInvites(); + } + else + { + if(finished) + { + onFinish(); + } + else + { + switch(step) + { + case 0: + { + this.setState({ step: 1 }, () => + { + this._sign(); + }); + } + break; + + case 1: + { + this._sign(); + } + break; + } + } + } + } + + _handle_onSelectOperator = (operator) => + { + this.setState({ operator_selected: operator }); + } + + _handle_onAttorneyChange = (index, attorney) => + { + this._updateDocs(index, { attorney_selected: attorney }); + } + + _handle_onDownloadFile = (index) => + { + const { documents } = this.state; + + this.setState({ loading: true, disabled: true, }, async () => + { + await this._updateDocs(index, { loading: true }); + + const link_result = await signGetFileContractProject({ + contract_number: documents[index].id, + }); + + await getFile({ id: link_result.url, filename: `ЛК ЭВОЛЮЦИЯ ${ documents[index].id }.${ link_result.extension }` }); + + await this._updateDocs(index, { loading: false, disabled: false, }); + this.setState({ loading: false, disabled: false, }); + }); + } + + _handle_onCancelFile = async (index) => + { + const { onCancel } = this.props; + const { documents } = this.state; + await this._updateDocs(index, { loading: true }); + + this.setState({ loading: true, disabled: true }, async () => + { + await signCheckCancelDocument({ contract_number: documents[index].id, doc_type_id: "144" }); + const docs = [ ...this.state.documents ]; + docs.splice(index, 1); + + if(docs.length > 0) + { + this.setState({ documents: docs, loading: false, disabled: false, }); + } + else + { + onCancel(true); + } + }); + } + + _handle_onCancel = () => + { + const { onCancel } = this.props; + const { documents } = this.state; + + var clean = false; + if(documents.length === 0) + { + clean = true; + } + + onCancel(clean); + } + + _handle_onCheckEDOStatus = async (index) => + { + const { documents } = this.state; + + await this._updateDocs(index, { loading: true }); + + this.setState({ loading: true, disabled: true }, async () => + { + const status_result = await docEDOStatus({ contract_number: documents[index].id }); + + if(status_result.status >= 2) + { + await this._updateDocs(index, { loading: false, disabled: false, signing: false, completed: true, url: status_result.url_edo, }); + } + else + { + await this._updateDocs(index, { loading: false, disabled: false, signing: true, completed: false, url: status_result.url_edo, }); + } + + if(this._checkDocumentsCompleted()) + { + this.setState({ loading: false, disabled: false, finished: true, }); + } + else + { + this.setState({ loading: false, disabled: false, finished: false, }); + } + }); + } + + _handle_onGoToEDO = (index) => + { + const { documents } = this.state; + + if(documents[index].url !== undefined && documents[index].url !== null) + { + window.open(documents[index].url, "_blank"); + } + } + + render() + { + const { step, operators, edo_message, documents, loading, disabled, finished, operator_selected } = this.state; + const { onCancel, } = this.props; + + return ( +
+
+

Подписание через ЭДО

+
+ { step === 0 && ( +
+ +
+ { operators !== undefined && operators !== null && ( + <> + { operators.length === 0 ? ( +
+
+
+ { edo_message } +
+
+ ) : ( + operators.map((operator, index) => ( +
+ this._handle_onSelectOperator(operator) } + disabled={ false } + /> + +
+ ) ) + )} + + ) } +
+
+ ) } + { step === 1 && ( +
+ { documents.map((document, index) => + { + return ( +
+
+

+ { document.name } от { moment(document.date).format("DD.MM.YYYY") } + { document.type !== undefined && ({ document.type }) } +

+
+
+ { document.loading ? ( + <> + { loading && ( + + ) } + + ) : ( + <> + { document.error ? ( + <> +
+ { document.message !== undefined && document.message !== null ? document.message : "" } + + ) : ( + <> + { document.attorney && ( + <> +
+
+ +
+ ) } + + ) } + + ) + } +} \ No newline at end of file diff --git a/components/FileDropzoneDeals/index.js b/components/FileDropzoneDeals/index.js new file mode 100644 index 0000000..6f38ecb --- /dev/null +++ b/components/FileDropzoneDeals/index.js @@ -0,0 +1,108 @@ +import Dropzone from 'react-dropzone'; +import FileDropzone from "../FileDropzone"; +import moment from "moment"; +import { SpinnerCircular } from 'spinners-react'; + +const LIMIT = 10000000; +const LIMIT_FILES = 10; + +export default class FileDropzoneDeals extends FileDropzone +{ + constructor(props) + { + super(props); + this.state = { + message: true, + }; + } + + componentDidMount() + { + } + + _handle_onToggleShowMessage = () => + { + this.setState({ message: this.state.message ? false : true }); + } + + render() + { + const { uploaded, onAddFile, onDeleteFile, uploading, document, statuscode_id, } = this.props; + const { message } = this.state; + + let show_comment = false; + if(document.comment !== null && document.comment !== "") + { + show_comment = true; + } + + return ( + <> + { show_comment && ( +
+ { message ? ( +

+ { document.check } + { document.comment } +

+ ) : ( +

+ Комментарий к ранее загруженным файлам +

+ ) } +
+
+ ) } + { statuscode_id === 102 && ( + <> + { uploaded.files.length > 0 && ( +
+
+ { uploaded.files.map((file, index) => + { + return ( +
+ { file.uploaded ? ( +
onDeleteFile(file.group, index) }> +
+
+ ) : ( +
+ +
+ ) } +
+ PDF +
+
+ { file.name } + { moment().format("DD.MM.YYYY") } +
+
+ ) + } ) } +
+
+ ) } + { uploaded.files.length < LIMIT_FILES && ( + onAddFile(acceptedFiles, document.comment !== null && document.comment !== "" ? true : false) } maxFiles={ LIMIT_FILES } multiple={ true } disabled={ uploading }> + { ({getRootProps, getInputProps}) => ( +
+
+
+

+ Перенесите файлы на экран для быстрой загрузки или выберите файл с компьютера +

+ +
+ +
+ ) } +
+ ) } + + ) } + + ) + } +} \ No newline at end of file diff --git a/components/LogFileDownload/index.js b/components/LogFileDownload/index.js new file mode 100644 index 0000000..9ad3c16 --- /dev/null +++ b/components/LogFileDownload/index.js @@ -0,0 +1,19 @@ +import React from "react"; +import { logDocumentAccess } from "../../actions/logsActions"; + +export default class LogFileDownload extends React.Component +{ + _log = () => + { + const{ log } = this.props; + + if(log !== undefined) + { + const { log } = this.props; + + logDocumentAccess(log) + .then(() => {}) + .catch(() => {}); + } + } +} \ No newline at end of file diff --git a/components/questionnaire/forms/FilesList.js b/components/questionnaire/forms/FilesList.js index 2e81c61..63fca34 100644 --- a/components/questionnaire/forms/FilesList.js +++ b/components/questionnaire/forms/FilesList.js @@ -127,7 +127,7 @@ export default class FilesList extends React.Component { files.map((file, index) => { if(file.name === undefined) { return null; } return ( -
+

{ this._renderFileName(file.name) }{/*}Постановление{*/}

@@ -141,7 +141,7 @@ export default class FilesList extends React.Component }) } { loading && ( -
+
diff --git a/components/questionnaire/forms/Form_8_Signing/index.js b/components/questionnaire/forms/Form_8_Signing/index.js index d5b10e8..287da96 100644 --- a/components/questionnaire/forms/Form_8_Signing/index.js +++ b/components/questionnaire/forms/Form_8_Signing/index.js @@ -233,7 +233,7 @@ class Form_8_Signing extends QuestionnaireForm )} { !sign.digital && ( -
+

{ filename } diff --git a/components/questionnaire/forms/Form_9_Status/index.js b/components/questionnaire/forms/Form_9_Status/index.js index fc8fc8c..83eef7e 100644 --- a/components/questionnaire/forms/Form_9_Status/index.js +++ b/components/questionnaire/forms/Form_9_Status/index.js @@ -151,7 +151,7 @@ class Form_9_Status extends QuestionnaireForm ) }

-
+

{ file.name } diff --git a/constants/actionTypes.js b/constants/actionTypes.js index f64a19f..2d6638e 100644 --- a/constants/actionTypes.js +++ b/constants/actionTypes.js @@ -54,3 +54,8 @@ export const DEAL_DOCUMENTS_LIST = 'DEAL_DOCUMENTS_LIST'; export const DEAL_CONTRACTS_LIST = 'DEAL_CONTRACTS_LIST'; export const DEALS_RESET = 'DEALS_RESET'; export const DEAL_RESET = 'DEAL_RESET'; + +export const EDO_LOADED = 'EDO_LOADED'; +export const EDO_OPERATORS_LIST = 'EDO_OPERATORS_LIST'; +export const EDO_INVITES_LIST = 'EDO_INVITES_LIST'; +export const EDO_RESET = 'EDO_RESET'; \ No newline at end of file diff --git a/css/components/style.css b/css/components/style.css index ae81485..c7114cb 100644 --- a/css/components/style.css +++ b/css/components/style.css @@ -158,10 +158,11 @@ input[type="checkbox"] + label:before { position: absolute; left: 0; top: 2px; + border-radius: 0px; } input[type="checkbox"]:checked + label:before { - background: url("/assets/images/icons/checkbox_white.svg") no-repeat center var(--primary); - border-color: var(--primary); + background: url("/assets/images/icons/checkbox_white.svg") no-repeat center var(--blue); + border-color: var(--blue); } input[type="checkbox"]:disabled + label { cursor: default; @@ -196,8 +197,8 @@ input[type="radio"] + label:before { } input[type="radio"]:checked + label:before { background: #fff; - box-shadow: inset 0px 0 0px 5px #005FF9; - border-color: #005FF9; + box-shadow: inset 0px 0 0px 5px #1c01a9; + border-color: #1c01a9; border: 0; } input[type="radio"]:disabled + label { diff --git a/css/components/style.less b/css/components/style.less index 05866f2..eb956a9 100644 --- a/css/components/style.less +++ b/css/components/style.less @@ -187,13 +187,14 @@ input[type="checkbox"] { position: absolute; left: 0; top: 2px; + border-radius: 0px; } } &:checked + label { &:before { - background: url("/assets/images/icons/checkbox_white.svg") no-repeat center var(--primary); - border-color: var(--primary); + background: url("/assets/images/icons/checkbox_white.svg") no-repeat center var(--blue); + border-color: var(--blue); } } &:disabled + label { @@ -235,8 +236,8 @@ input[type="radio"] { &:checked + label { &:before { background: #fff; - box-shadow: inset 0px 0 0px 5px #005FF9; - border-color: #005FF9; + box-shadow: inset 0px 0 0px 5px #1c01a9; + border-color: #1c01a9; border: 0; } } diff --git a/css/forms/style.css b/css/forms/style.css index e8cdd06..70861ec 100644 --- a/css/forms/style.css +++ b/css/forms/style.css @@ -1064,19 +1064,11 @@ } @media all and (max-width: 768px) { .dropzone { - border: 0; - background: transparent; height: auto; + flex-wrap: wrap; } - .dropzone div p { - margin-bottom: 10px; - } - .dropzone div p:before { - content: attr(data-sm-text); - display: block; - } - .dropzone div p span { - display: none; + .dropzone p { + width: 100%; } } /* questionnaire */ @@ -1387,14 +1379,17 @@ line-height: 20px; } } +.questionnaire .autocomlete_with_indicators .react-select__control .react-select__indicators { + display: block !important; +} .questionnaire .files_list { padding-bottom: 30px; } @media all and (max-width: 720px) { - .questionnaire .files_list .dosc_list { + .questionnaire .files_list .docs_list { width: 100% !important; } - .questionnaire .files_list .dosc_list .doc_name { + .questionnaire .files_list .docs_list .doc_name { align-items: center; align-content: center; width: auto; @@ -1665,3 +1660,6 @@ margin: 0px!important; } } +.deal_offers_table { + width: 100%; +} diff --git a/css/forms/style.less b/css/forms/style.less index e1cbb09..018372b 100644 --- a/css/forms/style.less +++ b/css/forms/style.less @@ -1265,23 +1265,11 @@ } @media all and (max-width: 768px) { - border: 0; - background: transparent; height: auto; + flex-wrap: wrap; - div { - p { - margin-bottom: 10px; - - &:before { - content: attr(data-sm-text); - display: block; - } - - span { - display: none; - } - } + p { + width: 100%; } } } @@ -1554,25 +1542,28 @@ max-width: 800px; } - .autocomlete { + .autocomlete + { - * { outline: none; box-shadow: none !important; } - .react-select__control { + .react-select__control + { border-radius: 0; border: 1px solid rgba(0,16,61,0.12); height: 40px; min-height: 40px; - &.react-select__control--menu-is-open { + &.react-select__control--menu-is-open + { border-color: var(--blue); } - .react-select__value-container { + .react-select__value-container + { padding:0 12px; height: 100%; background: #fff; @@ -1581,13 +1572,15 @@ //background-color: #EDEFF5; } - .react-select__input-container { + .react-select__input-container + { margin: 0; padding: 0; } } - .react-select__indicators { + .react-select__indicators + { display: none; } } @@ -1622,19 +1615,30 @@ color: var(--blue); } - @media all and (max-width: 960px) { - font-size: 13px; - line-height: 20px; - } - } - } - } + @media all and (max-width: 960px) { + font-size: 13px; + line-height: 20px; + } + } + } + } + + .autocomlete_with_indicators + { + .react-select__control + { + .react-select__indicators + { + display: block !important; + } + } + } .files_list { padding-bottom: 30px; @media all and (max-width: 720px) { - .dosc_list { + .docs_list { width: 100% !important; .doc_name { @@ -1939,4 +1943,8 @@ margin: 0px!important; } } +} + +.deal_offers_table { + width: 100%; } \ No newline at end of file diff --git a/css/main/style.css b/css/main/style.css index f9c5962..1a70596 100644 --- a/css/main/style.css +++ b/css/main/style.css @@ -1767,7 +1767,7 @@ main .dropdown_blocks_list .block-column .dropdown_block + .dropdown_blocks_list main .dropdown_blocks_list .block-column .dropdown_block + .dropdown_blocks_list .dropdown_block:not(:last-child) { margin-bottom: 30px; } -main .dropdown_blocks_list .block-column .dosc_list { +main .dropdown_blocks_list .block-column .docs_list { width: calc(100% - 290px); } @media all and (max-width: 960px) { @@ -1787,13 +1787,13 @@ main .dropdown_blocks_list .block-column .dosc_list { padding-bottom: 10px; } main .dropdown_blocks_list .block-column .dropdown_block, - main .dropdown_blocks_list .block-column .dosc_list { + main .dropdown_blocks_list .block-column .docs_list { width: 100%; margin-right: 0; border: 0 !important; } main .dropdown_blocks_list .block-column .dropdown_block .block_header, - main .dropdown_blocks_list .block-column .dosc_list .block_header { + main .dropdown_blocks_list .block-column .docs_list .block_header { padding: 0; height: auto; } @@ -2465,7 +2465,7 @@ main #order .container { width: 100%; } } -.dosc_list .list_title { +.docs_list .list_title { margin-top: 45px; font-weight: 700; margin-bottom: 15px; @@ -2473,30 +2473,30 @@ main #order .container { line-height: 23px; } @media all and (max-width: 768px) { - .dosc_list .list_title { + .docs_list .list_title { margin-top: 25px; font-size: 13px; line-height: 20px; } } -.dosc_list .list_title:first-child { +.docs_list .list_title:first-child { margin-top: 0; } -.dosc_list .row { +.docs_list .row { margin-bottom: 35px; display: flex; align-items: center; justify-content: space-between; } @media all and (max-width: 1600px) and (min-width: 1280px) { - .dosc_list .row { + .docs_list .row { margin-bottom: 20px; } } -.dosc_list .row p { +.docs_list .row p { margin-bottom: 0; } -.dosc_list .row .doc_name { +.docs_list .row .doc_name { font-weight: 700; min-height: 56px; display: inline-flex; @@ -2506,82 +2506,82 @@ main #order .container { max-width: 50%; } @media all and (max-width: 1600px) and (min-width: 1280px) { - .dosc_list .row .doc_name { + .docs_list .row .doc_name { min-height: 42px; } } @media all and (max-width: 960px) { - .dosc_list .row .doc_name { + .docs_list .row .doc_name { align-content: flex-start; } } -.dosc_list .row .doc_name.full { +.docs_list .row .doc_name.full { max-width: 100%; } -.dosc_list .row .doc_name.full span { +.docs_list .row .doc_name.full span { width: 100%; } -.dosc_list .row .doc_name a { +.docs_list .row .doc_name a { text-decoration: underline; font-weight: 700; } -.dosc_list .row .doc_name a:hover { +.docs_list .row .doc_name a:hover { text-decoration: none; } -.dosc_list .row .doc_name span { +.docs_list .row .doc_name span { display: block; font-weight: 400; margin-top: 2px; color: var(--text_not_active); } -.dosc_list .row .btn_group { +.docs_list .row .btn_group { display: flex; } @media all and (max-width: 768px) { - .dosc_list .row .btn_group { + .docs_list .row .btn_group { display: block; } } -.dosc_list .row .btn_group .button { +.docs_list .row .btn_group .button { width: auto; margin-left: 30px; } @media all and (max-width: 768px) { - .dosc_list .row .btn_group .button { + .docs_list .row .btn_group .button { margin-bottom: 0px; display: flex; margin-top: 16px !important; } - .dosc_list .row .btn_group .button:first-child { + .docs_list .row .btn_group .button:first-child { margin-left: 0; width: auto; display: inline-flex; margin-top: 8px !important; } } -.dosc_list .row .doc_date { +.docs_list .row .doc_date { margin-right: 30px; margin-left: 30px; white-space: nowrap; } -.dosc_list .row .button { +.docs_list .row .button { width: auto; padding: 0 30px; } -.dosc_list.medium-icon .row { +.docs_list.medium-icon .row { margin-bottom: 15px; width: 100%; } -.dosc_list.medium-icon .doc_name { +.docs_list.medium-icon .doc_name { min-height: 40px; background-size: 32px; padding-left: 48px; } -.dosc_list.acts_list-checkbox .row { +.docs_list.acts_list-checkbox .row { margin-bottom: 15px; width: 100%; } -.dosc_list.acts_list-checkbox .row .doc_name { +.docs_list.acts_list-checkbox .row .doc_name { background-size: 32px; padding-left: 0; background-position: 30px 50%; @@ -2590,42 +2590,42 @@ main #order .container { font-weight: 400; position: relative; } -.dosc_list.acts_list-checkbox .row .doc_name[data-format]:before { +.docs_list.acts_list-checkbox .row .doc_name[data-format]:before { left: 30px; width: 31px; font-size: 6px; } -.dosc_list.acts_list-checkbox .row .doc_name input[type="checkbox"] + label { +.docs_list.acts_list-checkbox .row .doc_name input[type="checkbox"] + label { display: flex; align-items: center; padding-left: 0; } -.dosc_list.acts_list-checkbox .row .doc_name input[type="checkbox"] + label:before { +.docs_list.acts_list-checkbox .row .doc_name input[type="checkbox"] + label:before { margin-right: 56px; position: relative; } -.dosc_list.acts_list-checkbox .row .doc_name:not(.i-pdf) { +.docs_list.acts_list-checkbox .row .doc_name:not(.i-pdf) { min-height: 0; } -.dosc_list.acts_list-checkbox .row .doc_name:not(.i-pdf) input[type="checkbox"] + label:before { +.docs_list.acts_list-checkbox .row .doc_name:not(.i-pdf) input[type="checkbox"] + label:before { margin-right: 16px; } @media all and (max-width: 768px) { - .dosc_list .row { + .docs_list .row { position: relative; flex-wrap: wrap; } - .dosc_list .row .doc_name { + .docs_list .row .doc_name { max-width: 100%; width: 100%; } - .dosc_list .row .button:not(.download-icon) { + .docs_list .row .button:not(.download-icon) { margin-left: 0; margin-right: 0; margin-top: 8px; width: auto; } - .dosc_list .row .button.download-icon { + .docs_list .row .button.download-icon { position: absolute; right: 0; top: 0; @@ -2689,6 +2689,11 @@ main #order .container { display: flex; width: 100%; } +@media (max-width: 1280px) { + .contract_table .table_row { + padding-bottom: 0px !important; + } +} .contract_table .table_row .table_cell { padding: 16px 8px; border: 1px solid #EDEFF5; @@ -2717,6 +2722,12 @@ main #order .container { .contract_table .table_row .table_cell p.opened { color: var(--green); } +@media (max-width: 1280px) { + .contract_table .table_row .table_cell p { + width: 100%; + margin-top: 40px; + } +} .contract_table .table_row .table_cell b { display: block; } @@ -3570,11 +3581,11 @@ main .dropdown_blocks_list .dropdown_block .block_body .fines_detail ul { main .dropdown_blocks_list .dropdown_block .block_body .fines_detail ul li { width: 50%; } -.dropdown_block + .dosc_list { +.dropdown_block + .docs_list { margin-top: 20px; } @media all and (max-width: 768px) { - .dropdown_block + .dosc_list { + .dropdown_block + .docs_list { margin-top: 0; padding-top: 20px; border-top: 1px solid #EDEFF5; @@ -3596,7 +3607,7 @@ main .dropdown_blocks_list .dropdown_block .block_body .fines_detail ul li { width: calc(100% - 160px); } } -@media all and (max-width: 960px) { +@media all and (max-width: 1080px) { .helpBox_wrapper { position: relative; bottom: 0; @@ -3635,6 +3646,12 @@ main .dropdown_blocks_list .dropdown_block .block_body .fines_detail ul li { top: calc(100vh - 240px); } } +@media all and (max-width: 1080px) { + .helpBox_wrapper .helpBox { + position: relative; + top: 0; + } +} .helpBox_wrapper .helpBox.hidden { display: none; } @@ -3712,7 +3729,6 @@ main .dropdown_blocks_list .dropdown_block .block_body .fines_detail ul li { } @media all and (max-width: 960px) { .helpBox_wrapper .helpBox .content { - width: 100%; margin-top: 10px; } } @@ -3789,7 +3805,7 @@ main .dropdown_blocks_list .dropdown_block .block_body .fines_detail ul li { align-items: flex-end; height: 102px; } -@media all and (max-width: 960px) { +@media all and (max-width: 1080px) { .rate_us { height: 120px; } @@ -3962,6 +3978,11 @@ main .dropdown_blocks_list .dropdown_block .block_body .fines_detail ul li { margin-top: 50px; } } +@media all and (max-width: 768px) { + .feed { + overflow: hidden; + } +} .feed .feed_item { box-sizing: border-box; padding: 24px 16px; @@ -4949,22 +4970,22 @@ main .dropdown_blocks_list .dropdown_block .block_body .fines_detail ul li { margin-bottom: 16px; border-bottom: 1px solid rgba(0, 16, 61, 0.12); } -.appeal_list .appeal_item .item_body .item_text .dosc_list { +.appeal_list .appeal_item .item_body .item_text .docs_list { display: flex; gap: 0 20px; flex-wrap: wrap; margin-top: 16px; } -.appeal_list .appeal_item .item_body .item_text .dosc_list .row { +.appeal_list .appeal_item .item_body .item_text .docs_list .row { width: calc(33.333% - 20px); } @media all and (max-width: 1279px) { - .appeal_list .appeal_item .item_body .item_text .dosc_list .row { + .appeal_list .appeal_item .item_body .item_text .docs_list .row { width: calc(50% - 20px); } } @media all and (max-width: 768px) { - .appeal_list .appeal_item .item_body .item_text .dosc_list .row { + .appeal_list .appeal_item .item_body .item_text .docs_list .row { width: 100%; } } @@ -5023,24 +5044,24 @@ main .dropdown_blocks_list .dropdown_block .block_body .fines_detail ul li { .new_appeal .column .column_text_block p { margin-bottom: 8px; } -.new_appeal .column .column_text_block .dosc_list { +.new_appeal .column .column_text_block .docs_list { display: flex; flex-wrap: wrap; } -.new_appeal .column .column_text_block .dosc_list .row { +.new_appeal .column .column_text_block .docs_list .row { width: 50%; } @media all and (max-width: 768px) { - .new_appeal .column .column_text_block .dosc_list .row { + .new_appeal .column .column_text_block .docs_list .row { width: 100%; margin-bottom: 20px; } } -.new_appeal .column .column_text_block .dosc_list .row .doc_name { +.new_appeal .column .column_text_block .docs_list .row .doc_name { max-width: 100%; } @media all and (max-width: 768px) { - .new_appeal .column .column_text_block .dosc_list .row .doc_name { + .new_appeal .column .column_text_block .docs_list .row .doc_name { min-height: 42px; } } @@ -5085,10 +5106,10 @@ main .dropdown_blocks_list .dropdown_block .block_body .fines_detail ul li { } } @media all and (max-width: 768px) { - .gibdd.dropdown_blocks_list .dosc_list { + .gibdd.dropdown_blocks_list .docs_list { margin-top: 20px; } - .gibdd.dropdown_blocks_list .dosc_list .row { + .gibdd.dropdown_blocks_list .docs_list .row { margin-bottom: 0; } .gibdd.dropdown_blocks_list .dropdown_block .block_body .company ul li b { @@ -5200,7 +5221,7 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block .block_body .fines_ } } @media all and (max-width: 767px) { - main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block .block_body .dosc_list { + main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block .block_body .docs_list { margin-bottom: 15px; } } @@ -5299,7 +5320,9 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block .block_body .fines_ display: block !important; } .contractStatus_list { - margin: 20px 0; + margin: 50px 0; + position: relative; + z-index: 9; } .contractStatus_list .list_item { display: flex; @@ -5307,11 +5330,33 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block .block_body .fines_ width: 100%; gap: 0 30px; justify-content: space-between; + position: relative; +} +@media all and (max-width: 920px) { + .contractStatus_list .list_item { + display: block; + padding-left: 100px; + } +} +@media all and (max-width: 768px) { + .contractStatus_list .list_item { + padding-left: 0; + } } .contractStatus_list .list_item div { display: flex; align-items: center; } +@media all and (max-width: 920px) { + .contractStatus_list .list_item div img { + max-width: 30px; + } +} +@media all and (max-width: 768px) { + .contractStatus_list .list_item div img { + display: none; + } +} .contractStatus_list .list_item div p { font-weight: 700; line-height: 23px; @@ -5321,10 +5366,29 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block .block_body .fines_ justify-content: flex-start; gap: 0 8px; } +@media all and (max-width: 920px) { + .contractStatus_list .list_item div p { + font-size: 12px; + line-height: 16px; + } +} +@media all and (max-width: 920px) and (min-width: 769px) { + .contractStatus_list .list_item div:first-child { + position: absolute; + left: 0; + top: 0; + max-width: 90px; + } +} .contractStatus_list .list_item div:nth-child(2) { width: 30%; position: relative; } +@media all and (max-width: 768px) { + .contractStatus_list .list_item div:nth-child(2) { + width: 100%; + } +} .contractStatus_list .list_item div:nth-child(2) p { cursor: pointer; color: var(--text_not_active); @@ -5344,6 +5408,11 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block .block_body .fines_ border-bottom: 6px solid transparent; background: #fff; } +@media all and (max-width: 920px) { + .contractStatus_list .list_item div:nth-child(2):before { + display: none; + } +} .contractStatus_list .list_item div:nth-child(2):after { content: ""; display: block; @@ -5353,6 +5422,11 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block .block_body .fines_ background-size: auto 13px; margin-left: 24px; } +@media all and (max-width: 920px) { + .contractStatus_list .list_item div:nth-child(2):after { + display: none; + } +} .contractStatus_list .list_item div:nth-child(3) { display: flex; align-items: center; @@ -5361,6 +5435,19 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block .block_body .fines_ width: 50%; position: relative; } +@media all and (max-width: 920px) { + .contractStatus_list .list_item div:nth-child(3) { + width: 100%; + gap: 0 12px; + padding: 10px 20px; + justify-content: flex-start; + } +} +@media all and (max-width: 768px) { + .contractStatus_list .list_item div:nth-child(3) { + padding: 20px; + } +} .contractStatus_list .list_item div:nth-child(3):before { content: ""; display: block; @@ -5375,6 +5462,18 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block .block_body .fines_ border-left: 8px solid #a499dd; border-bottom: 6px solid transparent; } +@media all and (max-width: 920px) { + .contractStatus_list .list_item div:nth-child(3):before { + border-top: 4px solid transparent; + border-left: 6px solid #a499dd; + border-bottom: 4px solid transparent; + right: auto; + left: 0; + bottom: 0; + transform: rotate(90deg); + top: auto; + } +} .contractStatus_list .list_item div:nth-child(3):after { content: ""; display: block; @@ -5383,17 +5482,54 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block .block_body .fines_ background: url("/assets/images/status/line_2.jpg") repeat-x left center; background-size: auto 13px; } +@media all and (max-width: 920px) { + .contractStatus_list .list_item div:nth-child(3):after { + background-size: auto 10px; + position: absolute; + left: -22px; + right: auto; + transform: rotate(90deg); + width: 50px; + height: 6px; + } +} +@media all and (max-width: 768px) { + .contractStatus_list .list_item div:nth-child(3):after { + left: -17px; + width: 40px; + } +} .contractStatus_list .list_item div:nth-child(4) { - width: 150px; + width: 130px; + min-width: 130px; + justify-content: flex-end; cursor: pointer; } +@media all and (max-width: 920px) { + .contractStatus_list .list_item div:nth-child(4) { + justify-content: flex-start; + } +} .contractStatus_list .list_item div:nth-child(4) button { white-space: nowrap; gap: 0 8px; } +@media all and (max-width: 920px) { + .contractStatus_list .list_item div:nth-child(4) button { + padding: 0; + } +} +.contractStatus_list .list_item div:first-child { + min-width: 60px; +} .contractStatus_list .list_item:not(:last-child) { margin-bottom: 5px; } +@media all and (max-width: 920px) { + .contractStatus_list .list_item:not(:last-child) { + margin-bottom: 20px; + } +} .contractStatus_list .list_item:not(:last-child) div:nth-child(5) { /*visibility: hidden;*/ } @@ -5412,6 +5548,12 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block .block_body .fines_ transition: transform 150ms ease; overflow: hidden; } +@media all and (max-width: 768px) { + .contractStatus_modal { + margin-bottom: 30px; + overflow: visible; + } +} .contractStatus_modal .modal_header { display: flex; align-items: center; @@ -5437,14 +5579,20 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block .block_body .fines_ align-items: unset; justify-content: flex-start; gap: 0 30px; - padding: 2px 0; + padding: 0px 0; +} +@media all and (max-width: 920px) { + .contractStatus_modal .single_status > div { + gap: 0 12px; + font-size: 12px; + } } .contractStatus_modal .single_status > div:last-child .status_body .wrap { padding-bottom: 0; border: 0; } .contractStatus_modal .single_status > div:last-child > span::before { - display: none; + display: none !important; } .contractStatus_modal .single_status > div > p { margin: 0; @@ -5453,48 +5601,81 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block .block_body .fines_ font-weight: 700; white-space: nowrap; padding: 15px 0; - height: 80px; display: flex; - align-items: center; + align-items: flex-start; box-sizing: border-box; } .contractStatus_modal .single_status > div i { display: block; - width: 50px; - height: 50px; + width: 40px; + height: 40px; } -.contractStatus_modal .single_status > div i.status_1 { - background: url("/assets/images/status/1.svg") no-repeat center; +@media all and (max-width: 920px) { + .contractStatus_modal .single_status > div i { + width: 30px; + height: 30px; + background-size: contain !important; + } } -.contractStatus_modal .single_status > div i.status_2 { - background: url("/assets/images/status/2.svg") no-repeat center; +.contractStatus_modal .single_status > div i.status_100 { + background: url("/assets/images/status/icon_deal_status_100.svg") no-repeat center; } -.contractStatus_modal .single_status > div i.status_3 { - background: url("/assets/images/status/3.svg") no-repeat center; +.contractStatus_modal .single_status > div i.status_100.inactive { + background: url("/assets/images/status/icon_deal_status_100_inactive.svg") no-repeat center; } -.contractStatus_modal .single_status > div i.status_4 { - background: url("/assets/images/status/4.svg") no-repeat center; +.contractStatus_modal .single_status > div i.status_101 { + background: url("/assets/images/status/icon_deal_status_101.svg") no-repeat center; } -.contractStatus_modal .single_status > div i.status_5 { - background: url("/assets/images/status/5.svg") no-repeat center; +.contractStatus_modal .single_status > div i.status_101.inactive { + background: url("/assets/images/status/icon_deal_status_101_inactive.svg") no-repeat center; } -.contractStatus_modal .single_status > div i.status_6 { - background: url("/assets/images/status/6.svg") no-repeat center; +.contractStatus_modal .single_status > div i.status_102 { + background: url("/assets/images/status/icon_deal_status_102.svg") no-repeat center; } -.contractStatus_modal .single_status > div i.status_7 { - background: url("/assets/images/status/7.svg") no-repeat center; +.contractStatus_modal .single_status > div i.status_102.inactive { + background: url("/assets/images/status/icon_deal_status_102_inactive.svg") no-repeat center; +} +.contractStatus_modal .single_status > div i.status_103 { + background: url("/assets/images/status/icon_deal_status_103.svg") no-repeat center; +} +.contractStatus_modal .single_status > div i.status_103.inactive { + background: url("/assets/images/status/icon_deal_status_103_inactive.svg") no-repeat center; +} +.contractStatus_modal .single_status > div i.status_104 { + background: url("/assets/images/status/icon_deal_status_104.svg") no-repeat center; +} +.contractStatus_modal .single_status > div i.status_104.inactive { + background: url("/assets/images/status/icon_deal_status_104_inactive.svg") no-repeat center; +} +.contractStatus_modal .single_status > div i.status_105 { + background: url("/assets/images/status/icon_deal_status_105.svg") no-repeat center; +} +.contractStatus_modal .single_status > div i.status_105.inactive { + background: url("/assets/images/status/icon_deal_status_105_inactive.svg") no-repeat center; +} +.contractStatus_modal .single_status > div i.status_106 { + background: url("/assets/images/status/icon_deal_status_106.svg") no-repeat center; +} +.contractStatus_modal .single_status > div i.status_106.inactive { + background: url("/assets/images/status/icon_deal_status_106_inactive.svg") no-repeat center; +} +.contractStatus_modal .single_status > div i.status_107 { + background: url("/assets/images/status/icon_deal_status_107.svg") no-repeat center; +} +.contractStatus_modal .single_status > div i.status_107.inactive { + background: url("/assets/images/status/icon_deal_status_107_inactive.svg") no-repeat center; } .contractStatus_modal .single_status > div > span { display: block; width: 20px; min-width: 20px; margin: 0; - background-image: url("data:image/svg+xml,%3Csvg width='12' height='12' viewBox='0 0 12 12' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M9.92871 3.50024L4.92871 8.50002L2.42871 6.00024' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A"); + background-image: url("data:image/svg+xml,%3Csvg width='20' height='20' viewBox='0 0 20 20' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='10' cy='10' r='10' fill='%23EDEFF5'/%3E%3Cpath d='M9.9986 14.2857C12.3655 14.2857 14.2843 12.3669 14.2843 10C14.2843 7.63307 12.3655 5.71429 9.9986 5.71429C7.63167 5.71429 5.71289 7.63307 5.71289 10C5.71289 12.3669 7.63167 14.2857 9.9986 14.2857Z' stroke='%238E94A7' stroke-miterlimit='10'/%3E%3Cpath d='M10 7.5V10H12.5' stroke='%238E94A7' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A"); background-repeat: no-repeat; background-position: top center; position: relative; - z-index: 1; - top: 30px; + z-index: 2; + top: 15px; } .contractStatus_modal .single_status > div > span:before { content: ""; @@ -5502,7 +5683,7 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block .block_body .fines_ position: absolute; width: 0px; height: auto; - border: 1px dashed #5FB158; + border: 1px dashed #EDEFF5; top: 20px; bottom: -20px; left: 0; @@ -5516,7 +5697,7 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block .block_body .fines_ height: 0; border-left: 3px solid transparent; border-right: 3px solid transparent; - border-top: 5px solid #5FB158; + border-top: 5px solid #EDEFF5; position: absolute; top: -5px; left: 0; @@ -5527,14 +5708,91 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block .block_body .fines_ display: none; } .contractStatus_modal .single_status > div:last-child span:before { + content: ""; + display: block; + position: absolute; + width: 0px; + height: auto; + border: 1px dashed #EDEFF5; + top: 20px; + bottom: -20px; + left: 0; + right: 0; + margin: auto; + z-index: -1; bottom: 0; } +@media all and (max-width: 768px) { + .contractStatus_modal .single_status > div:first-child { + padding-top: 25px; + } + .contractStatus_modal .single_status > div:first-child > p:first-child { + width: 100%; + position: absolute; + top: 0; + padding: 0; + } +} .contractStatus_modal .single_status > div:not(:first-child) > p:first-child { visibility: hidden; } +@media all and (max-width: 768px) { + .contractStatus_modal .single_status > div:not(:first-child) > p:first-child { + display: none; + } +} .contractStatus_modal .single_status > div:not(.current) img { filter: grayscale(1); } +.contractStatus_modal .single_status > div.current { + /* + &~div { + > span { + //background-image: url("data:image/svg+xml,%3Csvg width='12' height='12' viewBox='0 0 12 12' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M6.00056 10.2858C8.36749 10.2858 10.2863 8.367 10.2863 6.00007C10.2863 3.63313 8.36749 1.71436 6.00056 1.71436C3.63362 1.71436 1.71484 3.63313 1.71484 6.00007C1.71484 8.367 3.63362 10.2858 6.00056 10.2858Z' stroke='%238E94A7' stroke-miterlimit='10'/%3E%3Cpath d='M6 3.5V6H8.5' stroke='%238E94A7' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A"); + background-repeat: no-repeat; + background-position: top center; + + &:before { + border-color: #2F80ED; + } + + &:after { + border-top-color: #2F80ED; + } + } + + i { + //&.status_1 { + // background: url("/assets/images/status/1_inactive.svg") no-repeat center; + //} + + //&.status_2 { + // background: url("/assets/images/status/2_inactive.svg") no-repeat center; + //} + + //&.status_3 { + // background: url("/assets/images/status/3_inactive.svg") no-repeat center; + //} + + //&.status_4 { + // background: url("/assets/images/status/4_inactive.svg") no-repeat center; + //} + + //&.status_5 { + // background: url("/assets/images/status/5_inactive.svg") no-repeat center; + //} + + //&.status_6 { + // background: url("/assets/images/status/6_inactive.svg") no-repeat center; + //} + + //&.status_7 { + // background: url("/assets/images/status/7_inactive.svg") no-repeat center; + //} + } + } + */ +} .contractStatus_modal .single_status > div.current > span { background-image: url("data:image/svg+xml,%3Csvg width='20' height='20' viewBox='0 0 20 20' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='10' cy='10' r='10' fill='%232F80ED'/%3E%3Cpath d='M9.99888 13.9286C12.1686 13.9286 13.9275 12.1697 13.9275 9.99998C13.9275 7.83029 12.1686 6.07141 9.99888 6.07141C7.82919 6.07141 6.07031 7.83029 6.07031 9.99998C6.07031 12.1697 7.82919 13.9286 9.99888 13.9286Z' stroke='white' stroke-miterlimit='10'/%3E%3Cpath d='M10 10L11.7678 8.23224' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M8.92773 4.64282H11.0706' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A"); background-repeat: no-repeat; @@ -5543,51 +5801,35 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block .block_body .fines_ .contractStatus_modal .single_status > div.current > span:before { border-color: #2F80ED; } -.contractStatus_modal .single_status > div.current ~ div > span { - background-image: url("data:image/svg+xml,%3Csvg width='20' height='20' viewBox='0 0 20 20' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='10' cy='10' r='10' fill='%23EDEFF5'/%3E%3Cpath d='M9.9986 14.2857C12.3655 14.2857 14.2843 12.3669 14.2843 10C14.2843 7.63307 12.3655 5.71429 9.9986 5.71429C7.63167 5.71429 5.71289 7.63307 5.71289 10C5.71289 12.3669 7.63167 14.2857 9.9986 14.2857Z' stroke='%238E94A7' stroke-miterlimit='10'/%3E%3Cpath d='M10 7.5V10H12.5' stroke='%238E94A7' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A"); - background-repeat: no-repeat; - background-position: top center; -} -.contractStatus_modal .single_status > div.current ~ div > span:before { - border-color: var(--inactive, #EDEFF5); -} -.contractStatus_modal .single_status > div.current ~ div > span:after { - border-top-color: var(--inactive, #EDEFF5); -} -.contractStatus_modal .single_status > div.current ~ div i { - /* - &.status_1 { - background: url("/assets/images/status/1_inactive.svg") no-repeat center; - } - - &.status_2 { - background: url("/assets/images/status/2_inactive.svg") no-repeat center; - } - - &.status_3 { - background: url("/assets/images/status/3_inactive.svg") no-repeat center; - } - - &.status_4 { - background: url("/assets/images/status/4_inactive.svg") no-repeat center; - } - - &.status_5 { - background: url("/assets/images/status/5_inactive.svg") no-repeat center; - } - - &.status_6 { - background: url("/assets/images/status/6_inactive.svg") no-repeat center; - } - - &.status_7 { - background: url("/assets/images/status/7_inactive.svg") no-repeat center; - } - */ +.contractStatus_modal .single_status > div.current > span:after { + border-top-color: #2F80ED; } .contractStatus_modal .single_status > div.current + div span:after { border-top-color: #2F80ED; } +.contractStatus_modal .single_status > div.done { + /* + &~div { + > span { + &:before { + border-color: #5FB158; + } + } + } + */ +} +.contractStatus_modal .single_status > div.done > span { + background-image: url("data:image/svg+xml,%3Csvg width='20' height='20' viewBox='0 0 20 20' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='10' cy='10' r='10' fill='%235FB158'/%3E%3Cpath d='M13.9277 7.5L8.92773 12.4998L6.42773 10' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); +} +.contractStatus_modal .single_status > div.done > span:before { + border-color: #5FB158; +} +.contractStatus_modal .single_status > div.done > span:after { + border-top-color: #5FB158; +} +.contractStatus_modal .single_status > div.done + div span:after { + border-top-color: #5FB158; +} .contractStatus_modal .single_status > div .toggle_status { margin: auto; gap: 0 8px; @@ -5602,21 +5844,273 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block .block_body .fines_ width: 100%; display: block; } +.contractStatus_modal .single_status > div .status_body.with_footer .wrap { + padding-bottom: 0px; + border: 0px; +} .contractStatus_modal .single_status > div .status_body .status_header { + -webkit-user-select: none; + -ms-user-select: none; + user-select: none; display: flex; align-items: center; justify-content: flex-start; gap: 0 30px; - padding: 15px 0; + padding: 0px 0; + position: relative; + cursor: pointer; +} +@media all and (max-width: 920px) { + .contractStatus_modal .single_status > div .status_body .status_header { + gap: 0 12px; + font-size: 12px; + min-height: 50px; + } +} +@media all and (max-width: 768px) { + .contractStatus_modal .single_status > div .status_body .status_header { + flex-wrap: wrap; + height: auto; + } +} +.contractStatus_modal .single_status > div .status_body .status_header .background { + background-color: #edeff5; + position: absolute; + left: -65px; + top: 0px; + width: calc(100% + 65px); + height: 50px; + z-index: 1; +} +@media all and (max-width: 920px) { + .contractStatus_modal .single_status > div .status_body .status_header .background { + left: 0; + } +} +@media all and (max-width: 768px) { + .contractStatus_modal .single_status > div .status_body .status_header .background { + left: -48px; + width: calc(100% + 96px); + } +} +.contractStatus_modal .single_status > div .status_body .status_header i { + z-index: 2; + white-space: nowrap; + min-width: 40px; +} +@media all and (max-width: 768px) { + .contractStatus_modal .single_status > div .status_body .status_header i { + display: none; + } +} +.contractStatus_modal .single_status > div .status_body .status_header p { + z-index: 2; + white-space: nowrap; +} +@media all and (max-width: 768px) { + .contractStatus_modal .single_status > div .status_body .status_header p { + max-width: calc(100% - 70px); + white-space: unset; + width: 100%; + } +} +.contractStatus_modal .single_status > div .status_body .status_header .buttons { + z-index: 2; + width: 100%; + display: flex; + justify-content: flex-end; + padding-right: 4px; +} +@media all and (max-width: 768px) { + .contractStatus_modal .single_status > div .status_body .status_header .buttons { + justify-content: flex-start; + width: 100%; + margin-top: 10px; + } +} +.contractStatus_modal .single_status > div .status_body .status_header .button_arrow { + min-width: 50px; + height: 50px; + display: flex; + justify-content: center; + align-items: center; + z-index: 2; + margin-left: -30px; +} +@media all and (max-width: 920px) { + .contractStatus_modal .single_status > div .status_body .status_header .button_arrow { + margin-left: -12px; + } +} +.contractStatus_modal .single_status > div .status_body .status_header .button_arrow .icon { + width: 18px; + height: 18px; +} +.contractStatus_modal .single_status > div .status_body .status_header .button_arrow .down { + background-image: url("data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M14.625 6.75L9 12.375L3.375 6.75' stroke='%238E94A7' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); +} +.contractStatus_modal .single_status > div .status_body .status_header .button_arrow .up { + background-image: url("data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M3.375 11.25L9 5.625L14.625 11.25' stroke='%238E94A7' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); +} +.contractStatus_modal .single_status > div .status_body .status_footer { + display: flex; + align-items: center; + justify-content: flex-start; + gap: 0 30px; + padding: 0px 0; + position: relative; + cursor: pointer; + border-bottom: solid var(--inactive); + padding-bottom: 30px; + margin-bottom: 30px; +} +@media all and (max-width: 920px) { + .contractStatus_modal .single_status > div .status_body .status_footer { + gap: 0 12px; + font-size: 12px; + min-height: 50px; + } +} +@media all and (max-width: 768px) { + .contractStatus_modal .single_status > div .status_body .status_footer { + flex-wrap: wrap; + height: auto; + } +} +.contractStatus_modal .single_status > div .status_body .status_footer .background { + background-color: #edeff5; + position: absolute; + left: -65px; + top: 0px; + width: calc(100% + 65px); + height: 50px; + z-index: 1; +} +@media all and (max-width: 920px) { + .contractStatus_modal .single_status > div .status_body .status_footer .background { + left: 0; + } +} +@media all and (max-width: 768px) { + .contractStatus_modal .single_status > div .status_body .status_footer .background { + left: -48px; + width: calc(100% + 96px); + } +} +.contractStatus_modal .single_status > div .status_body .status_footer i { + z-index: 2; + white-space: nowrap; + min-width: 40px; +} +@media all and (max-width: 768px) { + .contractStatus_modal .single_status > div .status_body .status_footer i { + display: none; + } +} +.contractStatus_modal .single_status > div .status_body .status_footer p { + z-index: 2; + white-space: nowrap; +} +@media all and (max-width: 768px) { + .contractStatus_modal .single_status > div .status_body .status_footer p { + max-width: calc(100% - 70px); + white-space: unset; + width: 100%; + } +} +.contractStatus_modal .single_status > div .status_body .status_footer .buttons { + z-index: 2; + width: 100%; + display: flex; + justify-content: flex-end; + padding-right: 4px; +} +@media all and (max-width: 768px) { + .contractStatus_modal .single_status > div .status_body .status_footer .buttons { + justify-content: flex-start; + width: 100%; + margin-top: 10px; + } +} +.contractStatus_modal .single_status > div .status_body .status_footer .button_arrow { + min-width: 50px; + height: 50px; + display: flex; + justify-content: center; + align-items: center; + z-index: 2; + margin-left: -30px; +} +@media all and (max-width: 920px) { + .contractStatus_modal .single_status > div .status_body .status_footer .button_arrow { + margin-left: -12px; + } +} +.contractStatus_modal .single_status > div .status_body .status_footer .button_arrow .icon { + width: 18px; + height: 18px; +} +.contractStatus_modal .single_status > div .status_body .status_footer .button_arrow .down { + background-image: url("data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M14.625 6.75L9 12.375L3.375 6.75' stroke='%238E94A7' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); +} +.contractStatus_modal .single_status > div .status_body .status_footer .button_arrow .up { + background-image: url("data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M3.375 11.25L9 5.625L14.625 11.25' stroke='%238E94A7' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); } .contractStatus_modal .single_status > div .status_body .header { visibility: visible !important; } .contractStatus_modal .single_status > div .status_body .wrap { - margin-top: 10px; - padding-bottom: 40px; + margin-top: 25px; + padding-bottom: 25px; border-bottom: 1px solid var(--inactive, #EDEFF5); } +@media all and (max-width: 920px) { + .contractStatus_modal .single_status > div .status_body .wrap { + margin-top: 15px; + padding-bottom: 15px; + } +} +@media all and (max-width: 768px) { + .contractStatus_modal .single_status > div .status_body .wrap { + margin-top: 20px; + padding-bottom: 20px; + } +} +.contractStatus_modal .single_status > div .status_body .wrap.form { + display: flex; + flex-direction: column; +} +.contractStatus_modal .single_status > div .status_body .wrap.form .block { + display: flex; + flex-direction: row; +} +@media all and (max-width: 768px) { + .contractStatus_modal .single_status > div .status_body .wrap.form .block { + display: block; + } +} +.contractStatus_modal .single_status > div .status_body .wrap.form .block .left { + width: 20%; +} +@media all and (max-width: 768px) { + .contractStatus_modal .single_status > div .status_body .wrap.form .block .left { + width: 100%; + } +} +.contractStatus_modal .single_status > div .status_body .wrap.form .block .left p { + line-height: 14px; + margin: 15px 0px 15px 0px; +} +.contractStatus_modal .single_status > div .status_body .wrap.form .block .right { + width: 80%; + padding-left: 30px; +} +@media all and (max-width: 768px) { + .contractStatus_modal .single_status > div .status_body .wrap.form .block .right { + width: 100%; + padding-left: 0; + } +} .contractStatus_modal .single_status > div .status_body .wrap input[type="checkbox"] + label { width: 16px; padding: 0; @@ -5629,8 +6123,39 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block .block_body .fines_ font-weight: 400; } .contractStatus_modal .single_status > div .status_body .wrap .single_text { - max-width: 565px; - margin: auto; + padding-top: 20px; + padding-left: 20px; + padding-bottom: 10px; +} +.contractStatus_modal .single_status > div .status_body .wrap .single_text p { + display: flex; + color: #8E94A7; + margin-right: 20%; + padding-top: 0px; + padding-left: 40px; + position: relative; +} +@media all and (max-width: 768px) { + .contractStatus_modal .single_status > div .status_body .wrap .single_text p { + margin-right: 0; + padding-top: 0; + line-height: 15px; + } +} +.contractStatus_modal .single_status > div .status_body .wrap .single_text p:before { + content: ""; + display: block; + width: 40px; + min-height: 40px; + height: 40px; + min-width: 40px; + margin-top: -20px; + position: absolute; + left: -10px; + top: 50%; + background-image: url("data:image/svg+xml,%3Csvg width='40' height='40' viewBox='0 0 40 40' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='40' height='40' rx='8' fill='%232F80ED' fill-opacity='0.1'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M20 29C24.9706 29 29 24.9706 29 20C29 15.0294 24.9706 11 20 11C15.0294 11 11 15.0294 11 20C11 24.9706 15.0294 29 20 29ZM21 14.5C21 13.9477 20.5523 13.5 20 13.5C19.4477 13.5 19 13.9477 19 14.5V19.75C19 20.4404 19.5596 21 20.25 21H23.5C24.0523 21 24.5 20.5523 24.5 20C24.5 19.4477 24.0523 19 23.5 19H21V14.5Z' fill='%232F80ED'/%3E%3C/svg%3E"); +} +@media all and (max-width: 768px) { } .contractStatus_modal .single_status > div .status_body .wrap table { font-size: 12px; @@ -5639,19 +6164,12 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block .block_body .fines_ } .contractStatus_modal .single_status > div .status_body .wrap table td, .contractStatus_modal .single_status > div .status_body .wrap table th { - border: 1px solid rgba(0, 0, 0, 0.17); + border: solid 1px #EDEFF5; + border-collapse: collapse; padding: 13px; text-align: left; vertical-align: middle; } -.contractStatus_modal .single_status > div .status_body .wrap table td:not(:last-child), -.contractStatus_modal .single_status > div .status_body .wrap table th:not(:last-child) { - border-right: 0; -} -.contractStatus_modal .single_status > div .status_body .wrap table td:not(:first-child), -.contractStatus_modal .single_status > div .status_body .wrap table th:not(:first-child) { - border-left: 0; -} .contractStatus_modal .single_status > div .status_body .wrap table td:nth-child(3), .contractStatus_modal .single_status > div .status_body .wrap table td:nth-child(4) { white-space: nowrap; @@ -5669,10 +6187,123 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block .block_body .fines_ .contractStatus_modal .single_status > div .status_body .wrap table .i-pdf span { font-weight: 400; } +@media all and (max-width: 920px) { + .contractStatus_modal .single_status > div .status_body .wrap table.deal_offers_table label[data-text] { + height: auto; + width: 100%; + display: flex; + align-items: center; + min-height: 16px; + } + .contractStatus_modal .single_status > div .status_body .wrap table.deal_offers_table label[data-text]:before { + position: relative; + order: 2; + margin-left: auto; + margin-right: calc(50% - 16px); + } + .contractStatus_modal .single_status > div .status_body .wrap table.deal_offers_table label[data-text]:after { + content: attr(data-text); + order: 1; + display: block; + padding-top: 0; + width: 50%; + } +} +@media all and (max-width: 920px) { + .contractStatus_modal .single_status > div .status_body .wrap table.deal_offers_table thead { + display: none; + } + .contractStatus_modal .single_status > div .status_body .wrap table.deal_offers_table tbody { + display: block; + } + .contractStatus_modal .single_status > div .status_body .wrap table.deal_offers_table tr { + display: block; + position: relative; + padding-left: 0; + } + .contractStatus_modal .single_status > div .status_body .wrap table.deal_offers_table td { + display: block; + padding: 8px; + } + .contractStatus_modal .single_status > div .status_body .wrap table.deal_offers_table td:first-child:not(:empty) { + box-sizing: border-box; + background: #fff; + } + .contractStatus_modal .single_status > div .status_body .wrap table.deal_offers_table td:first-child:not(:empty) .form_field { + display: flex; + width: 100%; + } + .contractStatus_modal .single_status > div .status_body .wrap table.deal_offers_table td:not(:last-child) { + border-bottom: 0; + } + .contractStatus_modal .single_status > div .status_body .wrap table.deal_offers_table td:empty { + display: none; + } + .contractStatus_modal .single_status > div .status_body .wrap table.deal_offers_table td[data-title] { + display: flex; + } + .contractStatus_modal .single_status > div .status_body .wrap table.deal_offers_table td[data-title]:before { + content: attr(data-title); + color: var(--text_not_active); + font-size: 12px; + font-style: normal; + font-weight: 700; + line-height: 120%; + width: 100%; + display: block; + width: 50%; + min-width: 50%; + } + .contractStatus_modal .single_status > div .status_body .wrap table.deal_offers_table .docs_list .row .doc_name span { + width: 100%; + } +} +@media all and (max-width: 768px) { + .contractStatus_modal .single_status > div .status_body .wrap table.deal_offers_table thead { + display: none; + } + .contractStatus_modal .single_status > div .status_body .wrap table.deal_offers_table tbody { + display: block; + } + .contractStatus_modal .single_status > div .status_body .wrap table.deal_offers_table tr { + display: block; + position: relative; + padding-right: 0; + padding-left: 0; + } + .contractStatus_modal .single_status > div .status_body .wrap table.deal_offers_table td { + display: block; + padding: 8px; + } + .contractStatus_modal .single_status > div .status_body .wrap table.deal_offers_table td:not(:last-child) { + border-bottom: 0; + } + .contractStatus_modal .single_status > div .status_body .wrap table.deal_offers_table td:empty { + display: none; + } + .contractStatus_modal .single_status > div .status_body .wrap table.deal_offers_table td label[data-text]:before { + margin-right: 0; + } + .contractStatus_modal .single_status > div .status_body .wrap table.deal_offers_table td[data-title]:before { + content: attr(data-title); + color: var(--text_not_active); + font-size: 12px; + font-style: normal; + font-weight: 700; + line-height: 120%; + width: 100%; + display: block; + margin-bottom: 5px; + } + .contractStatus_modal .single_status > div .status_body .wrap table.deal_offers_table .docs_list .row .doc_name span { + width: 100%; + } +} .contractStatus_modal .single_status > div .status_body .wrap .message { display: flex; align-items: center; padding: 10px; + padding-left: 0px; } .contractStatus_modal .single_status > div .status_body .wrap .message:before { content: ""; @@ -5734,7 +6365,7 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block .block_body .fines_ .contractStatus_modal .single_status > div .status_body .wrap .block-column { margin-bottom: 60px; } -.contractStatus_modal .single_status > div .status_body .wrap .dosc_list a { +.contractStatus_modal .single_status > div .status_body .wrap .docs_list a { text-decoration: none; } .contractStatus_modal .single_status > div .status_body .wrap .acts_list-checkbox label { @@ -5750,6 +6381,15 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block .block_body .fines_ justify-content: flex-end; gap: 0 20px; } +@media all and (max-width: 920px) { + .contractStatus_modal .single_status > div .status_body .wrap .block_footer_btn { + flex-wrap: wrap; + gap: 10px 0; + } + .contractStatus_modal .single_status > div .status_body .wrap .block_footer_btn button { + width: 100%; + } +} .contractStatus_modal .single_status > div .status_body .wrap .flex-start { justify-content: flex-start; } @@ -5778,6 +6418,199 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block .block_body .fines_ background-image: url("data:image/svg+xml,%3Csvg width='36' height='36' viewBox='0 0 36 36' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M28.1241 31.5H7.87305C7.57468 31.5 7.28853 31.3815 7.07755 31.1705C6.86657 30.9595 6.74805 30.6734 6.74805 30.375V5.625C6.74805 5.32663 6.86657 5.04048 7.07755 4.82951C7.28853 4.61853 7.57468 4.5 7.87305 4.5H21.3741L29.2491 12.375V30.375C29.2491 30.5227 29.22 30.669 29.1635 30.8055C29.107 30.942 29.0241 31.066 28.9196 31.1705C28.8152 31.275 28.6912 31.3578 28.5547 31.4144C28.4182 31.4709 28.2719 31.5 28.1241 31.5Z' stroke='%231C01A9' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M21.375 4.5V12.375H29.2511' stroke='%231C01A9' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M14.625 21.375H21.375' stroke='%231C01A9' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M18 18V24.75' stroke='%231C01A9' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A"); background-repeat: no-repeat; } +.contractStatus_modal .single_status > div .status_body .documents { + display: flex; + flex-direction: column; + grid-gap: 10px 0px; + margin-bottom: 30px; +} +.contractStatus_modal .single_status > div .status_body .documents:last-child { + margin-bottom: 0; +} +.contractStatus_modal .single_status > div .status_body .documents .document { + width: 100%; + display: flex; + flex-direction: row; +} +@media all and (max-width: 1279px) { + .contractStatus_modal .single_status > div .status_body .documents .document { + flex-wrap: wrap; + } +} +.contractStatus_modal .single_status > div .status_body .documents .document .icon { + margin-top: 5px; + display: flex; + align-items: center; + justify-content: center; + width: 56px; + height: 56px; + min-width: 56px; + min-height: 56px; + position: relative; + background: url(/assets/images/icons/icon-file.svg) no-repeat left center; + background-size: contain; + padding: 0; + zoom: 0.65; +} +.contractStatus_modal .single_status > div .status_body .documents .document .icon .extension { + font-weight: 600; + font-size: 12px; + color: #fff; +} +@media all and (max-width: 768px) { + .contractStatus_modal .single_status > div .status_body .documents .document .icon { + width: 28px; + height: 28px; + min-width: 28px; + min-height: 28px; + } + .contractStatus_modal .single_status > div .status_body .documents .document .icon .extension { + font-size: 8px; + } +} +.contractStatus_modal .single_status > div .status_body .documents .document .icon.formal { + background-image: url("data:image/svg+xml,%3Csvg width='26' height='28' viewBox='0 0 26 28' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M2 3.5C2 1.84315 3.34315 0.5 5 0.5H18.3701L20.7774 4L23.1848 7.06354V24.5C23.1848 26.1569 21.8417 27.5 20.1848 27.5H5C3.34314 27.5 2 26.1569 2 24.5V3.5Z' fill='%231C01A9'/%3E%3Cpath opacity='0.4' d='M23.1858 11.5V7L19.334 6.5L23.1858 11.5Z' fill='%230C0C0C'/%3E%3Cline y1='-0.5' x2='11.5553' y2='-0.5' transform='matrix(1 -9.89866e-05 0.000132759 1 6.81445 7.50098)' stroke='%23F0F0F0'/%3E%3Cline y1='-0.5' x2='11.5553' y2='-0.5' transform='matrix(1 -9.89866e-05 0.000132759 1 6.81445 12.501)' stroke='%23F0F0F0'/%3E%3Cline y1='-0.5' x2='11.5553' y2='-0.5' transform='matrix(1 -9.89866e-05 0.000132759 1 6.81445 17.501)' stroke='%23F0F0F0'/%3E%3Cline y1='-0.5' x2='11.5553' y2='-0.5' transform='matrix(1 -9.89866e-05 0.000132759 1 6.81445 22.501)' stroke='%23F0F0F0'/%3E%3Cpath d='M23.1858 7H19.3711C18.8188 7 18.3711 6.55228 18.3711 6V3.5V0.5L23.1858 7Z' fill='%232F80ED'/%3E%3C/svg%3E"); +} +.contractStatus_modal .single_status > div .status_body .documents .document .title { + display: flex; + flex-direction: column; +} +.contractStatus_modal .single_status > div .status_body .documents .document .title p { + font-weight: 600; + margin-left: 16px; +} +@media all and (max-width: 768px) { + .contractStatus_modal .single_status > div .status_body .documents .document .title p { + margin-left: 0; + } +} +@media all and (max-width: 1279px) { + .contractStatus_modal .single_status > div .status_body .documents .document .title { + width: calc(100% - 56px); + } +} +@media all and (max-width: 768px) { + .contractStatus_modal .single_status > div .status_body .documents .document .title { + margin-left: 12px; + } +} +.contractStatus_modal .single_status > div .status_body .documents .document .description { + display: flex; + flex-direction: row; +} +.contractStatus_modal .single_status > div .status_body .documents .document .description span { + font-weight: 300; + margin-left: 16px; + margin-top: 2px; + color: #8e94a7; +} +@media all and (max-width: 768px) { + .contractStatus_modal .single_status > div .status_body .documents .document .description span { + margin-left: 0; + margin-right: 10px; + } +} +.contractStatus_modal .single_status > div .status_body .documents .document .actions { + display: flex; + flex: 1; + gap: 0px 0px; + flex-direction: row; + justify-content: flex-end; + align-items: center; +} +@media all and (max-width: 1279px) { + .contractStatus_modal .single_status > div .status_body .documents .document .actions { + flex: auto; + width: 100%; + flex-wrap: wrap; + padding-left: 50px !important; + } +} +@media all and (max-width: 768px) { + .contractStatus_modal .single_status > div .status_body .documents .document .actions { + padding-left: 30px !important; + justify-content: flex-start; + gap: 0 12px; + } +} +.contractStatus_modal .single_status > div .status_body .documents .document .actions button { + white-space: nowrap; +} +@media all and (max-width: 1279px) { + .contractStatus_modal .single_status > div .status_body .documents .document .actions button { + order: 1; + padding: 0; + justify-content: flex-start; + width: 100%; + } +} +.contractStatus_modal .single_status > div .status_body .documents .document .actions .status { + display: flex; + align-items: center; + flex-direction: row; + background-color: #2F80ED; + gap: 0px 16px; + padding: 0px 16px; +} +@media all and (max-width: 1279px) { + .contractStatus_modal .single_status > div .status_body .documents .document .actions .status { + width: 100%; + order: 2; + } +} +.contractStatus_modal .single_status > div .status_body .documents .document .actions .status .status_icon { + min-width: 24px; + min-height: 24px; + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='25' height='24' viewBox='0 0 25 24' fill='none'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M12.9766 21C17.9471 21 21.9766 16.9706 21.9766 12C21.9766 7.02944 17.9471 3 12.9766 3C8.006 3 3.97656 7.02944 3.97656 12C3.97656 16.9706 8.006 21 12.9766 21ZM13.9766 6.5C13.9766 5.94772 13.5288 5.5 12.9766 5.5C12.4243 5.5 11.9766 5.94772 11.9766 6.5V11.75C11.9766 12.4404 12.5362 13 13.2266 13H16.4766C17.0288 13 17.4766 12.5523 17.4766 12C17.4766 11.4477 17.0288 11 16.4766 11H13.9766V6.5Z' fill='white'/%3E%3C/svg%3E"); +} +.contractStatus_modal .single_status > div .status_body .documents .document .actions .status span { + font-weight: 300; + color: #fff; + white-space: nowrap; +} +@media all and (max-width: 1279px) { + .contractStatus_modal .single_status > div .status_body .documents .document .actions .status span { + white-space: inherit; + line-height: 1.25; + padding: 5px 0; + } +} +.contractStatus_modal .single_status > div .status_body .documents .document .wide { + justify-content: space-between; + padding-left: 64px; +} +.contractStatus_modal .single_status > div .status_body .documents .empty { + margin: 12px 0px 15px 0px; + color: #8e94a7; +} +.contractStatus_modal .bottom_button_close { + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; + padding: 18px 54px 18px 54px; + margin-left: 82px; + width: fit-content; + gap: 12px; + cursor: pointer; +} +.contractStatus_modal .bottom_button_close span { + font-weight: 600; + color: #1C01A9; +} +.contractStatus_modal .bottom_button_close .icon { + width: 16px; + height: 16px; + background-image: url("data:image/svg+xml,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M3 10L8 5L13 10' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); +} +@media all and (max-width: 920px) { + .contractStatus_modal .bottom_button_close { + margin-left: 0; + padding: 0; + margin-top: 15px; + margin-bottom: 25px; + } +} .all_contracts_modal .contractStatus_list .list_item .step { width: 50%; gap: 0 16px; @@ -5816,3 +6649,502 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block .block_body .fines_ .all_contracts_modal .contractStatus_list .list_item div:last-child p { color: var(--blue); } +.horizontal_dropzone_wrapper { + margin: 0px; + padding: 30px; + height: 100px; +} +@media all and (max-width: 920px) { + .horizontal_dropzone_wrapper { + padding: 15px; + } +} +@media all and (max-width: 768px) { + .horizontal_dropzone_wrapper { + height: auto; + } +} +.horizontal_dropzone_wrapper.disabled { + filter: grayscale(1); + opacity: 0.25; +} +.horizontal_dropzone_wrapper .horizontal_dropzone_inner { + display: flex; + width: 100%; + max-width: 80%; + gap: 20px; +} +@media all and (max-width: 920px) { + .horizontal_dropzone_wrapper .horizontal_dropzone_inner { + max-width: 100%; + gap: 0 12px; + } +} +@media all and (max-width: 768px) { + .horizontal_dropzone_wrapper .horizontal_dropzone_inner { + flex-wrap: wrap; + } +} +.horizontal_dropzone_wrapper .horizontal_dropzone_inner p { + text-align: left; + margin: 0px; +} +.horizontal_dropzone_wrapper .horizontal_dropzone_inner label { + white-space: nowrap; +} +@media all and (max-width: 768px) { + .horizontal_dropzone_wrapper .horizontal_dropzone_inner label { + margin-top: 15px; + } +} +.horizontal_dropzone_files { + display: flex; + flex-direction: column; + grid-gap: 10px 0px; + margin-bottom: 30px; +} +.horizontal_dropzone_files .file { + display: flex; + flex-direction: row; +} +.horizontal_dropzone_files .file .delete { + margin-left: 0px; + padding-right: 16px; + padding-top: 10px; + cursor: pointer; + width: 30px; + min-width: 30px; + padding-left: 3px; +} +.horizontal_dropzone_files .file .delete .icon { + width: 16px; + height: 16px; + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16' fill='none'%3E%3Cpath d='M8 14C11.3137 14 14 11.3137 14 8C14 4.68629 11.3137 2 8 2C4.68629 2 2 4.68629 2 8C2 11.3137 4.68629 14 8 14Z' fill='%23ED0A34' stroke='%23ED0A34' stroke-miterlimit='10'/%3E%3Cpath d='M10 6L6 10' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M10 10L6 6' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); +} +.horizontal_dropzone_files .file .loading { + width: 30px; + min-width: 30px; +} +.horizontal_dropzone_files .file .loading .success { + width: 24px; + min-width: 24px; + height: 30px; + min-height: 30px; + background-image: url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 21C16.9706 21 21 16.9706 21 12C21 7.02944 16.9706 3 12 3C7.02944 3 3 7.02944 3 12C3 16.9706 7.02944 21 12 21Z' stroke='%235FB158' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M16.125 9.75L10.625 15L7.875 12.375' stroke='%235FB158' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A"); + background-repeat: no-repeat; + background-position: center; + background-position-y: 6px; +} +.horizontal_dropzone_files .file .doc_icon { + display: flex; + align-items: center; + justify-content: center; + width: 56px; + height: 56px; + min-width: 56px; + min-height: 56px; + position: relative; + background: url(/assets/images/icons/icon-file.svg) no-repeat left center; + background-size: contain; + padding: 0; + zoom: 0.65; +} +.horizontal_dropzone_files .file .doc_icon .extension { + font-weight: 600; + font-size: 12px; + color: #fff; +} +.horizontal_dropzone_files .file .title { + display: flex; + flex-direction: column; +} +.horizontal_dropzone_files .file .title span:nth-child(odd) { + font-weight: 600; + margin-left: 16px; +} +.horizontal_dropzone_files .file .title span:nth-child(even) { + font-weight: 300; + margin-left: 16px; +} +.horizontal_dropzone_files .file .description { + display: block; + font-weight: 400; + margin-top: 2px; + color: #8e94a7; +} +.horizontal_dropzone_files_wrapper { + width: 100%; + display: flex; + flex-direction: column; + gap: 0px 20px; + padding: 15px 0px; +} +.horizontal_dropzone_files_wrapper .horizontal_dropzone_files_item { + width: 100%; +} +.horizontal_dropzone_files_error { + padding-bottom: 15px; + position: relative; +} +.horizontal_dropzone_files_error .switch { + cursor: pointer; + position: absolute; + top: 0; + right: 0; + width: 50px; + height: 50px; + background: url("data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M14.625 6.75L9 12.375L3.375 6.75' stroke='%238E94A7' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") no-repeat center; + z-index: 2; + transform: rotate(180deg); +} +.horizontal_dropzone_files_error .switch.up { + transform: rotate(0deg); +} +.horizontal_dropzone_files_comment { + background: rgba(131, 3, 84, 0.1); + padding: 15px 25px; + display: flex; + flex-direction: column; +} +.horizontal_dropzone_files_comment .title { + font-weight: 600; +} +.horizontal_dropzone_files_comment.closed { + background: #edeff5; +} +.deals_contracts { + display: flex; + flex-direction: column; +} +.deals_contracts label { + height: 16px !important; + min-height: 16px !important; +} +.deals_contracts label::before { + margin-top: 18px; +} +.deals_contracts .info { + margin-left: 72px; + display: flex; + flex-direction: row; + grid-gap: 10px 10px; +} +.edo_banner .title { + display: flex; + gap: 0px 10px; +} +.edo_banner .info { + cursor: pointer; + margin-left: 80px; +} +.edo_banner .info:after { + content: ""; + display: inline-block; + margin-left: 5px; + width: 10px; + height: 10px; + background-size: contain; + background-image: url("data:image/svg+xml,%3Csvg width='10' height='10' viewBox='0 0 10 10' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0.25' y='2.25' width='6.5' height='7.5' rx='0.75' fill='white' stroke='%230C0C0C' stroke-width='0.5'/%3E%3Crect x='3.25' y='0.25' width='6.5' height='7.5' rx='0.75' fill='white' stroke='%230C0C0C' stroke-width='0.5'/%3E%3C/svg%3E"); +} +.edo_banner .buttons { + display: flex; + gap: 0px 20px; + margin-left: 80px; + height: fit-content !important; +} +.edo_banner .buttons a { + margin-top: 10px; +} +@media all and (max-width: 1279px) { + .edo_banner .info { + margin-left: 0px; + } + .edo_banner .buttons { + flex-direction: column; + margin-left: 0px; + } +} +.edo_detail p { + margin: 0px; +} +.edo_detail .list_title { + font-weight: 700 !important; + margin-bottom: 15px; + font-size: 15px; + line-height: 23px; +} +.edo_list_field { + display: flex; + flex-wrap: wrap; + align-items: flex-start !important; + margin-bottom: 30px; + width: 100%; + flex-direction: row; +} +@media all and (max-width: 640px) { + .edo_list_field { + flex-direction: column; + } +} +.edo_list_field label { + width: 186px; + margin-right: 12px; +} +.edo_list_field label.wide { + width: 30%; +} +.edo_list_selection { + flex: 1; + margin-top: -12px; +} +@media all and (max-width: 640px) { + .edo_list_selection { + margin-top: 20px; + } +} +.edo_list_selection .item { + width: 100%; + padding: 16px 0px; + margin: 0px !important; + border-bottom: solid 1px #edeff5; +} +.edo_list_selection .item label { + width: auto; + display: flex; + align-items: center; + margin-right: 12px; +} +.edo_list_selection .item label:first { + margin-top: 0px; +} +.edo_list_selection .item label:before { + top: 0; + bottom: 0; + margin: auto; +} +.edo_list_selection .item:first { + margin-top: 0px; +} +.edo_list_selection .item:last-child { + border-bottom: 0px; +} +.edo_sign_document { + display: flex; + flex-direction: column; + align-items: flex-start; +} +.edo_sign_document:before { + font-size: 8px; + width: 32px; + left: 0; + right: 0; + padding: 0; +} +.edo_operators_settings_list { + display: flex; + flex-direction: column; + align-items: flex-start; + gap: 15px 0px; + padding-bottom: 40px; +} +.edo_operators_settings_list_item { + margin-left: 40px; + display: flex; + flex-direction: column; + position: relative; +} +.edo_operators_settings_list_item a { + color: #8e94a7; + font-style: italic; +} +.edo_operators_settings_list_item:before { + content: ""; + position: absolute; + left: -40px; + top: -7px; + width: 24px; + min-width: 24px; + height: 30px; + min-height: 30px; + background-image: url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 21C16.9706 21 21 16.9706 21 12C21 7.02944 16.9706 3 12 3C7.02944 3 3 7.02944 3 12C3 16.9706 7.02944 21 12 21Z' stroke='%235FB158' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M16.125 9.75L10.625 15L7.875 12.375' stroke='%235FB158' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A"); + background-repeat: no-repeat; + background-position: center; + background-position-y: 6px; +} +.edo_operators_settings_list_item.invite:before { + background-image: url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 21C16.9706 21 21 16.9706 21 12C21 7.02944 16.9706 3 12 3C7.02944 3 3 7.02944 3 12C3 16.9706 7.02944 21 12 21Z' stroke='%238E94A7' stroke-width='2' stroke-miterlimit='10'/%3E%3Cpath d='M12 6.75V12H17.25' stroke='%238E94A7' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A"); +} +.edo_sign_documents_list { + display: flex; + flex-direction: column; + margin-bottom: 50px; +} +.edo_sign_documents_document { + display: flex; + flex-direction: row; + gap: 0px 30px; + padding-top: 15px; + padding-bottom: 15px; + border-top: solid 1px #edeff5; +} +@media all and (max-width: 640px) { + .edo_sign_documents_document { + flex-direction: column; + } +} +.edo_sign_documents_document .status_icon { + width: 24px; + min-width: 24px; + height: 24px; + min-height: 24px; + background-repeat: no-repeat; + background-position: center; + background-position-y: -1px; + background-position-x: -1px; +} +.edo_sign_documents_document .status_icon.success { + background-image: url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 21C16.9706 21 21 16.9706 21 12C21 7.02944 16.9706 3 12 3C7.02944 3 3 7.02944 3 12C3 16.9706 7.02944 21 12 21Z' stroke='%235FB158' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M16.125 9.75L10.625 15L7.875 12.375' stroke='%235FB158' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A"); + border: none !important; +} +.edo_sign_documents_document .status_icon.error { + background-image: url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 21C16.9706 21 21 16.9706 21 12C21 7.02944 16.9706 3 12 3C7.02944 3 3 7.02944 3 12C3 16.9706 7.02944 21 12 21Z' stroke='%23ED0A34' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M13 16C13 16.5523 12.5523 17 12 17C11.4477 17 11 16.5523 11 16C11 15.4477 11.4477 15 12 15C12.5523 15 13 15.4477 13 16Z' fill='%23ED0A34'/%3E%3Cpath d='M12 8L12 12' stroke='%23ED0A34' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); + border: none !important; +} +.edo_sign_documents_document .status_icon.await { + background-image: url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 21C16.9706 21 21 16.9706 21 12C21 7.02944 16.9706 3 12 3C7.02944 3 3 7.02944 3 12C3 16.9706 7.02944 21 12 21Z' stroke='%238E94A7' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M12 8L12 12' stroke='%238E94A7' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M16 12L12 12' stroke='%238E94A7' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); + border: none !important; +} +.edo_sign_documents_document .status_title { + padding: 0px 10px; +} +.edo_sign_documents_document .status_title i { + display: contents; +} +.edo_sign_documents_document .edo_sign_documents_document_left { + width: 35%; +} +@media all and (max-width: 640px) { + .edo_sign_documents_document .edo_sign_documents_document_left { + width: 100%; + } +} +.edo_sign_documents_document .edo_sign_documents_document_right { + width: 65%; + display: flex; + align-items: center; + justify-content: flex-start; +} +@media all and (max-width: 640px) { + .edo_sign_documents_document .edo_sign_documents_document_right { + width: 100%; + margin-top: 20px; + margin-left: 40px; + position: relative; + padding-right: 40px; + align-items: flex-start; + } + .edo_sign_documents_document .edo_sign_documents_document_right::before { + content: ""; + position: absolute; + top: -17px; + left: -40px; + width: 40px; + height: 40px; + background: url(/assets/images/deal_contract_status_mobile_arrow.svg) no-repeat; + } +} +.edo_sign_documents_document .edo_sign_documents_document_right i { + width: 100% !important; + height: auto !important; + font-size: 12px; + padding-left: 10px; + color: #8e94a7; + align-self: center; + justify-content: center; + line-height: 16px; +} +.edo_sign_documents_document:first-child { + border: none; +} +.edo_sign_status_attorney_select { + padding-left: 10px; + width: 100%; +} +.deal_contract_sign_list { + gap: 0px 0px; +} +.deal_contract_sign_item { + padding-top: 15px; + padding-bottom: 15px; + border-top: solid 1px #edeff5; + width: 100%; + display: flex; + flex-direction: row; +} +.deal_contract_sign_item .title { + width: 35%; +} +.deal_contract_sign_item .actions { + width: 65%; + justify-content: space-between; + justify-content: flex-start !important; +} +.deal_contract_sign_item .actions .status_icon { + width: 24px; + min-width: 24px; + height: 24px; + min-height: 24px; + background-repeat: no-repeat; + background-position: center; + background-position-y: -1px; + background-position-x: -1px; +} +.deal_contract_sign_item .actions .status_icon.success { + background-image: url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 21C16.9706 21 21 16.9706 21 12C21 7.02944 16.9706 3 12 3C7.02944 3 3 7.02944 3 12C3 16.9706 7.02944 21 12 21Z' stroke='%235FB158' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M16.125 9.75L10.625 15L7.875 12.375' stroke='%235FB158' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A"); + border: none !important; +} +.deal_contract_sign_item .actions .status_icon.error { + background-image: url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 21C16.9706 21 21 16.9706 21 12C21 7.02944 16.9706 3 12 3C7.02944 3 3 7.02944 3 12C3 16.9706 7.02944 21 12 21Z' stroke='%23ED0A34' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M13 16C13 16.5523 12.5523 17 12 17C11.4477 17 11 16.5523 11 16C11 15.4477 11.4477 15 12 15C12.5523 15 13 15.4477 13 16Z' fill='%23ED0A34'/%3E%3Cpath d='M12 8L12 12' stroke='%23ED0A34' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); + border: none !important; +} +.deal_contract_sign_item .actions .status_icon.await { + background-image: url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 21C16.9706 21 21 16.9706 21 12C21 7.02944 16.9706 3 12 3C7.02944 3 3 7.02944 3 12C3 16.9706 7.02944 21 12 21Z' stroke='%238E94A7' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M12 8L12 12' stroke='%238E94A7' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M16 12L12 12' stroke='%238E94A7' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); + border: none !important; +} +.deal_contract_sign_item .actions .status_title { + padding: 0px 10px; +} +.deal_contract_sign_item .actions .status_title i { + display: contents; +} +.deal_contract_sign_item .actions.actions_with_status { + justify-content: flex-start !important; + margin-left: 15px; +} +.deal_contract_sign_item:first-child { + border: none; +} +.deal_contracts_group_item { + border-top: solid 1px #edeff5; + padding-top: 10px; + padding-bottom: 20px; +} +.deal_documents_form_group { + padding-top: 15px; + padding-bottom: 15px; + border-top: solid 1px #edeff5; +} +.checkbox_disabled label { + cursor: default !important; +} +.checkbox_disabled label:before { + filter: grayscale(); + opacity: 0.5; + cursor: default !important; +} +.offer_selection { + color: var(--blue); +} +.offer_selection:hover { + text-decoration: underline; +} diff --git a/css/main/style.less b/css/main/style.less index f5ace29..4b0a379 100644 --- a/css/main/style.less +++ b/css/main/style.less @@ -1791,7 +1791,7 @@ main { } } - .dosc_list { + .docs_list { width: calc(100% - 290px); } @@ -1811,7 +1811,7 @@ main { padding-bottom: 10px; .dropdown_block, - .dosc_list { + .docs_list { width: 100%; margin-right: 0; border: 0 !important; @@ -1834,8 +1834,6 @@ main { border-top: 1px solid #EDEFF5; } - - .block_header { padding: 15px 0; height: 70px; @@ -2657,7 +2655,7 @@ main { // Документы -.dosc_list { +.docs_list { .list_title { margin-top: 45px; font-weight: 700; @@ -2927,6 +2925,10 @@ main { display: flex; width: 100%; + @media (max-width: 1280px) { + padding-bottom: 0px !important; + } + .table_cell { padding: 16px 8px; border: 1px solid #EDEFF5; @@ -2959,6 +2961,11 @@ main { &.opened { color: var(--green); } + + @media (max-width: 1280px) { + width: 100%; + margin-top: 40px; + } } b { @@ -3994,7 +4001,7 @@ main .dropdown_blocks_list .dropdown_block .block_body { } } -.dropdown_block+.dosc_list { +.dropdown_block+.docs_list { margin-top: 20px; @media all and (max-width: 768px) { @@ -4020,7 +4027,7 @@ main .dropdown_blocks_list .dropdown_block .block_body { width: calc(100% - 160px); } - @media all and (max-width: 960px) { + @media all and (max-width: 1080px) { position: relative; bottom: 0; z-index: 2; @@ -4032,12 +4039,12 @@ main .dropdown_blocks_list .dropdown_block .block_body { margin-bottom: -80px; } - &.rate_opened { - @media all and (max-width: 360px) { - width: 100vw; - margin: 0px; - } - } + &.rate_opened { + @media all and (max-width: 360px) { + width: 100vw; + margin: 0px; + } + } .helpBox { max-width: 730px; @@ -4057,6 +4064,11 @@ main .dropdown_blocks_list .dropdown_block .block_body { top: calc(100vh - 240px); } + @media all and (max-width: 1080px) { + position: relative; + top: 0; + } + &.hidden { display: none; @@ -4146,7 +4158,7 @@ main .dropdown_blocks_list .dropdown_block .block_body { } @media all and (max-width: 960px) { - width: 100%; + // width: 100%; margin-top: 10px; } } @@ -4222,7 +4234,7 @@ main .dropdown_blocks_list .dropdown_block .block_body { margin-left: auto; margin-right: 0; /*width: 343px;*/ - width: 250px; + width: 250px; pointer-events: all; top: calc(100vh - 150px); /* tile shadow */ @@ -4231,100 +4243,108 @@ main .dropdown_blocks_list .dropdown_block .block_body { align-items: flex-end; height: 102px; - @media all and (max-width: 960px) { - //display: none; - height: 120px; + @media all and (max-width: 1080px) { + //display: none; + height: 120px; } &.opened { form { - display: flex; - flex-direction: column; - width: 100%; + display: flex; + flex-direction: column; + width: 100%; - textarea { - min-height: 160px; - } + textarea { + min-height: 160px; + } - button { - align-self: center; - } + button { + align-self: center; + } - animation: rate_form 0.25s normal forwards ease-in-out; - } - width: 350px; -// height: 400px; - .rate_body { - overflow: hidden; - //height: 450px; + animation: rate_form 0.25s normal forwards ease-in-out; + } - animation: rate_body_opened 0.25s normal forwards ease-in-out; + width: 350px; - &.completed { - align-items: center; - justify-content: center; + // height: 400px; + .rate_body { + overflow: hidden; + //height: 450px; - animation: rate_body_shrink 0.25s normal forwards ease-in-out; - } + animation: rate_body_opened 0.25s normal forwards ease-in-out; - @media all and (max-width: 360px) { - width: 100vw; - margin: 0px; - } - } - animation: rate_opened 0.25s normal forwards ease-in-out; - } + &.completed { + align-items: center; + justify-content: center; - @keyframes rate_opened { - from { - width: 250px; - } - to { - width: 350px; - } - } + animation: rate_body_shrink 0.25s normal forwards ease-in-out; + } - @keyframes rate_body_opened { - from { - height: 110px; - } - to { - height: 450px; - } - } + @media all and (max-width: 360px) { + width: 100vw; + margin: 0px; + } + } - @keyframes rate_body_shrink { - from { - height: 450px; - } - to { - height: 120px; - } - } + animation: rate_opened 0.25s normal forwards ease-in-out; + } - @keyframes rate_form { - from { -// transform: translate(-80px, -130px) scale(0.25, 0.25); - transform: scale(0.5, 0.5); - } - to { -// transform: translate(0px, 0px) scale(1, 1); - transform: scale(1, 1); - } - } + @keyframes rate_opened { + from { + width: 250px; + } - &.hidden { - animation: rate_hide 0.25s normal forwards ease-in-out; - } + to { + width: 350px; + } + } - @keyframes rate_hide { - from { - opacity: 100; - } - to { - opacity: 0; - } - } + @keyframes rate_body_opened { + from { + height: 110px; + } + + to { + height: 450px; + } + } + + @keyframes rate_body_shrink { + from { + height: 450px; + } + + to { + height: 120px; + } + } + + @keyframes rate_form { + from { + // transform: translate(-80px, -130px) scale(0.25, 0.25); + transform: scale(0.5, 0.5); + } + + to { + // transform: translate(0px, 0px) scale(1, 1); + transform: scale(1, 1); + } + } + + &.hidden { + animation: rate_hide 0.25s normal forwards ease-in-out; + } + + @keyframes rate_hide { + from { + opacity: 100; + } + + to { + opacity: 0; + } + } .rate_body { margin-left: auto; @@ -4333,16 +4353,16 @@ main .dropdown_blocks_list .dropdown_block .block_body { width: 100%; padding: 16px 24px; box-shadow: 0px 4px 32px 0px rgba(0, 0, 0, 0.16); - align-items: center; - display: flex; - flex-direction: column; - justify-content: space-between; + align-items: center; + display: flex; + flex-direction: column; + justify-content: space-between; - @media all and (min-width: 961px) and (max-width: 1420px) { - border-top-right-radius: 0px; - border-bottom-right-radius: 0px; - margin-right: -80px; - } + @media all and (min-width: 961px) and (max-width: 1420px) { + border-top-right-radius: 0px; + border-bottom-right-radius: 0px; + margin-right: -80px; + } } p { @@ -4351,14 +4371,14 @@ main .dropdown_blocks_list .dropdown_block .block_body { line-height: 23px; width: 100%; margin-bottom: 8px; - text-align: center; + text-align: center; } .rate_start { display: flex; align-items: center; justify-content: space-between; - flex-direction: column; + flex-direction: column; p { text-align: center; @@ -4431,6 +4451,10 @@ main .dropdown_blocks_list .dropdown_block .block_body { margin-top: 50px; } + @media all and (max-width: 768px) { + overflow: hidden; + } + .feed_item { box-sizing: border-box; padding: 24px 16px; @@ -5586,7 +5610,7 @@ main .dropdown_blocks_list .dropdown_block .block_body { ; } - .dosc_list { + .docs_list { display: flex; gap: 0 20px; flex-wrap: wrap; @@ -5669,7 +5693,7 @@ main .dropdown_blocks_list .dropdown_block .block_body { margin-bottom: 8px; } - .dosc_list { + .docs_list { display: flex; flex-wrap: wrap; @@ -5755,7 +5779,7 @@ main .dropdown_blocks_list .dropdown_block .block_body { } @media all and (max-width: 768px) { - .dosc_list { + .docs_list { margin-top: 20px; .row { @@ -5889,7 +5913,7 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block { } - .dosc_list { + .docs_list { @media all and (max-width: 767px) { margin-bottom: 15px; } @@ -6003,6 +6027,8 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block { .contractStatus_list { margin: 50px 0; + position: relative; + z-index: 9; .list_item { display: flex; @@ -6010,11 +6036,31 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block { width: 100%; gap: 0 30px; justify-content: space-between; + position: relative; + + @media all and (max-width: 920px) { + display: block; + padding-left: 100px; + } + + @media all and (max-width: 768px) { + padding-left: 0; + } div { display: flex; align-items: center; + img { + @media all and (max-width: 920px) { + max-width: 30px; + } + + @media all and (max-width: 768px) { + display: none; + } + } + p { font-weight: 700; line-height: 23px; @@ -6023,16 +6069,33 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block { align-items: center; justify-content: flex-start; gap: 0 8px; + + @media all and (max-width: 920px) { + font-size: 12px; + line-height: 16px; + } + } + + &:first-child { + @media all and (max-width: 920px) and (min-width: 769px) { + position: absolute; + left: 0; + top: 0; + max-width: 90px; + } } &:nth-child(2) { width: 30%; position: relative; + @media all and (max-width: 768px) { + width: 100%; + } + p { cursor: pointer; color: var(--text_not_active); - } &:before { @@ -6049,6 +6112,10 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block { border-left: 8px solid #d1d4db; border-bottom: 6px solid transparent; background: #fff; + + @media all and (max-width: 920px) { + display: none; + } } &:after { @@ -6059,6 +6126,10 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block { background: url("/assets/images/status/line.jpg") repeat-x left center; background-size: auto 13px; margin-left: 24px; + + @media all and (max-width: 920px) { + display: none; + } } } @@ -6070,6 +6141,18 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block { width: 50%; position: relative; + @media all and (max-width: 920px) { + width: 100%; + gap: 0 12px; + padding: 10px 20px; + justify-content: flex-start; + } + + @media all and (max-width: 768px) { + padding: 20px; + } + + &:before { content: ""; display: block; @@ -6083,6 +6166,17 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block { border-top: 6px solid transparent; border-left: 8px solid #a499dd; border-bottom: 6px solid transparent; + + @media all and (max-width: 920px) { + border-top: 4px solid transparent; + border-left: 6px solid #a499dd; + border-bottom: 4px solid transparent; + right: auto; + left: 0; + bottom: 0; + transform: rotate(90deg); + top: auto; + } } &:after { @@ -6092,23 +6186,57 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block { height: 18px; background: url("/assets/images/status/line_2.jpg") repeat-x left center; background-size: auto 13px; + + @media all and (max-width: 920px) { + background-size: auto 10px; + position: absolute; + left: -22px; + right: auto; + transform: rotate(90deg); + width: 50px; + height: 6px; + } + + @media all and (max-width: 768px) { + left: -17px; + width: 40px; + } } } &:nth-child(4) { - width: 150px; - cursor: pointer; + width: 130px; + min-width: 130px; + justify-content: flex-end; + + @media all and (max-width: 920px) { + justify-content: flex-start; + } + + cursor: pointer; button { white-space: nowrap; gap: 0 8px; + + @media all and (max-width: 920px) { + padding: 0; + } } } + + &:first-child { + min-width: 60px; + } } &:not(:last-child) { margin-bottom: 5px; + @media all and (max-width: 920px) { + margin-bottom: 20px; + } + div:nth-child(5) { /*visibility: hidden;*/ } @@ -6132,6 +6260,11 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block { transition: transform 150ms ease; overflow: hidden; + @media all and (max-width: 768px) { + margin-bottom: 30px; + overflow: visible; + } + .modal_header { display: flex; align-items: center; @@ -6163,7 +6296,12 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block { align-items: unset; justify-content: flex-start; gap: 0 30px; - padding: 2px 0; + padding: 0px 0; + + @media all and (max-width: 920px) { + gap: 0 12px; + font-size: 12px; + } &:last-child { .status_body .wrap { @@ -6172,7 +6310,7 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block { } >span::before { - display: none; + display: none !important; } } @@ -6183,44 +6321,86 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block { font-weight: 700; white-space: nowrap; padding: 15px 0; - height: 80px; + // height: 80px; display: flex; - align-items: center; + align-items: flex-start; box-sizing: border-box; } } i { display: block; - width: 50px; - height: 50px; + width: 40px; + height: 40px; - &.status_1 { - background: url("/assets/images/status/1.svg") no-repeat center; + @media all and (max-width: 920px) { + width: 30px; + height: 30px; + background-size: contain !important; } - &.status_2 { - background: url("/assets/images/status/2.svg") no-repeat center; + &.status_100 { + background: url("/assets/images/status/icon_deal_status_100.svg") no-repeat center; + + &.inactive { + background: url("/assets/images/status/icon_deal_status_100_inactive.svg") no-repeat center; + } } - &.status_3 { - background: url("/assets/images/status/3.svg") no-repeat center; + &.status_101 { + background: url("/assets/images/status/icon_deal_status_101.svg") no-repeat center; + + &.inactive { + background: url("/assets/images/status/icon_deal_status_101_inactive.svg") no-repeat center; + } } - &.status_4 { - background: url("/assets/images/status/4.svg") no-repeat center; + &.status_102 { + background: url("/assets/images/status/icon_deal_status_102.svg") no-repeat center; + + &.inactive { + background: url("/assets/images/status/icon_deal_status_102_inactive.svg") no-repeat center; + } } - &.status_5 { - background: url("/assets/images/status/5.svg") no-repeat center; + &.status_103 { + background: url("/assets/images/status/icon_deal_status_103.svg") no-repeat center; + + &.inactive { + background: url("/assets/images/status/icon_deal_status_103_inactive.svg") no-repeat center; + } } - &.status_6 { - background: url("/assets/images/status/6.svg") no-repeat center; + &.status_104 { + background: url("/assets/images/status/icon_deal_status_104.svg") no-repeat center; + + &.inactive { + background: url("/assets/images/status/icon_deal_status_104_inactive.svg") no-repeat center; + } } - &.status_7 { - background: url("/assets/images/status/7.svg") no-repeat center; + &.status_105 { + background: url("/assets/images/status/icon_deal_status_105.svg") no-repeat center; + + &.inactive { + background: url("/assets/images/status/icon_deal_status_105_inactive.svg") no-repeat center; + } + } + + &.status_106 { + background: url("/assets/images/status/icon_deal_status_106.svg") no-repeat center; + + &.inactive { + background: url("/assets/images/status/icon_deal_status_106_inactive.svg") no-repeat center; + } + } + + &.status_107 { + background: url("/assets/images/status/icon_deal_status_107.svg") no-repeat center; + + &.inactive { + background: url("/assets/images/status/icon_deal_status_107_inactive.svg") no-repeat center; + } } } @@ -6232,13 +6412,14 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block { margin: 0; //border-radius: 100%; //background-color: #5FB158; - background-image: url("data:image/svg+xml,%3Csvg width='12' height='12' viewBox='0 0 12 12' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M9.92871 3.50024L4.92871 8.50002L2.42871 6.00024' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A"); + //background-image: url("data:image/svg+xml,%3Csvg width='12' height='12' viewBox='0 0 12 12' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M9.92871 3.50024L4.92871 8.50002L2.42871 6.00024' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A"); + background-image: url("data:image/svg+xml,%3Csvg width='20' height='20' viewBox='0 0 20 20' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='10' cy='10' r='10' fill='%23EDEFF5'/%3E%3Cpath d='M9.9986 14.2857C12.3655 14.2857 14.2843 12.3669 14.2843 10C14.2843 7.63307 12.3655 5.71429 9.9986 5.71429C7.63167 5.71429 5.71289 7.63307 5.71289 10C5.71289 12.3669 7.63167 14.2857 9.9986 14.2857Z' stroke='%238E94A7' stroke-miterlimit='10'/%3E%3Cpath d='M10 7.5V10H12.5' stroke='%238E94A7' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A"); background-repeat: no-repeat; background-position: top center; - + position: relative; - z-index: 1; - top: 30px; + z-index: 2; + top: 15px; &:before { content: ""; @@ -6246,7 +6427,7 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block { position: absolute; width: 0px; height: auto; - border: 1px dashed #5FB158; + border: 1px dashed #EDEFF5; top: 20px; bottom: -20px; left: 0; @@ -6261,13 +6442,12 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block { height: 0; border-left: 3px solid transparent; border-right: 3px solid transparent; - border-top: 5px solid #5FB158; + border-top: 5px solid #EDEFF5; position: absolute; top: -5px; left: 0; right: 0; margin: auto; - } } @@ -6275,141 +6455,469 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block { span { &:after { + display: none; } } } - &:last-child { - span { - &:before { - bottom: 0; - } - } - } + &:last-child { + span { + &:before { + content: ""; + display: block; + position: absolute; + width: 0px; + height: auto; + border: 1px dashed #EDEFF5; + top: 20px; + bottom: -20px; + left: 0; + right: 0; + margin: auto; + z-index: -1; - &:not(:last-child) { - //border-bottom: 1px solid var(--inactive, #EDEFF5); - } + bottom: 0; + } + } + } - &:not(:first-child) { - >p:first-child { + &:not(:last-child) { + //border-bottom: 1px solid var(--inactive, #EDEFF5); + } - visibility: hidden; - } - } + &:first-child { + @media all and (max-width: 768px) { + padding-top: 25px; - &:not(.current) { - img { - filter: grayscale(1) - } - } + >p:first-child { + width: 100%; + position: absolute; + top: 0; + padding: 0; + } + } + } - &.current { - > span { - //background-color: #2F80ED; - //background-image: url("data:image/svg+xml,%3Csvg width='12' height='12' viewBox='0 0 12 12' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M6.00084 9.92868C8.17053 9.92868 9.92941 8.1698 9.92941 6.00011C9.92941 3.83041 8.17053 2.07153 6.00084 2.07153C3.83115 2.07153 2.07227 3.83041 2.07227 6.00011C2.07227 8.1698 3.83115 9.92868 6.00084 9.92868Z' stroke='white' stroke-miterlimit='10'/%3E%3Cpath d='M6 6.00007L7.76777 4.2323' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M4.92871 0.642944H7.07157' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A"); - background-image: url("data:image/svg+xml,%3Csvg width='20' height='20' viewBox='0 0 20 20' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='10' cy='10' r='10' fill='%232F80ED'/%3E%3Cpath d='M9.99888 13.9286C12.1686 13.9286 13.9275 12.1697 13.9275 9.99998C13.9275 7.83029 12.1686 6.07141 9.99888 6.07141C7.82919 6.07141 6.07031 7.83029 6.07031 9.99998C6.07031 12.1697 7.82919 13.9286 9.99888 13.9286Z' stroke='white' stroke-miterlimit='10'/%3E%3Cpath d='M10 10L11.7678 8.23224' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M8.92773 4.64282H11.0706' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A"); - background-repeat: no-repeat; - background-position: top center; + &:not(:first-child) { + >p:first-child { - &:before { - border-color: #2F80ED; - } - } + visibility: hidden; - &~div { - > span { - //background-image: url("data:image/svg+xml,%3Csvg width='12' height='12' viewBox='0 0 12 12' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M6.00056 10.2858C8.36749 10.2858 10.2863 8.367 10.2863 6.00007C10.2863 3.63313 8.36749 1.71436 6.00056 1.71436C3.63362 1.71436 1.71484 3.63313 1.71484 6.00007C1.71484 8.367 3.63362 10.2858 6.00056 10.2858Z' stroke='%238E94A7' stroke-miterlimit='10'/%3E%3Cpath d='M6 3.5V6H8.5' stroke='%238E94A7' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A"); - background-image: url("data:image/svg+xml,%3Csvg width='20' height='20' viewBox='0 0 20 20' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='10' cy='10' r='10' fill='%23EDEFF5'/%3E%3Cpath d='M9.9986 14.2857C12.3655 14.2857 14.2843 12.3669 14.2843 10C14.2843 7.63307 12.3655 5.71429 9.9986 5.71429C7.63167 5.71429 5.71289 7.63307 5.71289 10C5.71289 12.3669 7.63167 14.2857 9.9986 14.2857Z' stroke='%238E94A7' stroke-miterlimit='10'/%3E%3Cpath d='M10 7.5V10H12.5' stroke='%238E94A7' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A"); - background-repeat: no-repeat; - background-position: top center; - //background-color: var(--inactive, #EDEFF5); + @media all and (max-width: 768px) { + display: none; + } - &:before { - border-color: var(--inactive, #EDEFF5); - } + } + } - &:after { - border-top-color: var(--inactive, #EDEFF5); - } - } + &:not(.current) { + img { + filter: grayscale(1) + } + } - i { - /* - &.status_1 { - background: url("/assets/images/status/1_inactive.svg") no-repeat center; - } + &.current { + >span { + //background-color: #2F80ED; + //background-image: url("data:image/svg+xml,%3Csvg width='12' height='12' viewBox='0 0 12 12' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M6.00084 9.92868C8.17053 9.92868 9.92941 8.1698 9.92941 6.00011C9.92941 3.83041 8.17053 2.07153 6.00084 2.07153C3.83115 2.07153 2.07227 3.83041 2.07227 6.00011C2.07227 8.1698 3.83115 9.92868 6.00084 9.92868Z' stroke='white' stroke-miterlimit='10'/%3E%3Cpath d='M6 6.00007L7.76777 4.2323' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M4.92871 0.642944H7.07157' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A"); + background-image: url("data:image/svg+xml,%3Csvg width='20' height='20' viewBox='0 0 20 20' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='10' cy='10' r='10' fill='%232F80ED'/%3E%3Cpath d='M9.99888 13.9286C12.1686 13.9286 13.9275 12.1697 13.9275 9.99998C13.9275 7.83029 12.1686 6.07141 9.99888 6.07141C7.82919 6.07141 6.07031 7.83029 6.07031 9.99998C6.07031 12.1697 7.82919 13.9286 9.99888 13.9286Z' stroke='white' stroke-miterlimit='10'/%3E%3Cpath d='M10 10L11.7678 8.23224' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M8.92773 4.64282H11.0706' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A"); + background-repeat: no-repeat; + background-position: top center; - &.status_2 { - background: url("/assets/images/status/2_inactive.svg") no-repeat center; - } + &:before { + border-color: #2F80ED; + } - &.status_3 { - background: url("/assets/images/status/3_inactive.svg") no-repeat center; - } + &:after { + border-top-color: #2F80ED; + } + } - &.status_4 { - background: url("/assets/images/status/4_inactive.svg") no-repeat center; - } + /* + &~div { + > span { + //background-image: url("data:image/svg+xml,%3Csvg width='12' height='12' viewBox='0 0 12 12' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M6.00056 10.2858C8.36749 10.2858 10.2863 8.367 10.2863 6.00007C10.2863 3.63313 8.36749 1.71436 6.00056 1.71436C3.63362 1.71436 1.71484 3.63313 1.71484 6.00007C1.71484 8.367 3.63362 10.2858 6.00056 10.2858Z' stroke='%238E94A7' stroke-miterlimit='10'/%3E%3Cpath d='M6 3.5V6H8.5' stroke='%238E94A7' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A"); + background-repeat: no-repeat; + background-position: top center; - &.status_5 { - background: url("/assets/images/status/5_inactive.svg") no-repeat center; - } + &:before { + border-color: #2F80ED; + } - &.status_6 { - background: url("/assets/images/status/6_inactive.svg") no-repeat center; - } + &:after { + border-top-color: #2F80ED; + } + } - &.status_7 { - background: url("/assets/images/status/7_inactive.svg") no-repeat center; - } - */ - } - } + i { + //&.status_1 { + // background: url("/assets/images/status/1_inactive.svg") no-repeat center; + //} - &+div { - span { - &:after { - border-top-color: #2F80ED; - } - } - } - } + //&.status_2 { + // background: url("/assets/images/status/2_inactive.svg") no-repeat center; + //} - .toggle_status { - margin: auto; - gap: 0 8px; - margin-right: 0; - color: var(--blue); - padding: 0; + //&.status_3 { + // background: url("/assets/images/status/3_inactive.svg") no-repeat center; + //} - svg { - transform: rotate(180deg); - } - } + //&.status_4 { + // background: url("/assets/images/status/4_inactive.svg") no-repeat center; + //} - .status_body { - width: 100%; - display: block; + //&.status_5 { + // background: url("/assets/images/status/5_inactive.svg") no-repeat center; + //} - .status_header { - display: flex; - align-items: center; - justify-content: flex-start; - gap: 0 30px; - padding: 15px 0; - } + //&.status_6 { + // background: url("/assets/images/status/6_inactive.svg") no-repeat center; + //} + + //&.status_7 { + // background: url("/assets/images/status/7_inactive.svg") no-repeat center; + //} + } + } + */ + + &+div { + span { + &:after { + border-top-color: #2F80ED; + } + } + } + } + + &.done { + >span { + background-image: url("data:image/svg+xml,%3Csvg width='20' height='20' viewBox='0 0 20 20' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='10' cy='10' r='10' fill='%235FB158'/%3E%3Cpath d='M13.9277 7.5L8.92773 12.4998L6.42773 10' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); + + &:before { + border-color: #5FB158; + } + + &:after { + border-top-color: #5FB158; + } + } + + /* + &~div { + > span { + &:before { + border-color: #5FB158; + } + } + } + */ + + &+div { + span { + &:after { + border-top-color: #5FB158; + } + } + } + } + + .toggle_status { + margin: auto; + gap: 0 8px; + margin-right: 0; + color: var(--blue); + padding: 0; + + svg { + transform: rotate(180deg); + } + } + + .status_body { + width: 100%; + display: block; + + &.with_footer { + .wrap { + padding-bottom: 0px; + border: 0px; + } + } + + .status_header { + -webkit-user-select: none; + -ms-user-select: none; + user-select: none; + + display: flex; + align-items: center; + justify-content: flex-start; + gap: 0 30px; + padding: 0px 0; + position: relative; + cursor: pointer; + + @media all and (max-width: 920px) { + gap: 0 12px; + font-size: 12px; + min-height: 50px; + } + + @media all and (max-width: 768px) { + flex-wrap: wrap; + + height: auto; + } + + .background { + background-color: rgb(237, 239, 245); + position: absolute; + left: -65px; + top: 0px; + width: calc(100% + 65px); + height: 50px; + z-index: 1; + + @media all and (max-width: 920px) { + left: 0; + } + + @media all and (max-width: 768px) { + left: -48px; + width: calc(100% + 96px); + } + } + + i { + z-index: 2; + white-space: nowrap; + min-width: 40px; + + @media all and (max-width: 768px) { + display: none; + } + } + + p { + z-index: 2; + white-space: nowrap; + + @media all and (max-width: 768px) { + max-width: calc(100% - 70px); + white-space: unset; + width: 100%; + } + } + + .buttons { + z-index: 2; + width: 100%; + display: flex; + justify-content: flex-end; + padding-right: 4px; + + + @media all and (max-width: 768px) { + justify-content: flex-start; + width: 100%; + margin-top: 10px; + } + } + + .button_arrow { + min-width: 50px; + height: 50px; + display: flex; + justify-content: center; + align-items: center; + z-index: 2; + margin-left: -30px; + + @media all and (max-width: 920px) { + margin-left: -12px; + } + + .icon { + width: 18px; + height: 18px; + } + + .down { + background-image: url("data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M14.625 6.75L9 12.375L3.375 6.75' stroke='%238E94A7' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); + } + + .up { + background-image: url("data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M3.375 11.25L9 5.625L14.625 11.25' stroke='%238E94A7' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); + } + } + } + + .status_footer { + display: flex; + align-items: center; + justify-content: flex-start; + gap: 0 30px; + padding: 0px 0; + position: relative; + cursor: pointer; + + border-bottom: solid var(--inactive); + padding-bottom: 30px; + margin-bottom: 30px; + + @media all and (max-width: 920px) { + gap: 0 12px; + font-size: 12px; + min-height: 50px; + } + + @media all and (max-width: 768px) { + flex-wrap: wrap; + height: auto; + } + + .background { + background-color: rgb(237, 239, 245); + position: absolute; + left: -65px; + top: 0px; + width: calc(100% + 65px); + height: 50px; + z-index: 1; + + @media all and (max-width: 920px) { + left: 0; + } + + @media all and (max-width: 768px) { + left: -48px; + width: calc(100% + 96px); + } + } + + i { + z-index: 2; + white-space: nowrap; + min-width: 40px; + + @media all and (max-width: 768px) { + display: none; + } + } + + p { + z-index: 2; + white-space: nowrap; + + @media all and (max-width: 768px) { + max-width: calc(100% - 70px); + white-space: unset; + width: 100%; + } + } + + .buttons { + z-index: 2; + width: 100%; + display: flex; + justify-content: flex-end; + padding-right: 4px; + + + @media all and (max-width: 768px) { + justify-content: flex-start; + width: 100%; + margin-top: 10px; + } + } + + .button_arrow { + min-width: 50px; + height: 50px; + display: flex; + justify-content: center; + align-items: center; + z-index: 2; + margin-left: -30px; + + @media all and (max-width: 920px) { + margin-left: -12px; + } + + .icon { + width: 18px; + height: 18px; + } + + .down { + background-image: url("data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M14.625 6.75L9 12.375L3.375 6.75' stroke='%238E94A7' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); + } + + .up { + background-image: url("data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M3.375 11.25L9 5.625L14.625 11.25' stroke='%238E94A7' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); + } + } + } .header { visibility: visible !important; } .wrap { - margin-top: 10px; - padding-bottom: 40px; + margin-top: 25px; + padding-bottom: 25px; border-bottom: 1px solid var(--inactive, #EDEFF5); + @media all and (max-width: 920px) { + margin-top: 15px; + padding-bottom: 15px; + } + + @media all and (max-width: 768px) { + margin-top: 20px; + padding-bottom: 20px; + } + + &.form { + display: flex; + flex-direction: column; + + .block { + display: flex; + flex-direction: row; + + @media all and (max-width: 768px) { + display: block; + } + + .left { + width: 20%; + + @media all and (max-width: 768px) { + width: 100%; + } + + p { + line-height: 14px; + margin: 15px 0px 15px 0px; + } + } + + .right { + width: 80%; + padding-left: 30px; + //padding-bottom: 30px; + + @media all and (max-width: 768px) { + width: 100%; + padding-left: 0; + } + } + } + } + input[type="checkbox"]+label { width: 16px; padding: 0; @@ -6422,12 +6930,48 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block { p { font-weight: 400; - } .single_text { - max-width: 565px; - margin: auto; + //max-width: 565px; + //margin: auto; + padding-top: 20px; + padding-left: 20px; + padding-bottom: 10px; + + p { + display: flex; + color: #8E94A7; + margin-right: 20%; + padding-top: 0px; + padding-left: 40px; + position: relative; + + @media all and (max-width: 768px) { + margin-right: 0; + padding-top: 0; + line-height: 15px; + } + + &:before { + content: ""; + display: block; + width: 40px; + min-height: 40px; + height: 40px; + min-width: 40px; + margin-top: -20px; + position: absolute; + left: -10px; + top: 50%; + + background-image: url("data:image/svg+xml,%3Csvg width='40' height='40' viewBox='0 0 40 40' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='40' height='40' rx='8' fill='%232F80ED' fill-opacity='0.1'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M20 29C24.9706 29 29 24.9706 29 20C29 15.0294 24.9706 11 20 11C15.0294 11 11 15.0294 11 20C11 24.9706 15.0294 29 20 29ZM21 14.5C21 13.9477 20.5523 13.5 20 13.5C19.4477 13.5 19 13.9477 19 14.5V19.75C19 20.4404 19.5596 21 20.25 21H23.5C24.0523 21 24.5 20.5523 24.5 20C24.5 19.4477 24.0523 19 23.5 19H21V14.5Z' fill='%232F80ED'/%3E%3C/svg%3E"); + + @media all and (max-width: 768px) { + //margin-top: -13px; + } + } + } } table { @@ -6437,19 +6981,20 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block { td, th { - border: 1px solid rgba(0, 0, 0, 17%); + //border: 1px solid rgba(0, 0, 0, 17%); + border: solid 1px #EDEFF5; + border-collapse: collapse; padding: 13px; text-align: left; vertical-align: middle; &:not(:last-child) { - border-right: 0; + // border-right: 0; } &:not(:first-child) { - border-left: 0; + // border-left: 0; } - } td { @@ -6475,12 +7020,155 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block { font-weight: 400; } } + + &.deal_offers_table { + @media all and (max-width: 920px) { + label[data-text] { + height: auto; + width: 100%; + display: flex; + align-items: center; + min-height: 16px; + + &:before { + position: relative; + order: 2; + margin-left: auto; + margin-right: calc(50% - 16px); + } + + &:after { + content: attr(data-text); + order: 1; + display: block; + padding-top: 0; + width: 50%; + + } + + } + } + + @media all and (max-width: 920px) { + thead { + display: none; + } + + tbody { + display: block; + } + + tr { + display: block; + position: relative; + padding-left: 0; + } + + td { + display: block; + padding: 8px; + + &:first-child:not(:empty) { + box-sizing: border-box; + background: #fff; + + .form_field { + display: flex; + width: 100%; + } + } + + &:not(:last-child) { + border-bottom: 0; + } + + &:empty { + display: none; + } + + &[data-title] { + display: flex; + } + + &[data-title]:before { + content: attr(data-title); + color: var(--text_not_active); + font-size: 12px; + font-style: normal; + font-weight: 700; + line-height: 120%; + width: 100%; + display: block; + width: 50%; + min-width: 50%; + } + } + + .docs_list .row .doc_name span { + width: 100%; + } + } + + + @media all and (max-width: 768px) { + thead { + display: none; + } + + tbody { + display: block; + } + + tr { + display: block; + position: relative; + padding-right: 0; + padding-left: 0; + } + + td { + display: block; + padding: 8px; + + &:not(:last-child) { + border-bottom: 0; + } + + &:empty { + display: none; + } + + label[data-text] { + &:before { + margin-right: 0; + } + } + + &[data-title]:before { + content: attr(data-title); + color: var(--text_not_active); + font-size: 12px; + font-style: normal; + font-weight: 700; + line-height: 120%; + width: 100%; + display: block; + margin-bottom: 5px; + } + } + + .docs_list .row .doc_name span { + width: 100%; + } + } + } } .message { display: flex; align-items: center; padding: 10px; + padding-left: 0px; &:before { content: ""; @@ -6520,6 +7208,7 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block { gap: 0 28px; padding: 0; + &::before { display: none; } @@ -6543,11 +7232,9 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block { margin-bottom: 0; } } - - } - .doc_list + p { + .doc_list+p { background: rgba(131, 3, 84, 0.10); padding: 15px 25px; } @@ -6558,7 +7245,7 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block { margin-bottom: 60px; } - .dosc_list { + .docs_list { a { text-decoration: none; } @@ -6580,6 +7267,15 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block { display: flex; justify-content: flex-end; gap: 0 20px; + + @media all and (max-width: 920px) { + flex-wrap: wrap; + gap: 10px 0; + + button { + width: 100%; + } + } } .flex-start { @@ -6618,9 +7314,218 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block { } } } + + .documents { + display: flex; + flex-direction: column; + grid-gap: 10px 0px; + margin-bottom: 30px; + + &:last-child { + margin-bottom: 0; + } + + .document { + width: 100%; + display: flex; + flex-direction: row; + + + @media all and (max-width: 1279px) { + + flex-wrap: wrap; + } + + + + .icon { + margin-top: 5px; + display: flex; + align-items: center; + justify-content: center; + width: 56px; + height: 56px; + min-width: 56px; + min-height: 56px; + position: relative; + background: url(/assets/images/icons/icon-file.svg) no-repeat left center; + background-size: contain; + padding: 0; + zoom: 0.65; + + .extension { + font-weight: 600; + font-size: 12px; + color: #fff; + } + + @media all and (max-width: 768px) { + width: 28px; + height: 28px; + min-width: 28px; + min-height: 28px; + + .extension { + font-size: 8px; + } + } + + &.formal { + background-image: url("data:image/svg+xml,%3Csvg width='26' height='28' viewBox='0 0 26 28' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M2 3.5C2 1.84315 3.34315 0.5 5 0.5H18.3701L20.7774 4L23.1848 7.06354V24.5C23.1848 26.1569 21.8417 27.5 20.1848 27.5H5C3.34314 27.5 2 26.1569 2 24.5V3.5Z' fill='%231C01A9'/%3E%3Cpath opacity='0.4' d='M23.1858 11.5V7L19.334 6.5L23.1858 11.5Z' fill='%230C0C0C'/%3E%3Cline y1='-0.5' x2='11.5553' y2='-0.5' transform='matrix(1 -9.89866e-05 0.000132759 1 6.81445 7.50098)' stroke='%23F0F0F0'/%3E%3Cline y1='-0.5' x2='11.5553' y2='-0.5' transform='matrix(1 -9.89866e-05 0.000132759 1 6.81445 12.501)' stroke='%23F0F0F0'/%3E%3Cline y1='-0.5' x2='11.5553' y2='-0.5' transform='matrix(1 -9.89866e-05 0.000132759 1 6.81445 17.501)' stroke='%23F0F0F0'/%3E%3Cline y1='-0.5' x2='11.5553' y2='-0.5' transform='matrix(1 -9.89866e-05 0.000132759 1 6.81445 22.501)' stroke='%23F0F0F0'/%3E%3Cpath d='M23.1858 7H19.3711C18.8188 7 18.3711 6.55228 18.3711 6V3.5V0.5L23.1858 7Z' fill='%232F80ED'/%3E%3C/svg%3E"); + } + } + + .title { + display: flex; + flex-direction: column; + + p { + font-weight: 600; + margin-left: 16px; + + @media all and (max-width: 768px) { + margin-left: 0; + } + } + + @media all and (max-width: 1279px) { + width: calc(100% - 56px) + } + + @media all and (max-width: 768px) { + margin-left: 12px; + } + } + + .description { + display: flex; + flex-direction: row; + + span { + font-weight: 300; + margin-left: 16px; + margin-top: 2px; + color: #8e94a7; + + @media all and (max-width: 768px) { + margin-left: 0; + margin-right: 10px; + } + } + } + + .actions { + display: flex; + flex: 1; + gap: 0px 0px; + flex-direction: row; + justify-content: flex-end; + align-items: center; + + + @media all and (max-width: 1279px) { + flex: auto; + width: 100%; + flex-wrap: wrap; + padding-left: 50px !important; + } + + @media all and (max-width: 768px) { + padding-left: 30px !important; + justify-content: flex-start; + gap: 0 12px; + } + + button { + white-space: nowrap; + + @media all and (max-width: 1279px) { + order: 1; + padding: 0; + justify-content: flex-start; + width: 100%; + } + + } + + .status { + display: flex; + align-items: center; + flex-direction: row; + + background-color: #2F80ED; + gap: 0px 16px; + padding: 0px 16px; + + @media all and (max-width: 1279px) { + width: 100%; + order: 2; + } + + .status_icon { + min-width: 24px; + min-height: 24px; + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='25' height='24' viewBox='0 0 25 24' fill='none'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M12.9766 21C17.9471 21 21.9766 16.9706 21.9766 12C21.9766 7.02944 17.9471 3 12.9766 3C8.006 3 3.97656 7.02944 3.97656 12C3.97656 16.9706 8.006 21 12.9766 21ZM13.9766 6.5C13.9766 5.94772 13.5288 5.5 12.9766 5.5C12.4243 5.5 11.9766 5.94772 11.9766 6.5V11.75C11.9766 12.4404 12.5362 13 13.2266 13H16.4766C17.0288 13 17.4766 12.5523 17.4766 12C17.4766 11.4477 17.0288 11 16.4766 11H13.9766V6.5Z' fill='white'/%3E%3C/svg%3E"); + } + + span { + font-weight: 300; + color: #fff; + white-space: nowrap; + + @media all and (max-width: 1279px) { + white-space: inherit; + line-height: 1.25; + padding: 5px 0; + } + } + } + } + + .wide { + justify-content: space-between; + padding-left: 64px; + } + } + + .empty { + margin: 12px 0px 15px 0px; + color: #8e94a7; + } + } } } } + + .bottom_button_close { + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; + padding: 18px 54px 18px 54px; + margin-left: 82px; + width: fit-content; + gap: 12px; + cursor: pointer; + + span { + font-weight: 600; + color: #1C01A9; + } + + .icon { + width: 16px; + height: 16px; + background-image: url("data:image/svg+xml,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M3 10L8 5L13 10' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); + } + + @media all and (max-width: 920px) { + margin-left: 0; + padding: 0; + margin-top: 15px; + margin-bottom: 25px; + } + } } @@ -6678,4 +7583,600 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block { } } } +} + +.horizontal_dropzone_wrapper { + margin: 0px; + padding: 30px; + height: 100px; + + @media all and (max-width: 920px) { + padding: 15px; + } + + @media all and (max-width: 768px) { + height: auto; + } + + &.disabled { + filter: grayscale(1); + opacity: 0.25; + } + + .horizontal_dropzone_inner { + display: flex; + width: 100%; + max-width: 80%; + gap: 20px; + + @media all and (max-width: 920px) { + max-width: 100%; + gap: 0 12px; + } + + @media all and (max-width: 768px) { + flex-wrap: wrap; + } + + + p { + text-align: left; + margin: 0px; + } + + label { + white-space: nowrap; + + @media all and (max-width: 768px) { + margin-top: 15px; + } + } + } +} + +.horizontal_dropzone_files { + display: flex; + flex-direction: column; + grid-gap: 10px 0px; + margin-bottom: 30px; + + .file { + display: flex; + flex-direction: row; + + .delete { + margin-left: 0px; + padding-right: 16px; + padding-top: 10px; + cursor: pointer; + width: 30px; + min-width: 30px; + padding-left: 3px; + + .icon { + width: 16px; + height: 16px; + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16' fill='none'%3E%3Cpath d='M8 14C11.3137 14 14 11.3137 14 8C14 4.68629 11.3137 2 8 2C4.68629 2 2 4.68629 2 8C2 11.3137 4.68629 14 8 14Z' fill='%23ED0A34' stroke='%23ED0A34' stroke-miterlimit='10'/%3E%3Cpath d='M10 6L6 10' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M10 10L6 6' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); + } + } + + .loading { + width: 30px; + min-width: 30px; + + .success { + width: 24px; + min-width: 24px; + height: 30px; + min-height: 30px; + + background-image: url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 21C16.9706 21 21 16.9706 21 12C21 7.02944 16.9706 3 12 3C7.02944 3 3 7.02944 3 12C3 16.9706 7.02944 21 12 21Z' stroke='%235FB158' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M16.125 9.75L10.625 15L7.875 12.375' stroke='%235FB158' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A"); + background-repeat: no-repeat; + background-position: center; + background-position-y: 6px; + } + } + + .doc_icon { + display: flex; + align-items: center; + justify-content: center; + width: 56px; + height: 56px; + min-width: 56px; + min-height: 56px; + position: relative; + background: url(/assets/images/icons/icon-file.svg) no-repeat left center; + background-size: contain; + padding: 0; + zoom: 0.65; + + .extension { + font-weight: 600; + font-size: 12px; + color: #fff; + } + } + + .title { + display: flex; + flex-direction: column; + + span:nth-child(odd) { + font-weight: 600; + margin-left: 16px; + } + + span:nth-child(even) { + font-weight: 300; + margin-left: 16px; + } + } + + .description { + display: block; + font-weight: 400; + margin-top: 2px; + color: #8e94a7; + } + } +} + +.horizontal_dropzone_files_wrapper { + width: 100%; + display: flex; + flex-direction: column; + gap: 0px 20px; + padding: 15px 0px; + + .horizontal_dropzone_files_item { + width: 100%; + } +} + +.horizontal_dropzone_files_error { + padding-bottom: 15px; + position: relative; + + .switch { + cursor: pointer; + position: absolute; + top: 0; + right: 0; + width: 50px; + height: 50px; + background: url("data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M14.625 6.75L9 12.375L3.375 6.75' stroke='%238E94A7' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") no-repeat center; + z-index: 2; + transform: rotate(180deg); + + &.up { + transform: rotate(0deg); + } + } +} + +.horizontal_dropzone_files_comment { + background: rgba(131, 3, 84, 0.10); + padding: 15px 25px; + display: flex; + flex-direction: column; + + .title { + font-weight: 600; + } + + &.closed { + background: rgb(237 239 245); + } +} + + +.deals_contracts { + display: flex; + flex-direction: column; + + label { + height: 16px !important; + min-height: 16px !important; + + &::before { + margin-top: 18px; + } + } + + .info { + margin-left: 72px; + display: flex; + flex-direction: row; + grid-gap: 10px 10px; + } +} + +.edo_banner { + .title { + display: flex; + gap: 0px 10px; + } + + .info { + cursor: pointer; + margin-left: 80px; + + &:after { + content: ""; + display: inline-block; + width: 10px; + height: 10px; + margin-left: 5px; + width: 10px; + height: 10px; + background-size: contain; + background-image: url("data:image/svg+xml,%3Csvg width='10' height='10' viewBox='0 0 10 10' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0.25' y='2.25' width='6.5' height='7.5' rx='0.75' fill='white' stroke='%230C0C0C' stroke-width='0.5'/%3E%3Crect x='3.25' y='0.25' width='6.5' height='7.5' rx='0.75' fill='white' stroke='%230C0C0C' stroke-width='0.5'/%3E%3C/svg%3E"); + } + } + + .buttons { + display: flex; + gap: 0px 20px; + margin-left: 80px; + height: fit-content !important; + + a { + margin-top: 10px; + } + } + + @media all and (max-width: 1279px) { + .info { + margin-left: 0px; + } + + .buttons { + flex-direction: column; + margin-left: 0px; + } + } +} + +.edo_detail { + p { + margin: 0px; + } + + .list_title { + font-weight: 700 !important; + margin-bottom: 15px; + font-size: 15px; + line-height: 23px; + } +} + +.edo_list_field { + display: flex; + flex-wrap: wrap; + align-items: flex-start !important; + margin-bottom: 30px; + width: 100%; + + flex-direction: row; + + @media all and (max-width: 640px) { + flex-direction: column; + } + + label { + width: 186px; + margin-right: 12px; + + &.wide { + width: 30%; + } + } +} + +.edo_list_selection { + flex: 1; + margin-top: -12px; + + @media all and (max-width: 640px) { + margin-top: 20px; + } + + .item { + width: 100%; + padding: 16px 0px; + margin: 0px !important; + border-bottom: solid 1px #edeff5; + + label { + width: auto; + display: flex; + align-items: center; + margin-right: 12px; + // padding-top: 16px; + + &:first { + margin-top: 0px; + } + + &:before { + top: 0; + bottom: 0; + margin: auto; + } + } + + &:first { + margin-top: 0px; + } + + &:last-child { + border-bottom: 0px; + } + } +} + +.edo_sign_document { + display: flex; + flex-direction: column; + // margin: 30px 0px !important; + align-items: flex-start; + + &:before { + font-size: 8px; + width: 32px; + left: 0; + right: 0; + padding: 0; + } +} + +.edo_operators_settings_list { + display: flex; + flex-direction: column; + align-items: flex-start; + gap: 15px 0px; + padding-bottom: 40px; +} + +.edo_operators_settings_list_item { + margin-left: 40px; + display: flex; + flex-direction: column; + position: relative; + + a { + color: #8e94a7; + font-style: italic; + } + + &:before { + content: ""; + position: absolute; + left: -40px; + top: -7px; + width: 24px; + min-width: 24px; + height: 30px; + min-height: 30px; + background-image: url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 21C16.9706 21 21 16.9706 21 12C21 7.02944 16.9706 3 12 3C7.02944 3 3 7.02944 3 12C3 16.9706 7.02944 21 12 21Z' stroke='%235FB158' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M16.125 9.75L10.625 15L7.875 12.375' stroke='%235FB158' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A"); + background-repeat: no-repeat; + background-position: center; + background-position-y: 6px; + } + + &.invite { + &:before { + background-image: url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 21C16.9706 21 21 16.9706 21 12C21 7.02944 16.9706 3 12 3C7.02944 3 3 7.02944 3 12C3 16.9706 7.02944 21 12 21Z' stroke='%238E94A7' stroke-width='2' stroke-miterlimit='10'/%3E%3Cpath d='M12 6.75V12H17.25' stroke='%238E94A7' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A"); + } + } +} + +.edo_sign_documents_list { + display: flex; + flex-direction: column; + // gap: 30px 0px; + margin-bottom: 50px; +} + +.edo_sign_documents_document { + display: flex; + flex-direction: row; + gap: 0px 30px; + + @media all and (max-width: 640px) { + flex-direction: column; + } + + padding-top: 15px; + padding-bottom: 15px; + + border-top: solid 1px #edeff5; + + .status_icon { + width: 24px; + min-width: 24px; + height: 24px; + min-height: 24px; + background-repeat: no-repeat; + background-position: center; + background-position-y: -1px; + background-position-x: -1px; + + &.success { + background-image: url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 21C16.9706 21 21 16.9706 21 12C21 7.02944 16.9706 3 12 3C7.02944 3 3 7.02944 3 12C3 16.9706 7.02944 21 12 21Z' stroke='%235FB158' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M16.125 9.75L10.625 15L7.875 12.375' stroke='%235FB158' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A"); + border: none !important; + } + + &.error { + background-image: url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 21C16.9706 21 21 16.9706 21 12C21 7.02944 16.9706 3 12 3C7.02944 3 3 7.02944 3 12C3 16.9706 7.02944 21 12 21Z' stroke='%23ED0A34' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M13 16C13 16.5523 12.5523 17 12 17C11.4477 17 11 16.5523 11 16C11 15.4477 11.4477 15 12 15C12.5523 15 13 15.4477 13 16Z' fill='%23ED0A34'/%3E%3Cpath d='M12 8L12 12' stroke='%23ED0A34' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); + border: none !important; + } + + &.await { + background-image: url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 21C16.9706 21 21 16.9706 21 12C21 7.02944 16.9706 3 12 3C7.02944 3 3 7.02944 3 12C3 16.9706 7.02944 21 12 21Z' stroke='%238E94A7' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M12 8L12 12' stroke='%238E94A7' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M16 12L12 12' stroke='%238E94A7' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); + border: none !important; + } + } + + .status_title { + padding: 0px 10px; + + i { + display: contents; + } + } + + .edo_sign_documents_document_left { + width: 35%; + + @media all and (max-width: 640px) { + width: 100%; + } + } + + .edo_sign_documents_document_right { + width: 65%; + display: flex; + align-items: center; + justify-content: flex-start; + + @media all and (max-width: 640px) { + width: 100%; + margin-top: 20px; + margin-left: 40px; + position: relative; + padding-right: 40px; + + align-items: flex-start; + + &::before { + content: ""; + position: absolute; + top: -17px; + left: -40px; + width: 40px; + height: 40px; + background: url(/assets/images/deal_contract_status_mobile_arrow.svg) no-repeat; + } + } + + i { + width: 100% !important; + height: auto !important; + font-size: 12px; + padding-left: 10px; + color: #8e94a7; + align-self: center; + justify-content: center; + line-height: 16px; + } + } + + &:first-child { + border: none; + } +} + +.edo_sign_status_attorney_select { + padding-left: 10px; + width: 100%; +} + +.deal_contract_sign_list { + gap: 0px 0px; +} + +.deal_contract_sign_item { + padding-top: 15px; + padding-bottom: 15px; + border-top: solid 1px #edeff5; + + width: 100%; + display: flex; + flex-direction: row; + + .title { + width: 35%; + } + + .actions { + width: 65%; + justify-content: space-between; + justify-content: flex-start !important; + + .status_icon { + width: 24px; + min-width: 24px; + height: 24px; + min-height: 24px; + background-repeat: no-repeat; + background-position: center; + background-position-y: -1px; + background-position-x: -1px; + + &.success { + background-image: url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 21C16.9706 21 21 16.9706 21 12C21 7.02944 16.9706 3 12 3C7.02944 3 3 7.02944 3 12C3 16.9706 7.02944 21 12 21Z' stroke='%235FB158' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M16.125 9.75L10.625 15L7.875 12.375' stroke='%235FB158' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A"); + border: none !important; + } + + &.error { + background-image: url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 21C16.9706 21 21 16.9706 21 12C21 7.02944 16.9706 3 12 3C7.02944 3 3 7.02944 3 12C3 16.9706 7.02944 21 12 21Z' stroke='%23ED0A34' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M13 16C13 16.5523 12.5523 17 12 17C11.4477 17 11 16.5523 11 16C11 15.4477 11.4477 15 12 15C12.5523 15 13 15.4477 13 16Z' fill='%23ED0A34'/%3E%3Cpath d='M12 8L12 12' stroke='%23ED0A34' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); + border: none !important; + } + + &.await { + background-image: url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 21C16.9706 21 21 16.9706 21 12C21 7.02944 16.9706 3 12 3C7.02944 3 3 7.02944 3 12C3 16.9706 7.02944 21 12 21Z' stroke='%238E94A7' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M12 8L12 12' stroke='%238E94A7' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M16 12L12 12' stroke='%238E94A7' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); + border: none !important; + } + } + + .status_title { + padding: 0px 10px; + + i { + display: contents; + } + } + + &.actions_with_status { + justify-content: flex-start !important; + margin-left: 15px; + } + } + + &:first-child { + border: none; + } +} + +.deal_contracts_group_item { + border-top: solid 1px #edeff5; + padding-top: 10px; + padding-bottom: 20px; + // margin-top: 30px; +} + +.deal_documents_form_group { + padding-top: 15px; + padding-bottom: 15px; + border-top: solid 1px #edeff5; +} + +.checkbox_disabled { + label { + cursor: default !important; + &:before { + filter: grayscale(); + opacity: 0.5; + cursor: default !important; + } + } +} + +.offer_selection { + color: var(--blue); + &:hover { + text-decoration: underline; + } } \ No newline at end of file diff --git a/css/var.css b/css/var.css index 14f353c..8525509 100644 --- a/css/var.css +++ b/css/var.css @@ -507,6 +507,9 @@ div { background-position: 0 5px; } } +.i-doc.blue { + background-image: url("data:image/svg+xml,%3Csvg width='26' height='28' viewBox='0 0 26 28' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M2 3.5C2 1.84315 3.34315 0.5 5 0.5H18.3701L20.7774 4L23.1848 7.06354V24.5C23.1848 26.1569 21.8417 27.5 20.1848 27.5H5C3.34314 27.5 2 26.1569 2 24.5V3.5Z' fill='%231C01A9'/%3E%3Cpath opacity='0.4' d='M23.1858 11.5V7L19.334 6.5L23.1858 11.5Z' fill='%230C0C0C'/%3E%3Cline y1='-0.5' x2='11.5553' y2='-0.5' transform='matrix(1 -9.89866e-05 0.000132759 1 6.81445 7.50098)' stroke='%23F0F0F0'/%3E%3Cline y1='-0.5' x2='11.5553' y2='-0.5' transform='matrix(1 -9.89866e-05 0.000132759 1 6.81445 12.501)' stroke='%23F0F0F0'/%3E%3Cline y1='-0.5' x2='11.5553' y2='-0.5' transform='matrix(1 -9.89866e-05 0.000132759 1 6.81445 17.501)' stroke='%23F0F0F0'/%3E%3Cline y1='-0.5' x2='11.5553' y2='-0.5' transform='matrix(1 -9.89866e-05 0.000132759 1 6.81445 22.501)' stroke='%23F0F0F0'/%3E%3Cpath d='M23.1858 7H19.3711C18.8188 7 18.3711 6.55228 18.3711 6V3.5V0.5L23.1858 7Z' fill='%232F80ED'/%3E%3C/svg%3E"); +} .success { color: var(--green); } @@ -639,3 +642,43 @@ div { margin-top: 35px; margin-bottom: 35px; } +.messages_overlay { + position: fixed; + top: 0px; + right: 0px; + width: 30%; + display: flex; + flex-direction: column; + align-items: flex-start; + justify-content: flex-start; + z-index: 100; + gap: 10px 10px; + margin: 10px; +} +.messages_overlay .overlay_message_error { + position: relative; + width: 100%; + background-color: #df2525; + padding: 10px 15px; + font-size: 12px; +} +.messages_overlay .overlay_message_error h4, +.messages_overlay .overlay_message_error p { + color: #fff; +} +.messages_overlay .overlay_message_error h4 { + padding: 0px; + margin: 0px; + margin-bottom: 2px; +} +.messages_overlay .overlay_message_error .button { + position: absolute; + top: 8px; + right: 8px; + width: 16px; + height: 16px; + padding: 0; + border: 0; + background: url("/assets/images/icons/close-white.svg") no-repeat center; + background-size: 16px; +} diff --git a/css/var.less b/css/var.less index cb5ef5f..baf04db 100644 --- a/css/var.less +++ b/css/var.less @@ -524,20 +524,24 @@ div { } .i-doc { - padding-left: 80px; - background: url("/assets/images/icons/icon-doc.svg") no-repeat left center; - background-size: 56px; + padding-left: 80px; + background: url("/assets/images/icons/icon-doc.svg") no-repeat left center; + background-size: 56px; - @media all and (max-width: 1600px) and (min-width: 1280px) { - padding-left: 56px; - background-size: 42px; - } + @media all and (max-width: 1600px) and (min-width: 1280px) { + padding-left: 56px; + background-size: 42px; + } - @media all and (max-width: 960px) { - padding-left: 55px; - background-size: 32px; - background-position: 0 5px; - } + @media all and (max-width: 960px) { + padding-left: 55px; + background-size: 32px; + background-position: 0 5px; + } + + &.blue { + background-image: url("data:image/svg+xml,%3Csvg width='26' height='28' viewBox='0 0 26 28' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M2 3.5C2 1.84315 3.34315 0.5 5 0.5H18.3701L20.7774 4L23.1848 7.06354V24.5C23.1848 26.1569 21.8417 27.5 20.1848 27.5H5C3.34314 27.5 2 26.1569 2 24.5V3.5Z' fill='%231C01A9'/%3E%3Cpath opacity='0.4' d='M23.1858 11.5V7L19.334 6.5L23.1858 11.5Z' fill='%230C0C0C'/%3E%3Cline y1='-0.5' x2='11.5553' y2='-0.5' transform='matrix(1 -9.89866e-05 0.000132759 1 6.81445 7.50098)' stroke='%23F0F0F0'/%3E%3Cline y1='-0.5' x2='11.5553' y2='-0.5' transform='matrix(1 -9.89866e-05 0.000132759 1 6.81445 12.501)' stroke='%23F0F0F0'/%3E%3Cline y1='-0.5' x2='11.5553' y2='-0.5' transform='matrix(1 -9.89866e-05 0.000132759 1 6.81445 17.501)' stroke='%23F0F0F0'/%3E%3Cline y1='-0.5' x2='11.5553' y2='-0.5' transform='matrix(1 -9.89866e-05 0.000132759 1 6.81445 22.501)' stroke='%23F0F0F0'/%3E%3Cpath d='M23.1858 7H19.3711C18.8188 7 18.3711 6.55228 18.3711 6V3.5V0.5L23.1858 7Z' fill='%232F80ED'/%3E%3C/svg%3E"); + } } .success { @@ -683,4 +687,48 @@ div { line-height: 35px; margin-top: 35px; margin-bottom: 35px; +} + +.messages_overlay { + position: fixed; + top: 0px; + right: 0px; + width: 30%; + display: flex; + flex-direction: column; + align-items: flex-start; + justify-content: flex-start; + z-index: 100; + gap: 10px 10px; + margin: 10px; + + .overlay_message_error { + position: relative; + width: 100%; + background-color: #df2525; + padding: 10px 15px; + font-size: 12px; + + h4, p { + color: #fff; + } + + h4 { + padding: 0px; + margin: 0px; + margin-bottom: 2px; + } + + .button { + position: absolute; + top: 8px; + right: 8px; + width: 16px; + height: 16px; + padding: 0; + border: 0; + background: url("/assets/images/icons/close-white.svg") no-repeat center; + background-size: 16px; + } + } } \ No newline at end of file diff --git a/lib/CRMRequest/index.js b/lib/CRMRequest/index.js new file mode 100644 index 0000000..a3322b2 --- /dev/null +++ b/lib/CRMRequest/index.js @@ -0,0 +1,72 @@ +// Next.js API route support: https://nextjs.org/docs/api-routes/introduction +import axios from 'axios'; +import { Cookies } from 'react-cookie'; +import cookie from 'cookie'; +import moment from 'moment'; +import jwt from 'jsonwebtoken'; +import { cors } from '../cors'; +import { inspect } from 'util'; + +export default async function CRMRequest(req, res, path, method, data, log = false) +{ + await cors(req, res); + + if(req.headers.cookie !== undefined) + { + const cookies = cookie.parse(req.headers?.cookie ? req.headers?.cookie : ""); + + if(cookies.jwt !== undefined && cookies.jwt !== null) + { + var client_jwt_decoded = jwt.verify(cookies.jwt, process.env.JWT_SECRET_CLIENT); + var crm_jwt = jwt.sign({ acc_number: client_jwt_decoded.acc_number }, process.env.JWT_SECRET_CRM, { noTimestamp: true }); + + if(log) + { + console.log("client_jwt_decoded", client_jwt_decoded); + console.log("crm_jwt", crm_jwt); + console.log("path", path); + } + + try + { + axios.request({ + url: path, + method, + headers: { + "Authorization": `Bearer ${ crm_jwt }`, + "Content-Type": "application/json" + }, + data, + }) + .then((crm_response) => + { + if(log) + { + console.log("crm_response for", path); + console.log("payload", payload); + console.log(inspect(crm_response.data, true, null, true)); + } + + res.status(200).json(crm_response.data); + }) + .catch((error) => + { + console.error(error); + console.error("-".repeat(30), "error.response.data:"); + console.error(error.response.data); + + res.status(500).json(error.response.data); + }); + } + catch(e) + { + console.error(e); + res.status(500).send(e); + } + } + else + { + res.status(403); + } + } +} \ No newline at end of file diff --git a/lib/CRMRequestGet/index.js b/lib/CRMRequestGet/index.js index 218dc3a..9b17def 100644 --- a/lib/CRMRequestGet/index.js +++ b/lib/CRMRequestGet/index.js @@ -1,13 +1,15 @@ // Next.js API route support: https://nextjs.org/docs/api-routes/introduction +import fs from 'fs'; import axios from 'axios'; import { Cookies } from 'react-cookie'; import cookie from 'cookie'; import moment from 'moment'; import jwt from 'jsonwebtoken'; -import { cors } from '../cors'; import { inspect } from 'util'; -export default async function CRMRequestGet(req, res, path, params) +import { cors } from '../cors'; + +export default async function CRMRequestGet({ req, res, path, params, data = undefined, log = false, headers = {}, options = {} }) { await cors(req, res); @@ -16,47 +18,55 @@ export default async function CRMRequestGet(req, res, path, params) const cookies = cookie.parse(req.headers?.cookie ? req.headers?.cookie : ""); //console.log("-".repeat(50)); - //console.log("CRMRequestGet", "req.body"); - //console.log(req.body); - if(cookies.jwt !== undefined && cookies.jwt !== null) { //console.log("cookies.jwt"); - //console.log(cookies.jwt); - var client_jwt_decoded = jwt.verify(cookies.jwt, process.env.JWT_SECRET_CLIENT); var crm_jwt = jwt.sign({ acc_number: client_jwt_decoded.acc_number }, process.env.JWT_SECRET_CRM, { noTimestamp: true }); - //console.log("client_jwt_decoded", client_jwt_decoded); - - //console.log("crm_jwt", crm_jwt); - + if(log) + { + console.log("client_jwt_decoded", client_jwt_decoded); + console.log("crm_jwt", crm_jwt); + } //console.log("path", path); - //console.log("params", { ...client_jwt_decoded, ...params }); + const payload = { ...{ acc_number: client_jwt_decoded.acc_number }, ...params }; + const request_options = { + headers: { ...{ "Authorization": `Bearer ${ crm_jwt }` }, ...headers }, + withCredentials: true, + }; + + if(data !== undefined) + { + request_options.data = data; + } + else + { + request_options.params = payload; + } try { - await axios.get(path, { - params: { ...{ acc_number: client_jwt_decoded.acc_number }, ...params }, - headers: { - "Authorization": `Bearer ${ crm_jwt }`, - }, - withCredentials: true, - }) + console.log({ options, __dirname }); + console.log("{ ...request_options, ...options }", { ...request_options, ...options }); + + await axios.get(path, { ...request_options, ...options }) .then((crm_response) => { - //console.log("crm_response for", path); - - //console.log(inspect(crm_response.data, true, null, true)); - + if(log) + { + console.log("crm_response for", path); + console.log("payload", payload); + console.log(inspect(crm_response.data, true, null, true)); + } res.status(200).json(crm_response.data); }) diff --git a/lib/CRMRequestPost/index.js b/lib/CRMRequestPost/index.js index 3e1e78f..b6afc40 100644 --- a/lib/CRMRequestPost/index.js +++ b/lib/CRMRequestPost/index.js @@ -7,7 +7,7 @@ import jwt from 'jsonwebtoken'; import { cors } from '../cors'; import { inspect } from 'util'; -export default async function CRMRequestPost(req, res, path, params) +export default async function CRMRequestPost({ req, res, path, params, headers = {}, options = {}, array = false, log = false }) { await cors(req, res); @@ -15,45 +15,42 @@ export default async function CRMRequestPost(req, res, path, params) { const cookies = cookie.parse(req.headers?.cookie ? req.headers?.cookie : ""); - //console.log("-".repeat(50)); - - //console.log("CRMRequestPost", "req.body"); - - //console.log(req.body); - - if(cookies.jwt !== undefined && cookies.jwt !== null) { - //console.log("cookies.jwt"); - - //console.log(cookies.jwt); - - var client_jwt_decoded = jwt.verify(cookies.jwt, process.env.JWT_SECRET_CLIENT); var crm_jwt = jwt.sign({ acc_number: client_jwt_decoded.acc_number }, process.env.JWT_SECRET_CRM, { noTimestamp: true }); - const payload = { ...{ acc_number: client_jwt_decoded.acc_number }, ...params }; - //console.log("path", path); - - //console.log("payload", payload); + if(log) + { + console.log("client_jwt_decoded", client_jwt_decoded); + console.log("crm_jwt", crm_jwt); + } + let payload; + if(array) + { + payload = params; + } + else + { + payload = { ...{ acc_number: client_jwt_decoded.acc_number }, ...params }; + } try { await axios.post(path, payload, { - headers: { - //"Content-Type": "application/json", - "Authorization": `Bearer ${ crm_jwt }`, - }, + headers: { ...{ "Content-Type": "application/json", "Authorization": `Bearer ${ crm_jwt }` }, ...headers }, withCredentials: true, }) .then((crm_response) => { - //console.log("crm_response for", path); - - //console.log(inspect(crm_response.data, true, null, true)); - + if(log) + { + console.log("crm_response for", path); + console.log("payload", payload); + console.log(inspect(crm_response.data, true, null, true)); + } res.status(200).json(crm_response.data); }) diff --git a/package.json b/package.json index 6f7a014..a27b9c6 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,7 @@ "next-with-less": "^1.0.1", "nextjs-cors": "^2.1.0", "node-fetch": "^3.3.1", + "nodemailer": "^6.9.7", "numeral": "^2.0.6", "pdf-lib": "^1.17.1", "pluralize-ru": "^1.0.1", diff --git a/pages/_document.js b/pages/_document.js index c114ad1..977a606 100644 --- a/pages/_document.js +++ b/pages/_document.js @@ -41,6 +41,28 @@ class Doc extends Document

+ +