179 lines
5.4 KiB
React
Raw Normal View History

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(
2023-12-04 18:01:04 +03:00
"cardId",
)}&date=${day}`,
2023-05-11 19:54:15 +03:00
).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;