204 lines
4.5 KiB
JavaScript
204 lines
4.5 KiB
JavaScript
import React from "react";
|
|
import moment from "moment";
|
|
import { SpinnerCircular } from "spinners-react";
|
|
|
|
import DateInput from "../../../components/DatePicker";
|
|
|
|
import { getReconciliationFile } from "../../../../actions";
|
|
|
|
export default class ReconciliationForm extends React.Component
|
|
{
|
|
constructor(props)
|
|
{
|
|
super(props);
|
|
this.state = {
|
|
loading: false,
|
|
valid_date_start: null,
|
|
valid_date_end: null,
|
|
period_date_start: null,
|
|
period_date_end: null,
|
|
reconciliation_requested: false,
|
|
reconciliation_disabled: false,
|
|
};
|
|
}
|
|
|
|
componentDidMount()
|
|
{
|
|
const de = moment().toDate();
|
|
this.setState( { period_date_end: de, valid_date_end: de }, );
|
|
}
|
|
|
|
componentDidUpdate(prevProps, prevState)
|
|
{
|
|
if (this.state.period_date_start === null && this.props.contract_date !== null)
|
|
{
|
|
const ds = moment(this.props.contract_date).toDate();
|
|
this.setState({ period_date_start: ds, valid_date_start: ds });
|
|
}
|
|
}
|
|
|
|
_handle_onReconciliationFileRequest = () =>
|
|
{
|
|
const { number } = this.props;
|
|
const { reconciliation_requested, period_date_start, period_date_end } = this.state;
|
|
|
|
if (!reconciliation_requested)
|
|
{
|
|
this.setState({ reconciliation_requested: true }, () =>
|
|
{
|
|
const date_from = moment(period_date_start).format("YYYY-MM-DD");
|
|
const date_to = moment(period_date_end).format("YYYY-MM-DD");
|
|
|
|
getReconciliationFile({
|
|
contract: number,
|
|
date_from: date_from,
|
|
date_to: date_to,
|
|
filename: `${ number }_reconciliation_${ date_from }_${ date_to }.pdf`,
|
|
})
|
|
.then(() => {
|
|
this.setState({ reconciliation_requested: false });
|
|
})
|
|
.catch(() => {
|
|
this.setState({ reconciliation_requested: false });
|
|
});
|
|
});
|
|
}
|
|
};
|
|
|
|
_handle_onPeriodDate_start = (date) =>
|
|
{
|
|
const {
|
|
valid_date_start,
|
|
valid_date_end,
|
|
period_date_start,
|
|
period_date_end,
|
|
} = this.state;
|
|
|
|
const md = moment(date, "DD.MM.YYYY");
|
|
|
|
if (md.isValid())
|
|
{
|
|
if (date >= valid_date_start && date <= valid_date_end)
|
|
{
|
|
if (date < period_date_end)
|
|
{
|
|
this.setState({
|
|
period_date_start: date,
|
|
reconciliation_disabled: false,
|
|
});
|
|
}
|
|
else
|
|
{
|
|
this.setState({
|
|
period_date_start: date,
|
|
reconciliation_disabled: true,
|
|
});
|
|
}
|
|
}
|
|
else
|
|
{
|
|
this.setState({
|
|
period_date_start: date,
|
|
reconciliation_disabled: true,
|
|
});
|
|
}
|
|
}
|
|
else
|
|
{
|
|
this.setState({ reconciliation_disabled: true });
|
|
}
|
|
};
|
|
|
|
_handle_onPeriodDate_end = (date) =>
|
|
{
|
|
const {
|
|
valid_date_start,
|
|
valid_date_end,
|
|
period_date_start,
|
|
period_date_end,
|
|
} = this.state;
|
|
|
|
if (moment(date).isValid())
|
|
{
|
|
if (date >= valid_date_start && date <= valid_date_end)
|
|
{
|
|
if (date > period_date_start)
|
|
{
|
|
this.setState({
|
|
period_date_end: date,
|
|
reconciliation_disabled: false,
|
|
});
|
|
}
|
|
else
|
|
{
|
|
this.setState({
|
|
period_date_end: date,
|
|
reconciliation_disabled: true,
|
|
});
|
|
}
|
|
}
|
|
else
|
|
{
|
|
this.setState({ period_date_end: date, reconciliation_disabled: true });
|
|
}
|
|
}
|
|
else
|
|
{
|
|
this.setState({ reconciliation_disabled: true });
|
|
}
|
|
};
|
|
|
|
render()
|
|
{
|
|
const {
|
|
period_date_start,
|
|
period_date_end,
|
|
valid_date_start,
|
|
valid_date_end,
|
|
reconciliation_requested,
|
|
reconciliation_disabled,
|
|
} = this.state;
|
|
|
|
return (
|
|
<div className="reconciliation_form">
|
|
<p>Акт сверки</p>
|
|
<div className="form_group">
|
|
<div className="form_field">
|
|
<DateInput
|
|
placeholder="Дата начала периода"
|
|
value={ period_date_start }
|
|
min={ valid_date_start }
|
|
max={ valid_date_end }
|
|
onChange={ this._handle_onPeriodDate_start }
|
|
/>
|
|
</div>
|
|
<div className="form_field">
|
|
<DateInput
|
|
placeholder="Дата окончания периода"
|
|
value={ period_date_end }
|
|
min={ valid_date_start }
|
|
max={ valid_date_end }
|
|
onChange={ this._handle_onPeriodDate_end }
|
|
/>
|
|
</div>
|
|
</div>
|
|
<div className="form_group">
|
|
<button
|
|
className="button button-blue"
|
|
disabled={ reconciliation_disabled }
|
|
onClick={ () => { this._handle_onReconciliationFileRequest(); }}
|
|
>
|
|
<>
|
|
{ reconciliation_requested ? (
|
|
<SpinnerCircular size={ 24 } thickness={ 100 } speed={ 100 } color="rgba(255, 255, 255, 1)" secondaryColor="rgba(255, 255, 255, 0.5)"/>
|
|
) : (
|
|
"Скачать"
|
|
) }
|
|
</>
|
|
</button>
|
|
{/*<button className="button button-blue">Отправить в ЭДО</button>*/}
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|
|
} |