lab 4 is done
This commit is contained in:
parent
acb147b0a3
commit
f885a37b42
@ -7,6 +7,7 @@ import 'bootstrap/dist/css/bootstrap.min.css';
|
|||||||
import Companies from './components/Companies.jsx';
|
import Companies from './components/Companies.jsx';
|
||||||
import Positions from './components/Positions.jsx';
|
import Positions from './components/Positions.jsx';
|
||||||
import OneCompany from './components/OneCompany.jsx';
|
import OneCompany from './components/OneCompany.jsx';
|
||||||
|
import ReportEmployeePosition from './components/ReportEmployeePosition.jsx';
|
||||||
function Router(props) {
|
function Router(props) {
|
||||||
return useRoutes(props.rootRoute);
|
return useRoutes(props.rootRoute);
|
||||||
}
|
}
|
||||||
@ -18,6 +19,7 @@ function Router(props) {
|
|||||||
{ path: '/employees', element: <Employees />, label: 'Сотрудники' },
|
{ path: '/employees', element: <Employees />, label: 'Сотрудники' },
|
||||||
{ path: '/companies', element: <Companies />, label: 'Компании' },
|
{ path: '/companies', element: <Companies />, label: 'Компании' },
|
||||||
{ path: '/positions', element: <Positions />, label: 'Должности' },
|
{ path: '/positions', element: <Positions />, label: 'Должности' },
|
||||||
|
{ path: '/report', element: <ReportEmployeePosition />, label: 'Сотрудники по должностям' },
|
||||||
{ path: '/company/:id', element: <OneCompany />},
|
{ path: '/company/:id', element: <OneCompany />},
|
||||||
];
|
];
|
||||||
const links = routes.filter(route => route.hasOwnProperty('label'));
|
const links = routes.filter(route => route.hasOwnProperty('label'));
|
||||||
|
@ -18,16 +18,10 @@ export default function Companies(props) {
|
|||||||
const nameCatalog = "Компании";
|
const nameCatalog = "Компании";
|
||||||
|
|
||||||
const url = '/company';
|
const url = '/company';
|
||||||
const urlEmp = '/employee';
|
|
||||||
const urlPos = '/position';
|
|
||||||
const urlHire = '/company/hire';
|
|
||||||
const urlDismiss = '/company/dismiss';
|
|
||||||
const requestParamsHire = '?employeeId=empId'
|
|
||||||
const requestParams = '?name=nameData';
|
const requestParams = '?name=nameData';
|
||||||
|
|
||||||
const [items, setItems] = useState([]);
|
const [items, setItems] = useState([]);
|
||||||
const [itemsEmp, setItemsEmp] = useState([]);
|
|
||||||
const [itemsPos, setItemsPos] = useState([]);
|
|
||||||
|
|
||||||
const [data, setData] = useState(new Company());
|
const [data, setData] = useState(new Company());
|
||||||
const [isEditing, setEditing] = useState(false);
|
const [isEditing, setEditing] = useState(false);
|
||||||
@ -40,15 +34,7 @@ export default function Companies(props) {
|
|||||||
.then(data => setItems(data));
|
.then(data => setItems(data));
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadItemsEmployees() {
|
|
||||||
DataService.readAll(urlEmp, (data) => new Employee(data))
|
|
||||||
.then(data => setItemsEmp(data));
|
|
||||||
}
|
|
||||||
|
|
||||||
function loadItemsPositions() {
|
|
||||||
DataService.readAll(urlPos, (data) => new Position(data))
|
|
||||||
.then(data => setItemsPos(data));
|
|
||||||
}
|
|
||||||
|
|
||||||
function handleAdd() {
|
function handleAdd() {
|
||||||
DataService.create(url +requestParams
|
DataService.create(url +requestParams
|
||||||
@ -117,57 +103,7 @@ export default function Companies(props) {
|
|||||||
Отправить
|
Отправить
|
||||||
</Button>
|
</Button>
|
||||||
</Form>;
|
</Form>;
|
||||||
// // логика для найма или увольнения
|
|
||||||
// const [showModalFormHire, setShow] = useState(false);
|
|
||||||
// const [modalTitleHire, setmodalTitleHire] = useState("Найм");
|
|
||||||
// function showModalForm(e) {
|
|
||||||
// setmodalTitleHire(e.target.name);
|
|
||||||
// setShow(true);
|
|
||||||
// }
|
|
||||||
// function unshowModalForm() {
|
|
||||||
// setShow(false);
|
|
||||||
// }
|
|
||||||
// const [company, setCompany] = useState('');
|
|
||||||
// const [employee, setEmployee] = useState('');
|
|
||||||
|
|
||||||
// function hire() {
|
|
||||||
// if (modalTitleHire === "Найм") {
|
|
||||||
// DataService.update(urlHire + "/" + company + requestParamsHire
|
|
||||||
// .replace("empId", employee))
|
|
||||||
// .then(() => loadItems());
|
|
||||||
// } else {
|
|
||||||
// DataService.update(urlDismiss + "/" + company + requestParamsHire
|
|
||||||
// .replace("empId", employee))
|
|
||||||
// .then(() => loadItems());
|
|
||||||
// }
|
|
||||||
|
|
||||||
// }
|
|
||||||
|
|
||||||
// const formHire = <Form onSubmit={hire}>
|
|
||||||
// <Form.Group className="mb-3" controlId="name">
|
|
||||||
// <Form.Label>Компания</Form.Label>
|
|
||||||
// <Form.Select name="name_select" type="input" onChange={(e) => {setCompany(e.target.value)}} required>
|
|
||||||
// <option selected disabled>Выберите компанию</option>
|
|
||||||
// {
|
|
||||||
// items.map((company) => <option key={`company_${company.id}`} value={`${company.id}`}>{`${company.name}`}</option>)
|
|
||||||
// }
|
|
||||||
// </Form.Select>
|
|
||||||
// </Form.Group>
|
|
||||||
// <Form.Group className="mb-3" controlId="employee">
|
|
||||||
// <Form.Label>Сотрудник</Form.Label>
|
|
||||||
// <Form.Select name="employee_select" type="input" onClick={loadItemsEmployees} onChange={(e) => {setEmployee(e.target.value)}} required>
|
|
||||||
// <option selected disabled>Выберите сотрудника</option>
|
|
||||||
// {
|
|
||||||
// itemsEmp.map((e) => <option key={`emp_${e.id}`} value={`${e.id}`}>{`${e.surname} ${e.name}`}</option>)
|
|
||||||
// }
|
|
||||||
// </Form.Select>
|
|
||||||
// </Form.Group>
|
|
||||||
// <Button variant="primary" type="submit">
|
|
||||||
// Отправить
|
|
||||||
// </Button>
|
|
||||||
// </Form>;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const [showModalForm, setShowChoosing] = useState(false);
|
const [showModalForm, setShowChoosing] = useState(false);
|
||||||
const formChooseCompany = <Form onSubmit={redirectToCompany}>
|
const formChooseCompany = <Form onSubmit={redirectToCompany}>
|
||||||
@ -202,9 +138,6 @@ export default function Companies(props) {
|
|||||||
|
|
||||||
return <div className="container-lg pt-5 min-vh-100">
|
return <div className="container-lg pt-5 min-vh-100">
|
||||||
<Button onClick={showModalFormChoosing} variant="info">Перейти к компании</Button>
|
<Button onClick={showModalFormChoosing} variant="info">Перейти к компании</Button>
|
||||||
{/* <Button name="Найм" onClick={showModalForm} variant="success">Нанять сотрудника</Button>
|
|
||||||
<Button name='Увольнение' onClick={showModalForm} variant="danger">Уволить сотрудника</Button>
|
|
||||||
<ModalForm show={showModalFormHire} onClose={unshowModalForm} modalTitle={modalTitleHire} form={formHire}></ModalForm> */}
|
|
||||||
<ModalForm show={showModalForm} onClose={unshowModalFormChoosing} modalTitle={"Выбор компаниии"} form={formChooseCompany}></ModalForm>
|
<ModalForm show={showModalForm} onClose={unshowModalFormChoosing} modalTitle={"Выбор компаниии"} form={formChooseCompany}></ModalForm>
|
||||||
<Catalog name={nameCatalog}
|
<Catalog name={nameCatalog}
|
||||||
headers={headers}
|
headers={headers}
|
||||||
|
@ -13,7 +13,8 @@ export default function OneCompany(props) {
|
|||||||
const { id } = useParams();
|
const { id } = useParams();
|
||||||
|
|
||||||
const url = '/company/id';
|
const url = '/company/id';
|
||||||
const urlEmp = '/employee';
|
const urlCompanyEmp = '/company/id/employees';
|
||||||
|
const urlEmp = '/employee/free';
|
||||||
const urlPos = '/position';
|
const urlPos = '/position';
|
||||||
const urlHire = '/company/id/hire';
|
const urlHire = '/company/id/hire';
|
||||||
const urlDismiss = '/company/id/dismiss';
|
const urlDismiss = '/company/id/dismiss';
|
||||||
@ -23,7 +24,8 @@ export default function OneCompany(props) {
|
|||||||
const requestParamsHire = '?employeeId=empId';
|
const requestParamsHire = '?employeeId=empId';
|
||||||
|
|
||||||
const [company, setCompany] = useState(new Company());
|
const [company, setCompany] = useState(new Company());
|
||||||
const [itemsEmp, setItemsEmp] = useState([]);
|
const [itemsEmpFree, setItemsEmpFree] = useState([]);
|
||||||
|
const [itemsEmpCompany, setItemsEmpCompany] = useState([]);
|
||||||
const [itemsPos, setItemsPos] = useState([]);
|
const [itemsPos, setItemsPos] = useState([]);
|
||||||
|
|
||||||
const headersEmp = [
|
const headersEmp = [
|
||||||
@ -35,17 +37,15 @@ export default function OneCompany(props) {
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
loadCompany();
|
loadCompany();
|
||||||
loadItemsPositions();
|
}, []);
|
||||||
loadItemsEmployees();
|
|
||||||
});
|
|
||||||
|
|
||||||
function loadCompany() {
|
function loadCompany() {
|
||||||
DataService.read(url.replace("id", id), (data) => new Company(data)).then((data) => {setCompany(new Company(data))});
|
DataService.read(url.replace("id", id), (data) => new Company(data)).then((data) => setCompany(new Company(data)));
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadItemsEmployees() {
|
function loadItemsEmployees() {
|
||||||
DataService.readAll(urlEmp, (data) => new Employee(data))
|
DataService.readAll(urlEmp, (data) => new Employee(data))
|
||||||
.then(data => setItemsEmp(data));
|
.then(data => setItemsEmpFree(data));
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadItemsPositions() {
|
function loadItemsPositions() {
|
||||||
@ -53,11 +53,17 @@ export default function OneCompany(props) {
|
|||||||
.then(data => setItemsPos(data));
|
.then(data => setItemsPos(data));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function loadItemsEmployeesCompany() {
|
||||||
|
DataService.readAll(urlCompanyEmp.replace("id", company.id), (data) => new Employee(data))
|
||||||
|
.then(data => setItemsEmpCompany(data));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// логика для найма или увольнения
|
// логика для найма или увольнения
|
||||||
const [isShowHire, setShowHire] = useState(false);
|
const [isShowHire, setShowHire] = useState(false);
|
||||||
|
|
||||||
function showModalFormHire() {
|
function showModalFormHire() {
|
||||||
|
loadItemsEmployees();
|
||||||
setShowHire(true);
|
setShowHire(true);
|
||||||
}
|
}
|
||||||
function unshowModalFormHire() {
|
function unshowModalFormHire() {
|
||||||
@ -66,7 +72,8 @@ export default function OneCompany(props) {
|
|||||||
|
|
||||||
const [isShowDismiss, setShowDismiss] = useState(false);
|
const [isShowDismiss, setShowDismiss] = useState(false);
|
||||||
|
|
||||||
function showModalFormDismiss(e) {
|
function showModalFormDismiss(e) {
|
||||||
|
loadItemsEmployeesCompany();
|
||||||
setShowDismiss(true);
|
setShowDismiss(true);
|
||||||
}
|
}
|
||||||
function unshowModalFormDismiss() {
|
function unshowModalFormDismiss() {
|
||||||
@ -74,10 +81,13 @@ export default function OneCompany(props) {
|
|||||||
}
|
}
|
||||||
const [employee, setEmployee] = useState(new Employee());
|
const [employee, setEmployee] = useState(new Employee());
|
||||||
|
|
||||||
function employeeChosen(e) {
|
function employeeChosenFree(e) {
|
||||||
setEmployee(itemsEmp.filter((emp) => emp.id == e.target.value)[0]);
|
setEmployee(itemsEmpFree.filter((emp) => emp.id == e.target.value)[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function employeeChosenBusy(e) {
|
||||||
|
setEmployee(Array.from(company.employees).filter((emp) => emp.id == e.target.value)[0]);
|
||||||
|
}
|
||||||
|
|
||||||
function formHireSubmit() {
|
function formHireSubmit() {
|
||||||
DataService.update(urlHire.replace("id",company.id) + requestParamsHire
|
DataService.update(urlHire.replace("id",company.id) + requestParamsHire
|
||||||
@ -98,7 +108,9 @@ export default function OneCompany(props) {
|
|||||||
|
|
||||||
const [isShowChoosePosition, setShowChoosePosition] = useState(false);
|
const [isShowChoosePosition, setShowChoosePosition] = useState(false);
|
||||||
|
|
||||||
function showModalFormChoosePosition() {
|
function showModalFormChoosePosition() {
|
||||||
|
loadItemsPositions();
|
||||||
|
loadItemsEmployeesCompany();
|
||||||
setShowChoosePosition(true);
|
setShowChoosePosition(true);
|
||||||
}
|
}
|
||||||
function unshowModalFormChoosePosition() {
|
function unshowModalFormChoosePosition() {
|
||||||
@ -130,9 +142,9 @@ export default function OneCompany(props) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let positionsEmp = employee.positions;
|
let positionsEmp = employee.positions;
|
||||||
|
|
||||||
for (let i = 0; i < positionsEmp.length; i++) {
|
for (let i = 0; i < positionsEmp.length; i++) {
|
||||||
if (positionsChosen.indexOf(positionsEmp[i]) == -1) {
|
if (positionsChosen.indexOf(''+positionsEmp[i].id) == -1) {
|
||||||
// удаление должности
|
// удаление должности
|
||||||
DataService.update(urlDelPos.replace("id",employee.id) + requestParamsPosition
|
DataService.update(urlDelPos.replace("id",employee.id) + requestParamsPosition
|
||||||
.replace("posId", positionsEmp[i].id))
|
.replace("posId", positionsEmp[i].id))
|
||||||
@ -140,15 +152,14 @@ export default function OneCompany(props) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const formHire = <Form onSubmit={formHireSubmit}>
|
const formHire = <Form onSubmit={formHireSubmit}>
|
||||||
<Form.Group className="mb-3" controlId="employee">
|
<Form.Group className="mb-3" controlId="employee">
|
||||||
<Form.Label>Сотрудник</Form.Label>
|
<Form.Label>Сотрудник</Form.Label>
|
||||||
<Form.Select name="employee_select" type="input" onChange={employeeChosen} required>
|
<Form.Select name="employee_select" type="input" onChange={employeeChosenFree} required>
|
||||||
<option selected disabled>Выберите сотрудника</option>
|
<option selected disabled>Выберите сотрудника</option>
|
||||||
{
|
{
|
||||||
itemsEmp.map((e) => <option key={`emp_${e.id}`} value={`${e.id}`}>{`${e.surname} ${e.name}`}</option>)
|
itemsEmpFree.map((e) => <option key={`emp_${e.id}`} value={`${e.id}`}>{`${e.surname} ${e.name}`}</option>)
|
||||||
}
|
}
|
||||||
</Form.Select>
|
</Form.Select>
|
||||||
</Form.Group>
|
</Form.Group>
|
||||||
@ -161,10 +172,10 @@ export default function OneCompany(props) {
|
|||||||
const formDismiss = <Form onSubmit={formDismissSubmit}>
|
const formDismiss = <Form onSubmit={formDismissSubmit}>
|
||||||
<Form.Group className="mb-3" controlId="employee">
|
<Form.Group className="mb-3" controlId="employee">
|
||||||
<Form.Label>Сотрудник</Form.Label>
|
<Form.Label>Сотрудник</Form.Label>
|
||||||
<Form.Select name="employee_select" type="input" onChange={employeeChosen} required>
|
<Form.Select name="employee_select" type="input" onChange={employeeChosenBusy} required>
|
||||||
<option selected disabled>Выберите сотрудника</option>
|
<option selected disabled>Выберите сотрудника</option>
|
||||||
{
|
{
|
||||||
Array.from(company.employees).map((e) => <option key={`emp_${e.id}`} value={`${e.id}`}>{`${e.surname} ${e.name}`}</option>)
|
itemsEmpCompany.map((e) => <option key={`emp_${e.id}`} value={`${e.id}`}>{`${e.surname} ${e.name}`}</option>)
|
||||||
}
|
}
|
||||||
</Form.Select>
|
</Form.Select>
|
||||||
</Form.Group>
|
</Form.Group>
|
||||||
@ -172,16 +183,14 @@ export default function OneCompany(props) {
|
|||||||
Отправить
|
Отправить
|
||||||
</Button>
|
</Button>
|
||||||
</Form>;
|
</Form>;
|
||||||
function employeeHasPosition(id) {
|
|
||||||
return Array.from(employee.positions).filter((pEm) => pEm.id == id)[0] != undefined;
|
|
||||||
}
|
|
||||||
const formCheckBoxesPosition = <Form onSubmit={formChoosePositionsSubmit}>
|
const formCheckBoxesPosition = <Form onSubmit={formChoosePositionsSubmit}>
|
||||||
<Form.Group className="mb-3" controlId="employee">
|
<Form.Group className="mb-3" controlId="employee">
|
||||||
<Form.Label>Сотрудник</Form.Label>
|
<Form.Label>Сотрудник</Form.Label>
|
||||||
<Form.Select name="employee_select" type="input" onChange={employeeChosen} required>
|
<Form.Select name="employee_select" type="input" onChange={employeeChosenBusy} required>
|
||||||
<option selected disabled>Выберите сотрудника</option>
|
<option selected disabled>Выберите сотрудника</option>
|
||||||
{
|
{
|
||||||
Array.from(company.employees).map((e) => <option key={`emp_${e.id}`} value={`${e.id}`}>{`${e.surname} ${e.name}`}</option>)
|
itemsEmpCompany.map((e) => <option key={`emp_${e.id}`} value={`${e.id}`}>{`${e.surname} ${e.name}`}</option>)
|
||||||
}
|
}
|
||||||
</Form.Select>
|
</Form.Select>
|
||||||
</Form.Group>
|
</Form.Group>
|
||||||
@ -190,8 +199,9 @@ export default function OneCompany(props) {
|
|||||||
<div className={`${styles.prokrutka}`}>
|
<div className={`${styles.prokrutka}`}>
|
||||||
{
|
{
|
||||||
itemsPos.map((p) => <div style={{width: `150 px`}}>
|
itemsPos.map((p) => <div style={{width: `150 px`}}>
|
||||||
{!employeeHasPosition(p) && <input type="checkbox" key={`${p.id}`} value={`${p.id}`} onChange={checkBoxChanged}/>}
|
<input type="checkbox" key={`${p.id}`} value={`${p.id}`} onChange={checkBoxChanged}/>
|
||||||
{employeeHasPosition(p) && <input type="checkbox" key={`${p.id}`} value={`${p.id}`} checked onChange={checkBoxChanged}/>}
|
{/* {!employeeHasPosition(p) && <input type="checkbox" key={`${p.id}`} value={`${p.id}`} onChange={checkBoxChanged}/>}
|
||||||
|
{employeeHasPosition(p) && <input type="checkbox" key={`${p.id}`} value={`${p.id}`} checked onChange={checkBoxChanged}/>} */}
|
||||||
{`${p.name}`}
|
{`${p.name}`}
|
||||||
</div>)
|
</div>)
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,6 @@ export default function Table(props) {
|
|||||||
function remove(itemId) {
|
function remove(itemId) {
|
||||||
props.onDelete(itemId);
|
props.onDelete(itemId);
|
||||||
}
|
}
|
||||||
console.log(props.items);
|
|
||||||
return <div >
|
return <div >
|
||||||
<table className={`table table-hover`}>
|
<table className={`table table-hover`}>
|
||||||
<thead>
|
<thead>
|
||||||
|
@ -10,7 +10,8 @@ export default class Employee {
|
|||||||
this.positionsString = '';
|
this.positionsString = '';
|
||||||
if (this.positions !== '') {
|
if (this.positions !== '') {
|
||||||
this.positions.forEach((p) => {this.positionsString += p.name + " "});
|
this.positions.forEach((p) => {this.positionsString += p.name + " "});
|
||||||
}
|
}
|
||||||
|
this.company = data?.company || '';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ export default class DataService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static async read(url, transformer) {
|
static async read(url, transformer) {
|
||||||
const response = await axios.get(this.dataUrlPrefix + url);
|
const response = await axios.get(this.dataUrlPrefix + url);
|
||||||
return transformer(response.data);
|
return transformer(response.data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,6 +25,11 @@ public class CompanyController {
|
|||||||
return new CompanyDto(companyService.findCompany(id));
|
return new CompanyDto(companyService.findCompany(id));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping("/{id}/employees")
|
||||||
|
public List<EmployeeDto> getCompanyEmployees(@PathVariable long id) {
|
||||||
|
return companyService.findCompany(id).getEmployees().stream().map(EmployeeDto::new).toList();
|
||||||
|
}
|
||||||
|
|
||||||
@GetMapping
|
@GetMapping
|
||||||
public List<CompanyDto> getAllCompanies() {
|
public List<CompanyDto> getAllCompanies() {
|
||||||
return companyService.findAllCompanies().stream()
|
return companyService.findAllCompanies().stream()
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
package com.example.springip.lab3.controller;
|
package com.example.springip.lab3.controller;
|
||||||
|
|
||||||
|
import com.example.springip.lab3.dto.CompanyDto;
|
||||||
import com.example.springip.lab3.dto.EmployeeDto;
|
import com.example.springip.lab3.dto.EmployeeDto;
|
||||||
|
import com.example.springip.lab3.models.Employee;
|
||||||
import com.example.springip.lab3.models.Position;
|
import com.example.springip.lab3.models.Position;
|
||||||
import com.example.springip.lab3.service.EmployeeService;
|
import com.example.springip.lab3.service.EmployeeService;
|
||||||
import com.example.springip.lab3.service.PositionService;
|
import com.example.springip.lab3.service.PositionService;
|
||||||
@ -70,4 +72,23 @@ public class EmployeeController {
|
|||||||
return null;
|
return null;
|
||||||
return new EmployeeDto(employeeService.deletePosition(id, p));
|
return new EmployeeDto(employeeService.deletePosition(id, p));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping("/free")
|
||||||
|
public List<EmployeeDto> getAllFreeEmployees() {
|
||||||
|
return employeeService.findAllFreeEmployees().stream()
|
||||||
|
.map(EmployeeDto::new)
|
||||||
|
.toList();
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/position")
|
||||||
|
public List<EmployeeDto> getEmployeesByPosition(@RequestParam Long pos) {
|
||||||
|
Position p = positionService.findPosition(pos);
|
||||||
|
if (p == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return employeeService.getEmployeesByPosition(p).stream()
|
||||||
|
.map(EmployeeDto::new)
|
||||||
|
.toList();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,4 +11,5 @@ import java.util.Optional;
|
|||||||
public interface EmployeeRepository extends JpaRepository<Employee, Long> {
|
public interface EmployeeRepository extends JpaRepository<Employee, Long> {
|
||||||
Optional<Employee> findById(Long id);
|
Optional<Employee> findById(Long id);
|
||||||
List<Employee> findByPositions_Id(Long p_id);
|
List<Employee> findByPositions_Id(Long p_id);
|
||||||
|
List<Employee> findByCompanyIsNull();
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,21 @@
|
|||||||
|
package com.example.springip.lab3.dto;
|
||||||
|
|
||||||
|
import com.example.springip.lab3.models.Company;
|
||||||
|
|
||||||
|
public class CompanyWithoutEmpDto {
|
||||||
|
private final Long Id;
|
||||||
|
private final String name;
|
||||||
|
|
||||||
|
public CompanyWithoutEmpDto(Company company) {
|
||||||
|
this.Id = company.getId();
|
||||||
|
this.name = company.getName();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getId() {
|
||||||
|
return Id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
}
|
@ -14,12 +14,15 @@ public class EmployeeDto {
|
|||||||
private final String surname;
|
private final String surname;
|
||||||
private final List<PositionDto> positions;
|
private final List<PositionDto> positions;
|
||||||
|
|
||||||
|
private final CompanyWithoutEmpDto company;
|
||||||
|
|
||||||
public EmployeeDto(Employee employee) {
|
public EmployeeDto(Employee employee) {
|
||||||
Id = employee.getId();
|
Id = employee.getId();
|
||||||
this.name = employee.getName();
|
this.name = employee.getName();
|
||||||
this.phoneNumber = employee.getPhoneNumber();
|
this.phoneNumber = employee.getPhoneNumber();
|
||||||
this.surname = employee.getSurname();
|
this.surname = employee.getSurname();
|
||||||
this.positions = employee.getPositions().stream().map(PositionDto::new).toList();
|
this.positions = employee.getPositions().stream().map(PositionDto::new).toList();
|
||||||
|
this.company = employee.getCompany() != null ? new CompanyWithoutEmpDto(employee.getCompany()) : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Long getId() {
|
public Long getId() {
|
||||||
@ -41,4 +44,8 @@ public class EmployeeDto {
|
|||||||
public List<PositionDto> getPositions() {
|
public List<PositionDto> getPositions() {
|
||||||
return positions;
|
return positions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public CompanyWithoutEmpDto getCompany() {
|
||||||
|
return company;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -41,6 +41,10 @@ public class EmployeeService {
|
|||||||
public List<Employee> findAllEmployees() {
|
public List<Employee> findAllEmployees() {
|
||||||
return employeeRepository.findAll();
|
return employeeRepository.findAll();
|
||||||
}
|
}
|
||||||
|
@Transactional(readOnly = true)
|
||||||
|
public List<Employee> findAllFreeEmployees() {
|
||||||
|
return employeeRepository.findByCompanyIsNull();
|
||||||
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public Employee updateEmployee(Long id, String surname, String name, String phoneNumber) {
|
public Employee updateEmployee(Long id, String surname, String name, String phoneNumber) {
|
||||||
|
Loading…
Reference in New Issue
Block a user