EDO sign markup

This commit is contained in:
merelendor 2023-09-27 13:16:42 +03:00
parent 6129462606
commit 0377a41325
31 changed files with 400 additions and 181 deletions

View File

@ -4,6 +4,7 @@ import Router from 'next/router';
import moment from 'moment';
import * as actionTypes from '../constants/actionTypes';
import { getEDOList } from './edoActions';
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) =>
{
getEDOList({ dispatch }).then(() => {}).catch(() => {});
//console.log("getCompanyInfo", "response", response.data);
dispatch({ type: actionTypes.COMPANY, data: response.data });
resolve();
})

View File

@ -12,7 +12,7 @@ export const getEDOList = ({ dispatch, update = false }) =>
{
const url = `${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/edo/list`;
console.log("ACTION", "edo", "getList()", { url });
console.log("ACTION", "edo", "getEDOList()", { url });
return new Promise((resolve, reject) =>
{
@ -21,20 +21,37 @@ export const getEDOList = ({ dispatch, update = false }) =>
})
.then((response) =>
{
console.log("ACTION", "edo", "getList()", "response", response.data);
console.log("ACTION", "edo", "getEDOList()", "response", response.data);
dispatch({
type: actionTypes.EDO_LIST,
data: {
list: [
{
"box_name": "ООО С К \"МОНОЛИТ-РУ\"",
"box_id": "7785f775578d4646aea1d323e703065d@diadoc.ru"
}, {
"box_name": "ООО СК \"МОНОЛИТ-РУ\" (роуминг, ООО «Такском» (Файлер))",
"box_id": "b8fbc5c395f54deabe6b8d84a10921f0@diadoc.ru"
}
]
}
});
/*
dispatch({
type: actionTypes.EDO_LIST,
data: {
list: response.data
}
});
*/
resolve();
})
.catch((error) =>
{
console.error("ACTION", "edo", "getList()", "ERROR");
console.error("ACTION", "edo", "getEDOList()", "ERROR");
console.error(error);
dispatch({

View File

@ -196,7 +196,7 @@ class Offers extends Step
<td>{ offer.model_name }</td>
<td>{ offer.object_count }</td>
<td>
<div className="dosc_list">
<div className="docs_list">
<div className="row">
<div className="small-icon">
<p className="doc_name i-pdf">
@ -515,12 +515,12 @@ class DocumentsForm extends Step
{/*}
<div className="message documents">
<div className="doc_list">
<div className="dosc_list medium-icon">
<div className="docs_list medium-icon">
<div className="row">
<p className="doc_name i-pdf i-medium">123/2023 от 01.01.2023</p>
</div>
</div>
<div className="dosc_list medium-icon">
<div className="docs_list medium-icon">
<div className="row">
<p className="doc_name i-pdf i-medium">123/2023 от 01.01.2023</p>
</div>
@ -684,7 +684,7 @@ class SigningTypeSelection extends Step
return (
<div className="block-column">
<div className="dosc_list acts_list-checkbox medium-icon">
<div className="docs_list acts_list-checkbox medium-icon">
{ contracts.length > 0 ?
contracts.map((contract, index) => (
<div className="row" key={ index }>

105
components/EDOSign/index.js Normal file
View File

@ -0,0 +1,105 @@
import React from "react";
import { connect } from "react-redux";
import moment from "moment";
//import { getDeals, getDealOffers, getDealDocuments, getDealContracts } from "../../actions";
class EDOSign extends React.Component
{
constructor(props)
{
super(props)
this.state = {
list: null,
loading: false,
selected: {},
}
}
static getDerivedStateFromProps(nextProps, prevState)
{
console.log("EDOSign", "getDerivedStateFromProps", { nextProps });
return {
list: nextProps.list,
}
}
componentDidMount()
{
if(this.state.selected.box_id === undefined)
{
this.setState({ selected: this.state.list !== null && this.state.list[0] !== undefined ? this.state.list[0] : {} });
}
}
_handle_onFormSubmit = () =>
{
}
_handle_onSelectOperator = (operator) =>
{
this.setState({ selected: operator });
}
render()
{
const { list, loading, selected } = this.state;
const { onCancel, document } = this.props;
console.log({ list });
return (
<>
<div className="docs_list medium-icon">
<p className="list_title">Подписание через ЭДО</p>
</div>
<div className="docs_list medium-icon">
<p className="doc_name i-pdf extension edo_sign_document" data-format={ document.extension }>
{ document.name }
<span style={{ width: "100%" }}>
{ document.number } от{" "} { moment(document.date).format("DD.MM.YYYY") }
</span>
{ document.type !== undefined && (<span>{ document.type }</span>) }
</p>
</div>
<form ref={ this.ref_form } onSubmit={ this._handle_onFormSubmit } onKeyDown={(e) => {if (e.key === 'Enter') e.preventDefault() }}>
<div className="form_field edo_list_field">
<label>Выберите оператора для отправки пакета документов</label>
<div className="edo_list_selection">
{ list !== undefined && list !== null && list.map((operator, index) => (
<div className="form_field checkbox item" key={ index }>
<input type="radio"
checked={ operator.box_id === selected.box_id }
hidden=""
id={ `operator_${ index }` }
name={ `operator_${ index }` }
onChange={ (event) => this._handle_onSelectOperator(operator) }
disabled={ false }
/>
<label htmlFor={ `operator_${ index }` } className="unselectable">{ operator.box_name }</label>
</div>
)) }
</div>
</div>
<div className="form_field" style={{ display: "flex", justifyContent: "space-between" }}>
<button className="button button-blue" onClick={ onCancel }>Отменить</button>
<button type="submit" className="button button-blue">
{ loading ? (
<SpinnerCircular size={24} thickness={100} speed={100} color="rgba(255, 255, 255, 1)" secondaryColor="rgba(255, 255, 255, 0.5)" style={{ marginTop: "4px" }}/>
) : "Продолжить" }
</button>
</div>
</form>
</>
)
}
}
function mapStateToProps(state, ownProps)
{
console.log("EDOSign", "mapStateToProps", { state: state });
return {
list: state.edo.list,
}
}
export default connect(mapStateToProps)(EDOSign)

View File

@ -127,7 +127,7 @@ export default class FilesList extends React.Component
{ files.map((file, index) => {
if(file.name === undefined) { return null; }
return (
<div key={ index } className="dosc_list medium-icon" style={{ marginBottom: "2%", position: "relative", border: "1px dashed rgb(28, 1, 169)", width: "32%", height: "100px", borderRadius: "4px", display: "flex", alignItems: "center", justifyContent: "center", }}>
<div key={ index } className="docs_list medium-icon" style={{ marginBottom: "2%", position: "relative", border: "1px dashed rgb(28, 1, 169)", width: "32%", height: "100px", borderRadius: "4px", display: "flex", alignItems: "center", justifyContent: "center", }}>
<div className="row" style={{ alignItems: "center", justifyContent: "center", display: "flex", flexDirection: "row", flex: 1, marginBottom: "0px" }}>
<p className="doc_name extension" data-format={ this._renderFileType(file) } style={{ wordBreak: "break-all", lineHeight: "15px", }}>{ this._renderFileName(file.name) }{/*}<span style={{width: "100%"}}>Постановление</span>{*/}</p>
</div>
@ -141,7 +141,7 @@ export default class FilesList extends React.Component
}) }
{ loading && (
<div className="dosc_list medium-icon" style={{ position: "relative", border: "1px dashed rgb(28, 1, 169)", width: "32%", height: "100px", borderRadius: "4px", display: "flex", alignItems: "center", justifyContent: "center", }}>
<div className="docs_list medium-icon" style={{ position: "relative", border: "1px dashed rgb(28, 1, 169)", width: "32%", height: "100px", borderRadius: "4px", display: "flex", alignItems: "center", justifyContent: "center", }}>
<div className="row" style={{ alignItems: "center", justifyContent: "center", display: "flex", flexDirection: "row", flex: 1, marginBottom: "0px" }}>
<div style={{ display: "flex", justifyContent: "center", alignItems: "center", }}>
<SpinnerCircular size={ 50 } thickness={ 100 } speed={ 100 } color="rgba(28, 1, 169, 1)" secondaryColor="rgba(236, 239, 244, 1)" />

View File

@ -233,7 +233,7 @@ class Form_8_Signing extends QuestionnaireForm
<FormMessage type="error" title="Ошибка" message="К сожалению в процессе создания документа возникла ошибка. Пожалуйста, обратитесь к сотруднику Отдела по работе с клиентами или попробуйте еще раз."/>
)}
{ !sign.digital && (
<div className="dosc_list medium-icon">
<div className="docs_list medium-icon">
<div className="row">
<p className="doc_name i-pdf extension">
{ filename }

View File

@ -151,7 +151,7 @@ class Form_9_Status extends QuestionnaireForm
</React.Fragment>
) }
<div className="questionnaire status_action" style={{ width: "100%" }}>
<div className="dosc_list medium-icon">
<div className="docs_list medium-icon">
<div className="row">
<p className="doc_name i-pdf extension">
{ file.name }

View File

@ -197,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 {

View File

@ -236,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;
}
}

View File

@ -1394,10 +1394,10 @@
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;

View File

@ -1650,7 +1650,7 @@
padding-bottom: 30px;
@media all and (max-width: 720px) {
.dosc_list {
.docs_list {
width: 100% !important;
.doc_name {

View File

@ -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;
@ -3570,11 +3570,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;
@ -4949,22 +4949,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 +5023,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 +5085,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 +5200,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;
}
}
@ -5881,7 +5881,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 {
@ -6216,3 +6216,30 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block .block_body .fines_
.edo_detail p {
margin: 0px;
}
.edo_list_field {
align-items: flex-start !important;
}
.edo_list_selection {
flex: 1;
margin-top: -12px;
}
.edo_list_selection .item {
padding: 16px 0px;
margin: 0px !important;
border-bottom: solid 1px #edeff5;
}
.edo_list_selection .item label:first {
margin-top: 0px;
}
.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;
margin: 30px 0px !important;
align-items: flex-start;
}

View File

@ -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;
@ -2655,7 +2655,7 @@ main {
// Документы
.dosc_list {
.docs_list {
.list_title {
margin-top: 45px;
font-weight: 700;
@ -3992,7 +3992,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) {
@ -5584,7 +5584,7 @@ main .dropdown_blocks_list .dropdown_block .block_body {
;
}
.dosc_list {
.docs_list {
display: flex;
gap: 0 20px;
flex-wrap: wrap;
@ -5667,7 +5667,7 @@ main .dropdown_blocks_list .dropdown_block .block_body {
margin-bottom: 8px;
}
.dosc_list {
.docs_list {
display: flex;
flex-wrap: wrap;
@ -5753,7 +5753,7 @@ main .dropdown_blocks_list .dropdown_block .block_body {
}
@media all and (max-width: 768px) {
.dosc_list {
.docs_list {
margin-top: 20px;
.row {
@ -5887,7 +5887,7 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block {
}
.dosc_list {
.docs_list {
@media all and (max-width: 767px) {
margin-bottom: 15px;
}
@ -6734,7 +6734,7 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block {
margin-bottom: 60px;
}
.dosc_list {
.docs_list {
a {
text-decoration: none;
}
@ -7161,4 +7161,42 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block {
p {
margin: 0px;
}
}
.edo_list_field {
align-items: flex-start !important;
}
.edo_list_selection {
flex: 1;
margin-top: -12px;
.item {
padding: 16px 0px;
margin: 0px !important;
border-bottom: solid 1px #edeff5;
label {
// padding-top: 16px;
&:first {
margin-top: 0px;
}
}
&: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;
}

View File

@ -50,7 +50,7 @@ export default function ActsPage()
</aside>
<article>
<div className="acts_wrapper">
<div className="dosc_list acts_list-checkbox">
<div className="docs_list acts_list-checkbox">
<div className="row">
<p className="doc_name">
<input type="checkbox" name="name" id="name" />

View File

@ -40,7 +40,7 @@ export default async function handler(req, res)
documentTypeNumber: id,
documentName: filename,
});
const path = `${ process.env.CRM_API_HOST }/lk/document?${ payload.toString() }`;
const path = `${ process.env.CRM_API_HOST }/lk/Document/upload?${ payload.toString() }`;
console.log({ path });
upload.single("file")(req, {}, err =>

View File

@ -9,43 +9,55 @@ export default async function handler(req, res)
{
await cors(req, res);
if(req.headers.cookie !== undefined)
return new Promise(async (resolve) =>
{
const cookies = cookie.parse(req.headers?.cookie ? req.headers?.cookie : "");
if(cookies.jwt !== undefined && cookies.jwt !== null)
if(req.headers.cookie !== undefined)
{
var client_jwt_decoded = jwt.verify(cookies.jwt, process.env.JWT_SECRET_CLIENT);
var crm_jwt = jwt.sign(client_jwt_decoded, process.env.JWT_SECRET_CRM, { noTimestamp: true });
const cookies = cookie.parse(req.headers?.cookie ? req.headers?.cookie : "");
try
if(cookies.jwt !== undefined && cookies.jwt !== null)
{
axios.get(`${ process.env.CRM_API_HOST }/lk/Contract/GetUPDPrintForm/`, {
params: { ...client_jwt_decoded, contract_number: req.query.contract, num: req.query.num, type: req.query.type, date: req.query.date },
responseType: 'arraybuffer',
headers: {
"Authorization": `Bearer ${ crm_jwt }`,
}
})
.then((crm_response) =>
var client_jwt_decoded = jwt.verify(cookies.jwt, process.env.JWT_SECRET_CLIENT);
var crm_jwt = jwt.sign(client_jwt_decoded, process.env.JWT_SECRET_CRM, { noTimestamp: true });
try
{
res.status(200).send(crm_response.data);
})
.catch((error) =>
axios.get(`${ process.env.CRM_API_HOST }/lk/Contract/GetUPDPrintForm/`, {
params: { ...client_jwt_decoded, contract_number: req.query.contract, num: req.query.num, type: req.query.type, date: req.query.date },
responseType: 'arraybuffer',
headers: {
"Authorization": `Bearer ${ crm_jwt }`,
}
})
.then((crm_response) =>
{
res.status(200).send(crm_response.data);
resolve();
})
.catch((error) =>
{
console.error(error);
res.status(500).send();
resolve();
});
}
catch(e)
{
console.error(error);
res.status(500);
});
console.error(e);
res.status(500).send();
resolve();
}
}
catch(e)
else
{
console.error(e);
res.status(500);
res.status(403).send();
resolve();
}
}
else
{
res.status(403);
res.status(403).send();
resolve();
}
}
});
}

View File

@ -59,7 +59,7 @@ export default function ClosingActsPage()
</form>
</div>
<div className="dosc_list">
<div className="docs_list">
<div className="row">
<p className="doc_name i-doc">
<a href="#">Договор</a>

View File

@ -22,6 +22,7 @@ import {
} from "../../actions";
import AccountLayout from "../components/Layout/Account";
import ContractHeader from "./components/ContractHeader";
import EDOSign from "../../components/EDOSign";
class ContractPage extends React.Component
{
@ -30,11 +31,13 @@ class ContractPage extends React.Component
super(props);
this.state =
{
loading: false,
loading: false,
contracts_info: {},
unsigned: null,
signed: null,
rules: null,
unsigned: null,
signed: null,
rules: null,
edo_mode: false,
edo_document: {},
};
}
@ -93,6 +96,12 @@ class ContractPage extends React.Component
.catch(() => {});
}
_handle_onEDOClick = (file) =>
{
console.log({ file });
this.setState({ edo_document: file, edo_mode: true });
}
_renderDocuments = (documents, type) =>
{
const types = {
@ -110,13 +119,16 @@ class ContractPage extends React.Component
return (
<div className="row" key={ file_index }>
<p className="doc_name i-pdf extension" data-format={ file.extension }>
<p className="doc_name i-pdf extension" data-format={ file.extension } style={{ flex: 1 }}>
{ types[ type ] }
<span style={{ width: "100%" }}>
{ file.number } от{" "}{ moment(file.date).format("DD.MM.YYYY") }
</span>
{ file.type !== undefined && (<span>{ file.type }</span>) }
</p>
{/**/}
<a className="button button-blue" onClick={ () => this._handle_onEDOClick({ ...file, ...{ name: types[ type ] } }) }>Подписать по ЭДО</a>
{/**/}
<DownloadPdfButton
id={ file.url }
filename={`evoleasing_${ types[ type ] }_${ file.type }_${ file.number }_${ file.date }.${ file.extension }`}
@ -128,9 +140,6 @@ class ContractPage extends React.Component
description: file.type,
}}
/>
{/*}
<a className="button button-blue">Подписать по ЭДО</a>
{*/}
</div>
);
});
@ -139,7 +148,7 @@ class ContractPage extends React.Component
render()
{
const { number } = this.props;
const { loading, contracts_info, unsigned, signed, rules } = this.state;
const { loading, contracts_info, unsigned, signed, rules, edo_mode, edo_document } = this.state;
let { date, car, status } = contracts_info[ number ] !== undefined ? contracts_info[ number ] : {};
@ -173,49 +182,55 @@ class ContractPage extends React.Component
</div>
<div className="aside_container about">
<InnerMenu number={ number } status={ status } { ...this.props } />
<article>
<article className="questionnaire edo_detail">
{ loading ? (
<div className="table_row table_header" style={ { minHeight: 300, display: "flex", justifyContent: "center", alignItems: "center", } }>
<SpinnerCircular size={ 90 } thickness={ 51 } speed={ 100 } color="rgba(28, 1, 169, 1)" secondaryColor="rgba(236, 239, 244, 1)" />
</div>
) : (
<div className="dosc_list medium-icon">
{ unsigned !== undefined && unsigned !== null && unsigned.documents !== undefined && unsigned.documents !== null && unsigned.count > 0 && (
<>
<p className="list_title">К подписанию</p>
{ this._renderDocuments(unsigned.documents, "contracts") }
{ this._renderDocuments(unsigned.documents, "agreements") }
{ this._renderDocuments(unsigned.documents, "assignments") }
{ this._renderDocuments(unsigned.documents, "redemptions") }
{ this._renderDocuments(unsigned.documents, "act_pp") }
</>
) }
{ signed !== undefined && signed !== null && signed.documents !== undefined && signed.documents !== null && signed.count > 0 && (
<>
<p className="list_title">Действующие</p>
{ this._renderDocuments(signed.documents, "contracts") }
{ this._renderDocuments(signed.documents, "agreements") }
{ this._renderDocuments(signed.documents, "assignments") }
{ this._renderDocuments(signed.documents, "redemptions") }
{ this._renderDocuments(signed.documents, "act_pp") }
</>
) }
{ rules !== undefined && rules !== null && rules.map((document, index) => (
<div className="row" key={ index} >
<p className="doc_name i-pdf">
{ document.name }
<span style={{ width: "100%" }}>
Дата вступления в силу: { document.active_from }
</span>
</p>
<DownloadPdfButton
url={ document.url }
filename={ document.filename }
bitrix={ true }
/>
<>
{ edo_mode ? (
<EDOSign document={ this.state.edo_document } onCancel={ () => this.setState({ edo_mode: false }) }/>
) : (
<div className="docs_list medium-icon">
{ unsigned !== undefined && unsigned !== null && unsigned.documents !== undefined && unsigned.documents !== null && unsigned.count > 0 && (
<>
<p className="list_title">К подписанию</p>
{ this._renderDocuments(unsigned.documents, "contracts") }
{ this._renderDocuments(unsigned.documents, "agreements") }
{ this._renderDocuments(unsigned.documents, "assignments") }
{ this._renderDocuments(unsigned.documents, "redemptions") }
{ this._renderDocuments(unsigned.documents, "act_pp") }
</>
) }
{ signed !== undefined && signed !== null && signed.documents !== undefined && signed.documents !== null && signed.count > 0 && (
<>
<p className="list_title">Действующие</p>
{ this._renderDocuments(signed.documents, "contracts") }
{ this._renderDocuments(signed.documents, "agreements") }
{ this._renderDocuments(signed.documents, "assignments") }
{ this._renderDocuments(signed.documents, "redemptions") }
{ this._renderDocuments(signed.documents, "act_pp") }
</>
) }
{ rules !== undefined && rules !== null && rules.map((document, index) => (
<div className="row" key={ index} >
<p className="doc_name i-pdf">
{ document.name }
<span style={{ width: "100%" }}>
Дата вступления в силу: { document.active_from }
</span>
</p>
<DownloadPdfButton
url={ document.url }
filename={ document.filename }
bitrix={ true }
/>
</div>
)) }
</div>
)) }
</div>
) }
</>
) }
</article>
</div>

View File

@ -154,7 +154,7 @@ class ContractDocumentsPage extends React.Component
<p>{TYPES[type]}</p>
</div>
</div>
<div className="dosc_list medium-icon">
<div className="docs_list medium-icon">
{ documents
.slice(0, opened.indexOf(type) > -1 ? documents.length : 3)
.map((doc, index) =>
@ -174,10 +174,12 @@ class ContractDocumentsPage extends React.Component
num={ doc.num }
date={ doc.date }
type={ doc.type }
contract_number={ number }
document_type={ doc.type }
document_name={ doc.num }
document_date={ doc.date }
log={{
contract_number: number,
document_type: doc.type,
document_name: doc.num,
document_date: doc.date,
}}
/>
</div>
);

View File

@ -172,7 +172,7 @@ class ContractFinesPage extends React.Component
</p>
</div>
{ fine.status_code !== "PaidIndependently" && (
<div className="dosc_list medium-icon">
<div className="docs_list medium-icon">
<div className="row">
<p
className="doc_name i-pdf i-medium"
@ -186,11 +186,13 @@ class ContractFinesPage extends React.Component
before={ fine.status_code === "NotPaid" ? true : false }
contract={ number }
num={ fine.fine_number }
contract_number={ number }
document_type={ "finegibdd" }
document_name={ fine.fine_number }
document_date={ fine.fine_date }
description={ `Место нарушения: ${ fine.violation_place } Дата нарушения: ${ fine.violation_date }` }
log={{
contract_number: number,
document_type: "finegibdd",
document_name: fine.fine_number,
document_date: fine.fine_date,
description: `Место нарушения: ${ fine.violation_place } Дата нарушения: ${ fine.violation_date }`,
}}
/>
</div>
</div>

View File

@ -153,7 +153,7 @@ class ContractServicesPage extends React.Component {
<li>Дата: <b>01/01/2020 </b></li>
<li>Штраф:{" "}<b>п. 1.15 - Несоблюдение правил парковки </b></li>
<li>
<div className="dosc_list medium-icon">
<div className="docs_list medium-icon">
<div className="row">
<p className="doc_name i-pdf extension">
01/20/2020 (.PDF)

View File

@ -95,7 +95,7 @@ class ContractPage extends React.Component
<SpinnerCircular size={90} thickness={51} speed={100} color="rgba(28, 1, 169, 1)" secondaryColor="rgba(236, 239, 244, 1)" />
</div>
) : (
<div className="dosc_list">
<div className="docs_list">
{ materials !== undefined && materials !== null && materials.map((document, index ) => (
<div className="row" key={ index }>
<p className="doc_name i-pdf">

View File

@ -112,7 +112,7 @@ class FinalsPage extends React.Component
<SpinnerCircular size={90} thickness={51} speed={100} color="rgba(28, 1, 169, 1)" secondaryColor="rgba(236, 239, 244, 1)" />
</div>
) : (
<div className="dosc_list" style={ contracts !== undefined && contracts !== null && contracts.length > 0 ? {} : { display: "flex", justifyContent: "center" }}>
<div className="docs_list" style={ contracts !== undefined && contracts !== null && contracts.length > 0 ? {} : { display: "flex", justifyContent: "center" }}>
{ contracts !== undefined && contracts !== null && (
<>
{ contracts.length > 0 ? contracts.map((contract, index) => (

View File

@ -248,7 +248,7 @@ class ReconciliationsPage extends React.Component
<>
{ contracts !== undefined && contracts !== null && contracts.length > 0 ? (
<>
<div className="dosc_list acts_list-checkbox">
<div className="docs_list acts_list-checkbox">
<div className="row">
<p className="doc_name">
<input type="checkbox" name="all" id="all" checked={ checked_all } onChange={ this._handle_onAllContracts } />

View File

@ -177,7 +177,7 @@ class QuestionnairePage extends React.Component {
</button>
</div>
<div className="questionnaire status_action" style={{ width: "100%" }}>
<div className="dosc_list medium-icon">
<div className="docs_list medium-icon">
<div className="row">
<p className="doc_name i-pdf extension">
1234567 от 21.01.2021

View File

@ -162,7 +162,7 @@ class SupportAppealsPage extends React.Component
</>
) }
{ appeal.documents.length > 0 && (
<div className="dosc_list medium-icon">
<div className="docs_list medium-icon">
{ appeal.documents.map((file, index) => {
if(file.doc_direction !== "incoming") { return null; }
@ -187,7 +187,7 @@ class SupportAppealsPage extends React.Component
<p dangerouslySetInnerHTML={{ __html: appeal.answer.replace("\\n", "<br/>") }}></p>
) }
{ appeal.documents.length > 0 && (
<div className="dosc_list medium-icon">
<div className="docs_list medium-icon">
{ appeal.documents.map((file, index) => {
if(file.doc_direction !== "outgoing") { return null; }
return (
@ -250,7 +250,7 @@ class SupportAppealsPage extends React.Component
<div className="item_text">
<p><b>Текст ответа ОРК</b></p>
<p>Текстовый контент</p>
<div className="dosc_list medium-icon">
<div className="docs_list medium-icon">
<div className="row">
<p className="doc_name i-pdf extension">
2021_1655 от 20.04.2021

View File

@ -90,7 +90,7 @@ class ContractPage extends React.Component
<p>
<b>Документы</b>
</p>
<div className="dosc_list medium-icon">
<div className="docs_list medium-icon">
<div className="row">
<p className="doc_name i-pdf extension">
2021_1655 от 20.04.2021

View File

@ -295,7 +295,7 @@ class SupportPage extends React.Component
{ question.templates !== null && (
<div className="column_text_block">
<p><b>Шаблоны документов</b></p>
<div className="dosc_list medium-icon">
<div className="docs_list medium-icon">
{ question.templates.map((template, index) => (<TemplateFile key={ `template_${ index }` } template={ template } />)) }
</div>
</div>

View File

@ -458,7 +458,7 @@ class SupportRequestPage extends React.Component
{ procedure.templates !== null && (
<div className="column_text_block">
<p><b>Документы</b></p>
<div className="dosc_list"> {/* medium-icon */}
<div className="docs_list"> {/* medium-icon */}
{ procedure.templates.map((template, index) => (<TemplateFile key={ `template_${ index }` } template={ template } />)) }
</div>
</div>

View File

@ -75,7 +75,7 @@ export default function TransactionPage()
</div>
<div className="dosc_list medium-icon">
<div className="docs_list medium-icon">
<div className="row">
<p className="doc_name i-pdf i-medium">
Дополнительное соглашение 1

View File

@ -52,7 +52,7 @@ const makeStore = (context) =>
const persistConfig = {
key: 'lkevoleasing',
whitelist: [ 'auth', 'user', 'company', 'events', 'companies', 'contracts_info', 'contract_events', 'contract_fines', 'questionnaire'],
whitelist: [ 'auth', 'user', 'company', 'events', 'companies', 'contracts_info', 'contract_events', 'contract_fines', 'questionnaire', 'edo' ],
storage
};