2023-05-24 19:23:24 +03:00
|
|
|
|
import React, { useState } from "react";
|
|
|
|
|
import { useDispatch, useSelector } from "react-redux";
|
|
|
|
|
import { Link } from "react-router-dom";
|
2023-05-11 19:54:15 +03:00
|
|
|
|
|
2023-05-31 08:36:15 +03:00
|
|
|
|
import {
|
|
|
|
|
getReportDate,
|
|
|
|
|
getSendRequest,
|
|
|
|
|
setSendRequest,
|
|
|
|
|
} from "@redux/reportSlice";
|
|
|
|
|
|
2023-05-30 10:10:34 +03:00
|
|
|
|
import { apiRequest } from "@api/request";
|
2023-05-31 08:36:15 +03:00
|
|
|
|
|
2023-05-11 19:54:15 +03:00
|
|
|
|
import {
|
|
|
|
|
getCorrectDate,
|
|
|
|
|
getCreatedDate,
|
|
|
|
|
hourOfNum,
|
2023-05-30 10:10:34 +03:00
|
|
|
|
} from "@components/Calendar/calendarHelper";
|
2023-05-30 10:54:47 +03:00
|
|
|
|
import { Loader } from "@components/Common/Loader/Loader";
|
2023-05-11 19:54:15 +03:00
|
|
|
|
|
|
|
|
|
import "./shortReport.scss";
|
|
|
|
|
|
2023-05-31 11:24:46 +03:00
|
|
|
|
export const ShortReport = () => {
|
2023-05-11 19:54:15 +03:00
|
|
|
|
const reportDate = useSelector(getReportDate);
|
|
|
|
|
|
2023-05-12 12:44:28 +03:00
|
|
|
|
const sendReport = useSelector(getSendRequest);
|
2023-05-11 19:54:15 +03:00
|
|
|
|
const dispatch = useDispatch();
|
|
|
|
|
|
|
|
|
|
const [taskText, setTaskText] = useState([]);
|
|
|
|
|
const [difficulties, setDifficulties] = useState([]);
|
|
|
|
|
const [tomorrowTask, setTomorrowTask] = useState([]);
|
|
|
|
|
const [totalHours, setTotalHours] = useState(0);
|
|
|
|
|
const [loader, setLoader] = useState(false);
|
2023-05-18 17:42:29 +03:00
|
|
|
|
const [dateCreate, setDateCreate] = useState("");
|
2023-05-11 19:54:15 +03:00
|
|
|
|
|
|
|
|
|
function getReportFromDate(day) {
|
|
|
|
|
setLoader(true);
|
|
|
|
|
setTaskText([]);
|
|
|
|
|
setDifficulties([]);
|
|
|
|
|
setTomorrowTask([]);
|
2023-05-18 19:52:37 +03:00
|
|
|
|
setTotalHours(0);
|
2023-05-11 19:54:15 +03:00
|
|
|
|
apiRequest(
|
|
|
|
|
`reports/find-by-date?user_card_id=${localStorage.getItem(
|
|
|
|
|
"cardId"
|
|
|
|
|
)}&date=${day}`
|
|
|
|
|
).then((res) => {
|
|
|
|
|
let spendTime = 0;
|
|
|
|
|
for (const item of res) {
|
2023-05-18 17:42:29 +03:00
|
|
|
|
setDateCreate(item.created_at);
|
2023-05-11 19:54:15 +03:00
|
|
|
|
if (item.difficulties) {
|
|
|
|
|
setDifficulties((prevArray) => [...prevArray, item.difficulties]);
|
|
|
|
|
}
|
|
|
|
|
if (item.tomorrow) {
|
|
|
|
|
setTomorrowTask((prevArray) => [...prevArray, item.tomorrow]);
|
|
|
|
|
}
|
|
|
|
|
item.task.map((task) => {
|
|
|
|
|
const taskInfo = {
|
|
|
|
|
hours: task.hours_spent,
|
|
|
|
|
task: task.task,
|
|
|
|
|
id: task.id,
|
|
|
|
|
};
|
|
|
|
|
if (task.hours_spent) {
|
|
|
|
|
spendTime += Number(task.hours_spent);
|
|
|
|
|
}
|
|
|
|
|
setTaskText((prevArray) => [...prevArray, taskInfo]);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
setTotalHours(spendTime);
|
|
|
|
|
setLoader(false);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2023-05-12 12:44:28 +03:00
|
|
|
|
if (sendReport) {
|
2023-05-11 19:54:15 +03:00
|
|
|
|
dispatch(setSendRequest(false));
|
|
|
|
|
getReportFromDate(getCreatedDate(reportDate));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<div>
|
2023-05-12 12:44:28 +03:00
|
|
|
|
<div className="viewReport__info short-report">
|
2023-05-16 19:20:37 +03:00
|
|
|
|
<div className="viewReport__title-box">
|
|
|
|
|
<h2 className="viewReport__title">
|
|
|
|
|
Ваши отчеты - <span>просмотр отчета за день</span>
|
|
|
|
|
</h2>
|
2023-05-18 17:42:29 +03:00
|
|
|
|
<Link to={`../view/${dateCreate}`}>
|
|
|
|
|
Посмотреть подробнее об отчете
|
|
|
|
|
</Link>
|
2023-05-16 19:20:37 +03:00
|
|
|
|
</div>
|
|
|
|
|
|
2023-05-11 19:54:15 +03:00
|
|
|
|
<div className="viewReport__bar">
|
|
|
|
|
<h3 className="viewReport__bar__date">
|
|
|
|
|
{getCorrectDate(reportDate)}
|
|
|
|
|
</h3>
|
|
|
|
|
<p className="viewReport__bar__hours">
|
|
|
|
|
Вами потрачено на работу :{" "}
|
|
|
|
|
<span>
|
|
|
|
|
{totalHours} {hourOfNum(totalHours)}
|
|
|
|
|
</span>
|
|
|
|
|
</p>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
2023-05-18 19:52:37 +03:00
|
|
|
|
{loader && <Loader style="green" />}
|
2023-05-11 19:54:15 +03:00
|
|
|
|
{Boolean(taskText.length) && (
|
|
|
|
|
<div className="viewReport__content">
|
|
|
|
|
<div className="table__container">
|
|
|
|
|
<table className="viewReport__done">
|
|
|
|
|
<thead>
|
|
|
|
|
<tr>
|
|
|
|
|
<th>
|
|
|
|
|
<p>Какие задачи были выполнены?</p>
|
|
|
|
|
</th>
|
|
|
|
|
<th>
|
|
|
|
|
<p>Время</p>
|
|
|
|
|
</th>
|
|
|
|
|
</tr>
|
|
|
|
|
</thead>
|
|
|
|
|
<tbody>
|
|
|
|
|
{taskText.length &&
|
|
|
|
|
taskText.map((task, index) => {
|
|
|
|
|
return (
|
|
|
|
|
<tr key={task.id}>
|
|
|
|
|
<td>
|
|
|
|
|
<p>
|
|
|
|
|
{index + 1}. {task.task}
|
|
|
|
|
</p>
|
|
|
|
|
</td>
|
|
|
|
|
<td>
|
|
|
|
|
<div className="viewReport__done__hours__item">
|
|
|
|
|
<span>{task.hours}</span>
|
|
|
|
|
<p className="hours">
|
|
|
|
|
{hourOfNum(task.hours)} на задачу
|
|
|
|
|
</p>
|
|
|
|
|
</div>
|
|
|
|
|
</td>
|
|
|
|
|
</tr>
|
|
|
|
|
);
|
|
|
|
|
})}
|
|
|
|
|
<tr>
|
|
|
|
|
<td></td>
|
|
|
|
|
<td>
|
|
|
|
|
<span>
|
|
|
|
|
Всего: {totalHours} {hourOfNum(totalHours)}
|
|
|
|
|
</span>
|
|
|
|
|
</td>
|
|
|
|
|
</tr>
|
|
|
|
|
</tbody>
|
|
|
|
|
</table>
|
|
|
|
|
</div>
|
|
|
|
|
{Boolean(difficulties.length) && (
|
|
|
|
|
<div className="viewReport__item">
|
|
|
|
|
<h3>Какие сложности возникли?</h3>
|
|
|
|
|
{difficulties.map((item, index) => {
|
|
|
|
|
return <p key={index}>{item}</p>;
|
|
|
|
|
})}
|
|
|
|
|
</div>
|
|
|
|
|
)}
|
|
|
|
|
{Boolean(tomorrowTask.length) && (
|
|
|
|
|
<div className="viewReport__item">
|
|
|
|
|
<h3>Что планируется сделать завтра?</h3>
|
|
|
|
|
{tomorrowTask.map((item, index) => {
|
|
|
|
|
return <p key={index}>{item}</p>;
|
|
|
|
|
})}
|
|
|
|
|
</div>
|
|
|
|
|
)}
|
|
|
|
|
</div>
|
|
|
|
|
)}
|
|
|
|
|
{!Boolean(taskText.length) && !loader && (
|
|
|
|
|
<div className="viewReport__noTask">
|
|
|
|
|
<p>
|
|
|
|
|
В этот день вы <span>не заполняли</span> отчет
|
|
|
|
|
</p>
|
|
|
|
|
</div>
|
|
|
|
|
)}
|
|
|
|
|
</div>
|
|
|
|
|
);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export default ShortReport;
|