diff --git a/demo/src/main/java/com/example/demo/supply/Order/OrderController.java b/demo/src/main/java/com/example/demo/supply/Order/OrderController.java index 4caf8df..1296891 100644 --- a/demo/src/main/java/com/example/demo/supply/Order/OrderController.java +++ b/demo/src/main/java/com/example/demo/supply/Order/OrderController.java @@ -1,5 +1,6 @@ package com.example.demo.supply.Order; +import com.example.demo.supply.Product.ProductDto; import org.springframework.web.bind.annotation.*; import java.util.List; @@ -24,18 +25,23 @@ public class OrderController { return orderService.findAllOrders().stream().map(OrderDto::new).toList(); } + @GetMapping("/getProducts/{id}") + public List getOrderProducts(@PathVariable Long id) { + return orderService.findAllOrderProducts(id).stream().map(ProductDto::new).toList(); + } + @PostMapping("/") public OrderDto createOrder(@RequestParam() Long supplierId) { return new OrderDto(orderService.addOrder(supplierId)); } - @PatchMapping("/addProduct/{id}/") + @PatchMapping("/addProduct/{id}") public OrderDto addProduct(@PathVariable Long id, @RequestParam() Long productId){ return new OrderDto(orderService.addProduct(id, productId)); } - @PatchMapping("/removeProduct/{id}/") + @PatchMapping("/removeProduct/{id}") public OrderDto removeProduct(@PathVariable Long id, @RequestParam() Long productId){ return new OrderDto(orderService.removeProduct(id, productId)); diff --git a/demo/src/main/java/com/example/demo/supply/Order/OrderRepository.java b/demo/src/main/java/com/example/demo/supply/Order/OrderRepository.java index 5b084ac..72a7783 100644 --- a/demo/src/main/java/com/example/demo/supply/Order/OrderRepository.java +++ b/demo/src/main/java/com/example/demo/supply/Order/OrderRepository.java @@ -1,6 +1,10 @@ package com.example.demo.supply.Order; +import com.example.demo.supply.Product.Product; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; + +import java.util.List; public interface OrderRepository extends JpaRepository<_Order, Long> { } diff --git a/demo/src/main/java/com/example/demo/supply/Order/OrderService.java b/demo/src/main/java/com/example/demo/supply/Order/OrderService.java index 0b413b7..bc29baf 100644 --- a/demo/src/main/java/com/example/demo/supply/Order/OrderService.java +++ b/demo/src/main/java/com/example/demo/supply/Order/OrderService.java @@ -1,5 +1,6 @@ package com.example.demo.supply.Order; +import com.example.demo.supply.Product.Product; import com.example.demo.supply.Product.ProductService; import com.example.demo.supply.Supplier.SupplierService; import org.springframework.stereotype.Service; @@ -64,6 +65,12 @@ public class OrderService { return orderRepository.findAll(); } + @Transactional(readOnly = true) + public List findAllOrderProducts(Long orderId) { + final Optional<_Order> order = orderRepository.findById(orderId); + return order.orElseThrow(() -> new OrderNotFoundException(orderId)).getProducts(); + } + @Transactional public _Order deleteOrder(Long id) { final _Order currentOrder = findOrder(id); diff --git a/front/src/DataService.js b/front/src/DataService.js index 1b2cdbb..521f962 100644 --- a/front/src/DataService.js +++ b/front/src/DataService.js @@ -12,6 +12,7 @@ function getFullUrl(url, data) { if (field === 'date') continue if (field === 'countProducts') continue if (field === 'products') continue + if (field === 'supplierName') continue currentUrl.searchParams.append(field, data[field]) } @@ -39,7 +40,7 @@ export default class DataService { } static async create(url, data) { - console.log(data) + //console.log(data) await fetch(getFullUrl(this.mainUrl + url, data), { method: 'POST', }).catch(e => console.log(e)) diff --git a/front/src/Pages/CreateOrderPage.jsx b/front/src/Pages/CreateOrderPage.jsx index 9eefe5b..653a969 100644 --- a/front/src/Pages/CreateOrderPage.jsx +++ b/front/src/Pages/CreateOrderPage.jsx @@ -1,4 +1,5 @@ import { React, useState, useEffect } from "react"; +import { Link } from 'react-router-dom'; import Supplier from "../models/Supplier"; import DataService from "../DataService"; import Order from "../models/Order"; @@ -11,6 +12,8 @@ export default function CreateOrderPage(props){ const supplierUrl = 'supplier/' const productUrl = 'product/' + let orderProductsArr = [] + const headers = [ { name: 'name', label: 'Продукт' }, { name: 'cost', label: 'Цена' } @@ -23,50 +26,65 @@ export default function CreateOrderPage(props){ const [suppliers, setSuppliers] = useState([]) const [products, setProducts] = useState([]) - const [productsOrder, setProductsOrder] = useState([]) + const [order, setOrder] = useState(new Order()) + const [addsProduct, setAddsProduct] = useState(new Product()) + + const [orderProducts, setOrderProducts] = useState([]) const [modalHeader, setModalHeader] = useState('') const [modalConfirm, setModalConfirm] = useState('') const [modalVisible, setModalVisible] = useState(false) + const [isAddProd, setIsAddProd] = useState(false) + const [isAddSupplier, setIsAddSupplier] = useState(false) + useEffect(() => { loadItems() //eslint-disable-next-line react-hooks/exhaustive-deps }, []); const loadItems = () => { - // DataService.getOrders(url).then(data => { - // console.log(data) - // setOrders([]) - // data.map(order => { - // setOrders(prevState => [...prevState, new Order(order)]) - // }) - // }) - DataService.readAll(supplierUrl, transformerSupplier).then(data => setSuppliers(data)) DataService.readAll(productUrl, transformerProduct).then(data => setProducts(data)) } - const saveItems = () => { - console.log("saveItems") + const createOrder = () => { + // console.log(order) + DataService.create(url, order) + } + const addProductInOrder = () => { + DataService.read(`${productUrl}${addsProduct.id}`, transformerProduct) + .then(data => { + order.products.push(data) + setOrder({ ...order, products: order.products }) + }) + } + const handleFormChange = (event) => { - //console.log([event.target.id].event.target.value) - // console.log(currOrder) - // setData({ ...data, [event.target.id]: event.target.value }) - // console.log(data) + setOrder({ ...order, [event.target.id]: event.target.value }) + } + + const handleAddProduct = (event) => { + setAddsProduct({ ...addsProduct, [event.target.id]: event.target.value }) } const addProduct = () => { + console.log(addsProduct) + setAddsProduct(new Product()) + console.log(addsProduct) + setIsAddProd(true) setModalHeader('Добавление продукта'); setModalConfirm('Добавить'); setModalVisible(true); } const hideModal = () => setModalVisible(false) - const modalDone = () => saveItems() + const modalDone = () => { + + } const ds = () => console.log("") return( @@ -77,15 +95,18 @@ export default function CreateOrderPage(props){
- - + + + + +


Поставщик

+

Продукт

+ - - { - suppliers.map(supplier => - - ) - } - -
*/} - - {/*
- - -
*/} - - - - {/*
- - -
*/} -
) } \ No newline at end of file diff --git a/front/src/general/Table.jsx b/front/src/general/Table.jsx index be7753e..5484dfe 100644 --- a/front/src/general/Table.jsx +++ b/front/src/general/Table.jsx @@ -54,7 +54,7 @@ import styles from './Table.module.css'; { - props.items.map((item, index) => + props.items && props.items.map((item, index) => click(item.id, e)} onDoubleClick={(e) => dblClick(item.id, e)}> diff --git a/front/src/general/ToolBar.jsx b/front/src/general/ToolBar.jsx index e1c8e78..5d35ec0 100644 --- a/front/src/general/ToolBar.jsx +++ b/front/src/general/ToolBar.jsx @@ -8,8 +8,6 @@ function ToolBar(props) { const add = () => props.add() const edit = () => props.edit() const remove = () => props.remove() - const addProduct = () => props.addProduct() - const removeProduct = () => props.removeProduct() return (
diff --git a/front/src/models/Order.js b/front/src/models/Order.js index 0e466de..ab9dc7a 100644 --- a/front/src/models/Order.js +++ b/front/src/models/Order.js @@ -6,6 +6,6 @@ export default class Order { this.date = data?.dateOfOrder || ''; this.supplierId = data?.supplier.id || ''; this.supplierName = data?.supplier.name || ''; - this.products = data?.products || ''; + this.products = data?.products || []; } } \ No newline at end of file