From 040026d04979b1bd155164c1852b99dcc350c8fd Mon Sep 17 00:00:00 2001 From: Lucas Pinto Date: Sun, 16 Apr 2023 22:39:29 +0100 Subject: [PATCH 01/15] feat: base items interface --- src/types/interfaces.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/types/interfaces.ts b/src/types/interfaces.ts index 06538e7f..aec34e2a 100644 --- a/src/types/interfaces.ts +++ b/src/types/interfaces.ts @@ -31,17 +31,22 @@ export interface Consumer { vat: string; } - export interface CreateConsumer { name: string; phone: string; vat: string; } - - export interface ApiRequest { headers?: Record; params?: Record; data?: any; } + +export interface BaseItems { + items: T[]; + totalItems: number; + totalPages: number; + page: number; + pageSize: number; +} From 91d8513c7f6c5200c81865a476000352d0c0c0bc Mon Sep 17 00:00:00 2001 From: BMGonzalez24 Date: Wed, 17 May 2023 20:53:25 +0100 Subject: [PATCH 02/15] commit inicial --- src/router/index.ts | 6 ++ src/views/ProductionUnits.vue | 113 ++++++++++++++++++++++++++++++++++ 2 files changed, 119 insertions(+) create mode 100644 src/views/ProductionUnits.vue diff --git a/src/router/index.ts b/src/router/index.ts index 1c10d25c..b6edf9f4 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -9,6 +9,7 @@ import Product from '@/views/Product.vue'; import User from '@/views/User.vue'; import Login from '@/views/Login.vue'; import Register from '@/views/Register.vue'; +import ProductionUnits from '@/views/ProductionUnits.vue'; import { store } from '@/store'; const routes = [ @@ -64,6 +65,11 @@ const routes = [ name: 'Registration', component: Register, }, + { + path: '/unidadesproducao', + name: 'Unidades de Produção', + component: ProductionUnits, + }, ]; const router = createRouter({ diff --git a/src/views/ProductionUnits.vue b/src/views/ProductionUnits.vue new file mode 100644 index 00000000..2bb4ceeb --- /dev/null +++ b/src/views/ProductionUnits.vue @@ -0,0 +1,113 @@ + + + + + From 6e14c9f57816461533f89075d7977d0ab6592fe6 Mon Sep 17 00:00:00 2001 From: BMGonzalez24 Date: Wed, 17 May 2023 21:51:51 +0100 Subject: [PATCH 03/15] mais stuff --- src/components/OrderDetails.vue | 296 -------------------------------- src/router.ts | 115 +++++++------ src/views/Order.vue | 92 ---------- src/views/ProductionUnits.vue | 96 +++++++---- 4 files changed, 125 insertions(+), 474 deletions(-) delete mode 100644 src/components/OrderDetails.vue delete mode 100644 src/views/Order.vue diff --git a/src/components/OrderDetails.vue b/src/components/OrderDetails.vue deleted file mode 100644 index 31b55988..00000000 --- a/src/components/OrderDetails.vue +++ /dev/null @@ -1,296 +0,0 @@ -a - - - - diff --git a/src/router.ts b/src/router.ts index bceb6b85..5b57a632 100644 --- a/src/router.ts +++ b/src/router.ts @@ -1,105 +1,106 @@ -import { createRouter, createWebHistory } from "vue-router"; +import { createRouter, createWebHistory } from 'vue-router'; -import Home from "./views/Home.vue"; -import About from "./views/About.vue"; -import CategoriasProdutos from "./views/CategoriasProdutos.vue"; -import Favourites from "./views/Favourites.vue"; -import Cart from "./views/Cart.vue"; -import Product from "./views/Product.vue"; -import User from "./views/User.vue"; -import Order from "./views/Order.vue"; -import Login from "./views/Login.vue"; -import Registration from "./views/Registration.vue"; -import AuthConsumer from "./components/AuthConsumer.vue"; -import { auth } from "./components/firebase"; +import Home from './views/Home.vue'; +import About from './views/About.vue'; +import CategoriasProdutos from './views/CategoriasProdutos.vue'; +import Favourites from './views/Favourites.vue'; +import Cart from './views/Cart.vue'; +import Product from './views/Product.vue'; +import User from './views/User.vue'; +import Login from './views/Login.vue'; +import Registration from './views/Registration.vue'; +import AuthConsumer from './components/AuthConsumer.vue'; +import ProductionUnits from './views/ProductionUnits.vue'; +import { auth } from './components/firebase'; const routes = [ { - path: "/", - name: "Página principal", + path: '/', + name: 'Página principal', component: Home, }, { - path: "/sobre", - name: "Sobre", + path: '/sobre', + name: 'Sobre', component: About, }, { - path: "/produtos", - name: "Produtos", + path: '/produtos', + name: 'Produtos', component: CategoriasProdutos, }, { - path: "/favoritos", - name: "Favoritos", + path: '/favoritos', + name: 'Favoritos', component: Favourites, meta: { requiresAuth: true, - } + }, }, { - path: "/carrinho", - name: "Cart", + path: '/carrinho', + name: 'Cart', component: Cart, meta: { requiresAuth: true, - } + }, }, // O link para o produto deveria ter o seu nome ou id { - path: "/produto", - name: "Produto", + path: '/produto', + name: 'Produto', component: Product, }, { - path: "/conta", - name: "Conta", + path: '/conta', + name: 'Conta', component: User, meta: { requiresAuth: true, - } + }, }, { - // O link para a encomenda deve ter o codigo - path: "/encomenda/id:id", - name: "Encomenda", - component: Order, - }, - { - path: "/login", - name: "Login", + path: '/login', + name: 'Login', component: Login, }, { - path: "/registration", - name: "Registration", + path: '/registration', + name: 'Registration', component: Registration, }, { - path: "/authconsumer", - name: "AuthConsumer", + path: '/authconsumer', + name: 'AuthConsumer', component: AuthConsumer, }, - + { + path: '/unidadesproducao', + name: 'Unidades de Produção', + component: ProductionUnits, + }, ]; const router = createRouter({ history: createWebHistory(), - routes - }) - - router.beforeEach((to, from, next) => { + routes, +}); + +router.beforeEach((to, from, next) => { if (to.path === '/login' && auth.currentUser) { - next('/') - return; + next('/'); + return; } - - if (to.matched.some(record => record.meta.requiresAuth) && !auth.currentUser) { - next('/login') - return; + + if ( + to.matched.some((record) => record.meta.requiresAuth) && + !auth.currentUser + ) { + next('/login'); + return; } - + next(); - }) - - export default router +}); + +export default router; diff --git a/src/views/Order.vue b/src/views/Order.vue deleted file mode 100644 index e70e84ea..00000000 --- a/src/views/Order.vue +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/src/views/ProductionUnits.vue b/src/views/ProductionUnits.vue index 2bb4ceeb..fe9090e3 100644 --- a/src/views/ProductionUnits.vue +++ b/src/views/ProductionUnits.vue @@ -2,40 +2,78 @@

Unidades de Produção

- - - -
- - - - +
+

Adicionar Novo Transporte

+ + + + + + + + + + + + + + + + + + + +
+ Adicionar + Recomeçar +
+
- - - - +
+
+ - Remember me +
+
+ + + - Save - -
- -
-
+ + + + + + Remember me + + Save +
From 0670b5e61eadbb8e7031f31478cf4ec67529d1fc Mon Sep 17 00:00:00 2001 From: BMGonzalez24 Date: Wed, 17 May 2023 22:14:46 +0100 Subject: [PATCH 04/15] inicio das interfaces e dos producers --- src/api/producers.ts | 3 +++ src/types/interfaces.ts | 6 ++++++ 2 files changed, 9 insertions(+) diff --git a/src/api/producers.ts b/src/api/producers.ts index f39b7109..956354c3 100644 --- a/src/api/producers.ts +++ b/src/api/producers.ts @@ -3,3 +3,6 @@ import { api } from './_base'; export const createProducer = async (producer: CreateProducer) => api.post('/producers', producer); + +export const createProdutionUnit = (producerId: number) => + api.post('/${producerId}/units'); diff --git a/src/types/interfaces.ts b/src/types/interfaces.ts index a16249ff..0d59297f 100644 --- a/src/types/interfaces.ts +++ b/src/types/interfaces.ts @@ -90,4 +90,10 @@ export interface Image { alt: string; } +export interface Items { + id: number, + name: string, + address: , +} + export type AuthenticatedUser = Consumer | Producer; From f2099bf99058d8edeffaf80d9296fa7a8035ca77 Mon Sep 17 00:00:00 2001 From: BMGonzalez24 Date: Wed, 17 May 2023 22:51:21 +0100 Subject: [PATCH 05/15] producers.ts e interfaces.ts feito --- src/api/producers.ts | 22 +++++++++++++++++++--- src/types/interfaces.ts | 27 +++++++++++++++++++++++---- src/views/ProductionUnits.vue | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 74 insertions(+), 7 deletions(-) diff --git a/src/api/producers.ts b/src/api/producers.ts index 956354c3..7f312d8d 100644 --- a/src/api/producers.ts +++ b/src/api/producers.ts @@ -1,8 +1,24 @@ -import { CreateProducer } from '@/types'; +import { Address, CreateProducer } from '@/types'; import { api } from './_base'; export const createProducer = async (producer: CreateProducer) => api.post('/producers', producer); -export const createProdutionUnit = (producerId: number) => - api.post('/${producerId}/units'); +export const getUnit = (producerId: number, unitId: number) => + api.get(`/${producerId}/units/${unitId}`); + +export const createProdutionUnit = ( + producerId: number, + name: string, + address: Address +) => api.post(`/${producerId}/units`, { name, address }); + +export const updateProductionUnit = ( + producerId: number, + unitId: number, + name: string, + address: Address +) => api.post(`/${producerId}/units/${unitId}`, { name, address }); + +export const deleteProductionUnit = (producerId: number, unitId: number) => + api.delete(`/${producerId}/units/${unitId}`); diff --git a/src/types/interfaces.ts b/src/types/interfaces.ts index 0d59297f..d5c2ac65 100644 --- a/src/types/interfaces.ts +++ b/src/types/interfaces.ts @@ -90,10 +90,29 @@ export interface Image { alt: string; } -export interface Items { - id: number, - name: string, - address: , +export interface ProducerProduct { + id: number; + currentPrice: number; + productionDate: Date; + stock: number; + producer?: Producer; //Meto o ? para referir outra interface + productionUnit?: ProductionUnit; + productSpec?: ProductSpec; +} + +export interface ProductionUnit { + id: number; + name: string; + address?: Address; + producer?: Producer; +} + +export interface ProductSpec { + id: number; + name: string; + description: string; + images: Image[]; + products?: Product[]; } export type AuthenticatedUser = Consumer | Producer; diff --git a/src/views/ProductionUnits.vue b/src/views/ProductionUnits.vue index fe9090e3..ed82af17 100644 --- a/src/views/ProductionUnits.vue +++ b/src/views/ProductionUnits.vue @@ -149,3 +149,35 @@ table { } } + + From 107c1322c0f53b7d2927f192b0b8503680cd47b7 Mon Sep 17 00:00:00 2001 From: BMGonzalez24 Date: Thu, 18 May 2023 16:36:55 +0100 Subject: [PATCH 06/15] testing --- src/components/ProductionUnitsComp.vue | 20 +++++ src/views/ProductionUnits.vue | 115 ++++++++++++++----------- 2 files changed, 84 insertions(+), 51 deletions(-) create mode 100644 src/components/ProductionUnitsComp.vue diff --git a/src/components/ProductionUnitsComp.vue b/src/components/ProductionUnitsComp.vue new file mode 100644 index 00000000..ed60ef43 --- /dev/null +++ b/src/components/ProductionUnitsComp.vue @@ -0,0 +1,20 @@ + + + diff --git a/src/views/ProductionUnits.vue b/src/views/ProductionUnits.vue index ed82af17..1195a5ce 100644 --- a/src/views/ProductionUnits.vue +++ b/src/views/ProductionUnits.vue @@ -5,47 +5,57 @@

Adicionar Novo Transporte

- - - - - - - - - - - - - - - - - - - -
- Adicionar - Recomeçar -
-
- +
+ + + + + + + + + + + + + + + + + + + +
+ Adicionar + Recomeçar +
+
+
+ +
+ + {{ Address }} +

@@ -150,23 +160,26 @@ table { } + + - diff --git a/src/types/interfaces.ts b/src/types/interfaces.ts index e9d79b61..fca4b444 100644 --- a/src/types/interfaces.ts +++ b/src/types/interfaces.ts @@ -1,11 +1,3 @@ -export interface Product { - id: number; - currentPrice: number; - productionDate: Date; - productSpec?: ProductSpec; - producer?: Producer; -} - export interface ProductSpec { id: number; name: string; @@ -15,7 +7,14 @@ export interface ProductSpec { maxPrice: number; producersCount: number; images: Image[]; - products?: Product[]; + products?: ProducerProduct[]; +} + +export interface Image { + id: number; + name: string; + url: string; + alt: string; } export interface ProducerProduct { @@ -79,7 +78,8 @@ export interface ProductionUnit { id: number; name: string; address: Address; - producer?: Producer; + producer?: Producer | number; + images?: Image[]; deletedAt: Date | null; } @@ -97,6 +97,15 @@ export interface BaseItems { pageSize: number; } +export interface Transport { + id: number; + licensePlate: string; + productionUnit?: ProductionUnit; + status: string; + shipments?: Shipment[]; + image: Image; +} + export interface Address { id: number; number: number; @@ -105,7 +114,7 @@ export interface Address { zipCode: string; street: string; parish: string; - country: string; + county: string; city: string; district: string; latitude: number; @@ -133,38 +142,19 @@ export interface OrderItem { status: 'Paid' | 'Processing' | 'Shipped' | 'Delivered' | 'Canceled'; } -export interface Image { - id: number; - name: string; - url: string; - alt: string; -} - -export interface ProducerProduct { - id: number; +export interface CreateProducerProduct { currentPrice: number; productionDate: Date; stock: number; - producer?: Producer; //Meto o ? para referir outra interface - productionUnit?: ProductionUnit; - productSpec?: ProductSpec; + productionUnitId: number; + productSpecId: number; } -export interface ProdUnit extends BaseItems {} - -export interface ProductionUnit { - id: number; - name: string; - address?: Address; - producer?: Producer; -} - -export interface ProductSpec { - id: number; - name: string; - description: string; - images: Image[]; - products?: Product[]; +export interface UpdateProducerProduct { + currentPrice: number; + productionDate: Date; + stock: number; + productionUnitId: number; } export type AuthenticatedUser = Consumer | Producer; @@ -187,6 +177,33 @@ export interface FieldPossibleValue { value: string; } +export interface SelectedUnit { + id: number; + name: string; + address: Address; + producer: Producer; + deletedAt: Date | null; +} + +export interface Location { + items: { + city: string; + county: string; + district: string; + door: string; + floor: number; + id: number; + latitude: number; + longitude: number; + number: number; + parish: string; + street: string; + zipCode: string; + }[]; + baseItems: BaseItems<{ + address: Address; + }>; +} export interface ReportCard { id: number; numeroEncomendas: number; @@ -211,13 +228,21 @@ export interface ReportEvolution { numeroEncomendasCancelados?: number; totalProdutos?: number; totalProdutosCancelados?: number; + numeroProdutosEncomendados?: number; + numeroProdutosEncomendadosCancelados?: number; } export interface ReportBarChartProduct { id: number; nome: string; - totalProdutos: number; - totalProdutosCancelados: number; + comprasTotais?: number; + comprasTotaisCancelados?: number; + numeroEncomendas?: number; + numeroEncomendasCancelados?: number; + totalProdutos?: number; + totalProdutosCancelados?: number; + numeroProdutosEncomendados?: number; + numeroProdutosEncomendadosCancelados?: number; } // Ver se isto está a ser usado @@ -233,24 +258,28 @@ export interface ReportProducts { numeroProdutosEncomendados?: number; numeroProdutosEncomendadosCancelados?: number; } -export interface ProductSpecFieldWithCategory { - category: Category; - products: { - fieldValues: ProductSpecField[]; - }[]; -} +export interface reportProducerClients { + id: number; + nome: string; + totalProdutos?: number; + totalProdutosCancelados?: number; + numeroEncomendas?: number; + numeroEncomendasCancelados?: number; + comprasTotais?: number; + comprasTotaisCancelados?: number; + numeroProdutosEncomendados?: number; + numeroProdutosEncomendadosCancelados?: number; +} export interface CartItem { producerProduct: ProducerProduct; consumer?: Consumer; quantity: number; } - export interface Shipment { carrier: Carrier; events: ShipmentEvent[]; } - export enum ShipmentStatus { /* eslint-disable no-unused-vars*/ Paid = 0, @@ -260,7 +289,6 @@ export enum ShipmentStatus { Canceled = 4, /* eslint-enable no-unused-vars*/ } - export interface ShipmentEvent { id: number; date: string; @@ -281,3 +309,10 @@ export interface Carrier { status: CarrierStatus; image: Image; } + +export interface ProductSpecFieldWithCategory { + category: Category; + products: { + fieldValues: ProductSpecField[]; + }[]; +} diff --git a/src/views/ProductionUnits.vue b/src/views/ProductionUnits.vue index b8522cbd..7d314204 100644 --- a/src/views/ProductionUnits.vue +++ b/src/views/ProductionUnits.vue @@ -3,52 +3,6 @@

Unidades de Produção

-
-

Adicionar Unidades de Produção

- -
- - - - - - - - - - - - - - -
- Adicionar - Recomeçar -
-
-
-
-
-

Gestão de Unidades de Produção

@@ -60,27 +14,63 @@ +

Editar Unidade de Produção Existente

-
- -

Edite os detalhes de: {{ puToEditIndex }}

-

Deixe em branco o que não pretende alterar

+

Edite os detalhes de:

+

{{ puToEditName }}

- Submeter novo Nome + Alterar
+
+ +

Adicionar uma Unidade de Produção

+
+ + + + + + + + + + +
+ Adicionar + Recomeçar +
+
+
+

@@ -165,14 +155,14 @@ import { computed } from 'vue'; export default { data() { return { - userProdUnit: {} as Array, + userProdUnit: {} as Array, sortBy: 'ID', sortDesc: false, fields: [ - { key: 'ID', sortable: true }, - { key: 'Nome', sortable: true }, - { key: 'Morada', sortable: true }, + { key: 'id', sortable: true }, + { key: 'nome', sortable: true }, + { key: 'morada', sortable: true }, ], listOfPUs: [] as string[], @@ -182,6 +172,7 @@ export default { inputValue: '', puToEditIndex: -1 as number, + puToEditName: 'Nenhum selecionado', userLoggedId: 1 as number, userLoggedName: '' as string, @@ -203,6 +194,8 @@ export default { changePUtoEdit(selectedPU: string) { const wantedIndex = this.listOfPUsIDs.indexOf(selectedPU as string); this.puToEditIndex = wantedIndex; + this.puToEditName = + this.listOfPUs[this.listOfPUsIDs.indexOf(selectedPU as string)]['nome']; //this.listOfPUs[wantedIndex]['ID']; }, @@ -210,9 +203,9 @@ export default { const newName = this.userLoggedName + ' - ' + (this.input1 as string); updateProductionUnit( this.userLoggedId, - this.listOfPUs[this.puToEditIndex]['ID'], + this.listOfPUs[this.puToEditIndex]['id'], newName, - this.userProdUnit[i].address?.id + this.userProdUnit[this.puToEditIndex].address?.id ); }, @@ -229,11 +222,17 @@ export default { for (let i = 0; i < Object.entries(this.userProdUnit).length; i++) { const build = { - ID: this.userProdUnit[i].id, - Nome: this.userProdUnit[i].name, - Morada: `${this.userProdUnit[i].address?.county}, ${this.userProdUnit[i].address?.city}, - ${this.userProdUnit[i].address?.district}, ${this.userProdUnit[i].address?.street} - ${this.userProdUnit[i].address?.number} ${this.userProdUnit[i].address?.zipCode}`, + id: this.userProdUnit[i].id as number, + nome: this.userProdUnit[i].name as string, + morada: `${this.userProdUnit[i].address?.country as string}, ${ + this.userProdUnit[i].address?.city as string + }, + ${this.userProdUnit[i].address?.district as string}, ${ + this.userProdUnit[i].address?.street as string + } + ${this.userProdUnit[i].address?.number as number} ${ + this.userProdUnit[i].address?.zipCode as number + }`, }; opts.push(build); } @@ -242,7 +241,9 @@ export default { this.listOfPUs = opts; for (let i = 0; i < this.listOfPUs.length; i++) { this.listOfPUsIDs.push( - `ID: ${this.listOfPUs[i]['ID']} - Nome: ${this.listOfPUs[i]['Nome']}` + `ID: ${this.listOfPUs[i as number]['id']} - Nome: ${ + this.listOfPUs[i as number]['nome'] + }` ); } console.log('itemIDs', this.listOfPUsIDs);