diff --git a/api-gateway/src/app.controller.ts b/api-gateway/src/app.controller.ts index abc90be1..7e6fe785 100644 --- a/api-gateway/src/app.controller.ts +++ b/api-gateway/src/app.controller.ts @@ -155,6 +155,16 @@ export class AppController { return this.appService.deleteAdminSystem(id); } + @Delete('user/deleteAdminCommunity/:id') + deleteAdminCommunity(@Param('id') id: string) { + return this.appService.deleteAdminCommunity(id); + } + + @Delete('user/deleteTenant/:id') + deleteTenant(@Param('id') id: string) { + return this.appService.deleteTenant(id); + } + @Post('user/changeStatus') changeStatusUser( @Body('id') pId: string, @@ -215,6 +225,8 @@ export class AppController { ) { return this.appService.changeStatusCommunity(pId, pStatus); } + + // #==== API Common Areas @Post('commonArea/createCommonArea') createCommonArea( @@ -254,6 +266,14 @@ export class AppController { return this.appService.deleteCommonArea(id); } + @Post('commonArea/changeStatus') + changeStatusCommonArea( + @Body('id') pId: string, + @Body('status') pStatus: string, + ) { + return this.appService.changeStatusCommonArea(pId, pStatus); + } + // #==== API GUEST //#API userService - create user @Post('guest/createGuest') diff --git a/api-gateway/src/app.service.ts b/api-gateway/src/app.service.ts index a5df9129..c3396486 100644 --- a/api-gateway/src/app.service.ts +++ b/api-gateway/src/app.service.ts @@ -54,8 +54,8 @@ export class AppService { } updateUser( - dni: string, - name: string, + dni: string, + name: string, last_name: string, email: string, phone: number, @@ -193,6 +193,22 @@ export class AppService { .pipe(map((message: string) => ({ message }))); } + deleteAdminCommunity(id: string) { + const pattern = { cmd: 'deleteAdminCommunity' }; + const payload = { id: id }; + return this.clientUserApp + .send(pattern, payload) + .pipe(map((message: string) => ({ message }))); + } + + deleteTenant(id: string) { + const pattern = { cmd: 'deleteTenant' }; + const payload = { id: id }; + return this.clientUserApp + .send(pattern, payload) + .pipe(map((message: string) => ({ message }))); + } + inicioSesion(pEmail: string, pPassword: string) { const pattern = { cmd: 'loginUser' }; const payload = { email: pEmail, password: pPassword }; @@ -343,6 +359,15 @@ export class AppService { .pipe(map((message: string) => ({ message }))); } + changeStatusCommonArea(pId: string, pStatus: string) { + const pattern = { cmd: 'changeStatus' }; + const payload = { id: pId, status: pStatus }; + return this.clientCommonAreaApp + .send(pattern, payload) + .pipe(map((message: string) => ({ message }))); + } + + // ====================== GUESTS =============================== //POST parameter from API diff --git a/mobile-ui/App.js b/mobile-ui/App.js index 9f43ccee..fd210975 100644 --- a/mobile-ui/App.js +++ b/mobile-ui/App.js @@ -1,27 +1,60 @@ -import React from "react"; +import React,{useState} from "react"; import { - NativeBaseProvider + NativeBaseProvider, + Icon } from "native-base"; import { NavigationContainer } from '@react-navigation/native'; import { createNativeStackNavigator } from '@react-navigation/native-stack'; +import { createBottomTabNavigator} from '@react-navigation/bottom-tabs'; import LogIn from "./components/LogIn"; import Home from "./components/Home"; import RecoverPassword from "./components/RecoverPassword"; +import Reservas from "./components/Reservas"; +import Profile from "./components/Profile"; +import { MaterialCommunityIcons } from '@expo/vector-icons'; +import AreaComun from "./components/AreaComun"; const Stack = createNativeStackNavigator(); +const Tab = createBottomTabNavigator(); + + +function HomeTab() { + +const [selected, setSelected] = useState(0); + + return ( + + (} color="#D7A86E" size="md" />)}} onclick={() => setSelected(0)} /> + (} color="#D7A86E" size="md" />)} } onclick={() => setSelected(1)} /> + (} color="#D7A86E" size="md" />)}} onclick={() => setSelected(2)} /> + + ) +} export default function App() { return ( - - - + + + + + + - ); } \ No newline at end of file diff --git a/mobile-ui/components/AreaComun.js b/mobile-ui/components/AreaComun.js new file mode 100644 index 00000000..ddd29bd2 --- /dev/null +++ b/mobile-ui/components/AreaComun.js @@ -0,0 +1,53 @@ +import React from "react"; + +import { + Box, + Heading, + VStack, + FormControl, + Input, + Button, + Center + } from "native-base"; + +export default function AreaComun({navigation}){ + + return ( +
+ + + Katoikia + + + Reserve su área común + + + + Hora de inicio + + + + Hora de finalización + + + + Lugar + + + + + + + +
+ + ) +} \ No newline at end of file diff --git a/mobile-ui/components/Home.js b/mobile-ui/components/Home.js index 6f35a009..ab60fb52 100644 --- a/mobile-ui/components/Home.js +++ b/mobile-ui/components/Home.js @@ -2,34 +2,100 @@ import React from "react"; import { Text, HStack, - IconButton, + Badge, Box, - StatusBar, - Icon, - MaterialIcons, - Center +Pressable, + Spacer, } from "native-base"; - + import { MaterialCommunityIcons } from '@expo/vector-icons'; export default function Home(){ + const [selected, setSelected] = React.useState(0); return ( -
- - - - - } /> - - Home + + + console.log("I'm Pressed")} rounded="8" overflow="hidden" borderWidth="1" borderColor="coolGray.300" maxW="96" shadow="3" bg="coolGray.100" p="5" marginTop="4"> + + + + Comunicado + + + + 1 month ago + + + + Administrador de Comunidad - - - } /> - } /> - } /> - - -
+ + Notificacion sobre la aplicacion + + + + + console.log("I'm Pressed")} rounded="8" overflow="hidden" borderWidth="1" borderColor="coolGray.300" maxW="96" shadow="3" bg="coolGray.100" p="5" marginTop="4"> + + + + Comunicado + + + + 1 month ago + + + + Administrador General + + + Notificacion sobre la aplicacion + + + + + + //
+ + // + // + + // setSelected(0) && navigation.navigate('Home')}> + //
+ // } color="white" size="md" /> + // + // Inicio + // + //
+ //
+ + + // setSelected(1) && ( () => navigation.navigate('Reservas'))}> + //
+ // } color="white" size="md" /> + // + // Reservas + // + //
+ //
+ + + // setSelected(2)}> + //
+ // } color="white" size="md" /> + // + // Perfil + // + //
+ //
+ + + //
+ //
) } \ No newline at end of file diff --git a/mobile-ui/components/LogIn.js b/mobile-ui/components/LogIn.js index c5b5e76d..eeb75cb9 100644 --- a/mobile-ui/components/LogIn.js +++ b/mobile-ui/components/LogIn.js @@ -1,21 +1,92 @@ import React from "react"; +import Cookies from 'universal-cookie'; import { Text, Link, - View, Center, Heading, VStack, Box, FormControl, - Input, Button, - Image, - TextInput + Image } from "native-base"; import logo from "../assets/logo-katoikia.png"; import { Entypo } from '@expo/vector-icons'; import { MaterialCommunityIcons } from '@expo/vector-icons'; +import { View, TextInput, StyleSheet } from "react-native"; + +const baseURL = "http://localhost:4000/user/loginUser"; +const cookies = new Cookies(); + +const styles = StyleSheet.create({ + input: { + height: 40, + margin: 10, + borderWidth: 0.5, + padding: 5, + flex: 1, + paddingTop: 10, + paddingRight: 10, + paddingBottom: 10, + paddingLeft: 0, + marginTop: 50, + marginBottom: 10 + }, + + iconStyle: { + padding: 10, + }, + + viewSection: { + flex: 1, + flexDirection: 'row', + justifyContent: 'center', + alignItems: 'center', + margin: 10 + }, + + container: { + + } +}) + +const iniciarSesion = async() => { + + try { + + await fetch(baseURL, { + cache: 'no-cache', + method: 'POST', + body: JSON.stringify(), + headers: { + 'Content-Type': 'application/json' + } + }) + .then(response => { + if (response.status != 201){ + console.log('ocurrio un error '); + }else{ + return response.json(); + } + }) + .then( response => { + const user = response.message + + if(user.user_type == '3'){ + cookies.set('id',user._id, {path: "/"} ) + cookies.set('name',user.name, {path: "/"} ) + cookies.set('email',user.email, {path: "/"} ) + cookies.set('type',user.user_type, {path: "/"} ) + } + }) + + } catch (error) { + + } + + +} export default function LogIn({navigation}) { return ( @@ -23,11 +94,15 @@ export default function LogIn({navigation}) {
- + Katoikia logo +
+ - + + Correo Electrónico - - - + + + Contraseña - - - + + + - - + + ); + + + } \ No newline at end of file diff --git a/mobile-ui/components/Profile.js b/mobile-ui/components/Profile.js index e69de29b..79e4b9b5 100644 --- a/mobile-ui/components/Profile.js +++ b/mobile-ui/components/Profile.js @@ -0,0 +1,57 @@ +import React from "react"; + +import { + Box, + Heading, + VStack, + FormControl, + Input, + Button, + Center + } from "native-base"; + +export default function Profile({navigation}){ + + return ( +
+ + + Katoikia + + + Modifique sus datos + + + + Nombre + + + + Correo Electrónico + + + + Teléfono + + + + Contraseña actual + + + + + + + +
+ + ) +} \ No newline at end of file diff --git a/mobile-ui/components/Reservas.js b/mobile-ui/components/Reservas.js new file mode 100644 index 00000000..dd5b8532 --- /dev/null +++ b/mobile-ui/components/Reservas.js @@ -0,0 +1,148 @@ +import React from "react"; +import { + Text, + HStack, + AntDesign, + Heading, + Stack, + Box, + ScrollView, + Fab, + Icon +} from "native-base"; +import logo from "../assets/logo-katoikia.png"; +import { Entypo } from '@expo/vector-icons'; +import { MaterialCommunityIcons } from '@expo/vector-icons'; +import { View, TextInput, StyleSheet } from "react-native"; + +const styles = StyleSheet.create({ + input: { + height: 40, + margin: 10, + borderWidth: 0.5, + padding: 5, + flex: 1, + paddingTop: 10, + paddingRight: 10, + paddingBottom: 10, + paddingLeft: 0, + marginTop: 50, + marginBottom: 10 + }, + + iconStyle: { + padding: 10, + }, + + viewSection: { + flex: 1, + flexDirection: 'row', + justifyContent: 'center', + alignItems: 'center', + margin: 10 + }, + + container: { + + } +}) + +export default function Reservas({navigation}) { + return ( + + + + + + + + + + + Reserva #1 + + + horario de Reserva + + + + Descripcion + + + + + 6 mins ago + + + + + + + + + + + + + + Reserva #1 + + + horario de Reserva + + + + Descripcion + + + + + 6 mins ago + + + + + + + + + } color="white" size="sm" />} onPress={() => navigation.navigate('area')}/> + + + ); + + + +} \ No newline at end of file diff --git a/mobile-ui/package-lock.json b/mobile-ui/package-lock.json index 860e1166..3085b0cd 100644 --- a/mobile-ui/package-lock.json +++ b/mobile-ui/package-lock.json @@ -10,6 +10,7 @@ "license": "MIT", "dependencies": { "@react-native-community/masked-view": "^0.1.11", + "@react-navigation/bottom-tabs": "^6.3.2", "@react-navigation/native": "^6.0.11", "@react-navigation/native-stack": "^6.7.0", "@react-navigation/stack": "^6.2.2", @@ -24,7 +25,8 @@ "react-native-safe-area-context": "3.3.2", "react-native-screens": "~3.10.1", "react-native-svg": "12.1.1", - "react-native-web": "0.17.1" + "react-native-web": "0.17.1", + "universal-cookie": "^4.0.4" }, "devDependencies": { "@babel/core": "^7.12.9" @@ -3533,6 +3535,23 @@ "resolved": "https://registry.npmjs.org/@react-native/polyfills/-/polyfills-1.0.0.tgz", "integrity": "sha512-0jbp4RxjYopTsIdLl+/Fy2TiwVYHy4mgeu07DG4b/LyM0OS/+lPP5c9sbnt/AMlnF6qz2JRZpPpGw1eMNS6A4w==" }, + "node_modules/@react-navigation/bottom-tabs": { + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/@react-navigation/bottom-tabs/-/bottom-tabs-6.3.2.tgz", + "integrity": "sha512-uS0XV2aH7bAW54Zuf5ks2V60riarbMALyMz3cB3204l4aGhx41UPUIr/K72pGAVdIPizpjz8Fk8qwczAwex9eg==", + "dependencies": { + "@react-navigation/elements": "^1.3.4", + "color": "^4.2.3", + "warn-once": "^0.1.0" + }, + "peerDependencies": { + "@react-navigation/native": "^6.0.0", + "react": "*", + "react-native": "*", + "react-native-safe-area-context": ">= 3.0.0", + "react-native-screens": ">= 3.0.0" + } + }, "node_modules/@react-navigation/core": { "version": "6.2.2", "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-6.2.2.tgz", @@ -4077,6 +4096,11 @@ "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" }, + "node_modules/@types/cookie": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.3.3.tgz", + "integrity": "sha512-LKVP3cgXBT9RYj+t+9FDKwS5tdI+rPBXaNSkma7hvqy35lc7mAokC2zsqWJH0LaqIt3B962nuYI77hsJoT1gow==" + }, "node_modules/@types/graceful-fs": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", @@ -5163,6 +5187,14 @@ "safe-buffer": "~5.1.1" } }, + "node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/copy-descriptor": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", @@ -10806,6 +10838,15 @@ "node": ">=0.10.0" } }, + "node_modules/universal-cookie": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/universal-cookie/-/universal-cookie-4.0.4.tgz", + "integrity": "sha512-lbRVHoOMtItjWbM7TwDLdl8wug7izB0tq3/YVKhT/ahB4VDvWMyvnADfnJI8y6fSvsjh51Ix7lTGC6Tn4rMPhw==", + "dependencies": { + "@types/cookie": "^0.3.3", + "cookie": "^0.4.0" + } + }, "node_modules/universalify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", @@ -13852,6 +13893,16 @@ "resolved": "https://registry.npmjs.org/@react-native/polyfills/-/polyfills-1.0.0.tgz", "integrity": "sha512-0jbp4RxjYopTsIdLl+/Fy2TiwVYHy4mgeu07DG4b/LyM0OS/+lPP5c9sbnt/AMlnF6qz2JRZpPpGw1eMNS6A4w==" }, + "@react-navigation/bottom-tabs": { + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/@react-navigation/bottom-tabs/-/bottom-tabs-6.3.2.tgz", + "integrity": "sha512-uS0XV2aH7bAW54Zuf5ks2V60riarbMALyMz3cB3204l4aGhx41UPUIr/K72pGAVdIPizpjz8Fk8qwczAwex9eg==", + "requires": { + "@react-navigation/elements": "^1.3.4", + "color": "^4.2.3", + "warn-once": "^0.1.0" + } + }, "@react-navigation/core": { "version": "6.2.2", "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-6.2.2.tgz", @@ -14265,6 +14316,11 @@ "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" }, + "@types/cookie": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.3.3.tgz", + "integrity": "sha512-LKVP3cgXBT9RYj+t+9FDKwS5tdI+rPBXaNSkma7hvqy35lc7mAokC2zsqWJH0LaqIt3B962nuYI77hsJoT1gow==" + }, "@types/graceful-fs": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", @@ -15145,6 +15201,11 @@ "safe-buffer": "~5.1.1" } }, + "cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" + }, "copy-descriptor": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", @@ -19577,6 +19638,15 @@ } } }, + "universal-cookie": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/universal-cookie/-/universal-cookie-4.0.4.tgz", + "integrity": "sha512-lbRVHoOMtItjWbM7TwDLdl8wug7izB0tq3/YVKhT/ahB4VDvWMyvnADfnJI8y6fSvsjh51Ix7lTGC6Tn4rMPhw==", + "requires": { + "@types/cookie": "^0.3.3", + "cookie": "^0.4.0" + } + }, "universalify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", diff --git a/mobile-ui/package.json b/mobile-ui/package.json index 7b717cc6..9fa4b879 100644 --- a/mobile-ui/package.json +++ b/mobile-ui/package.json @@ -18,6 +18,7 @@ }, "dependencies": { "@react-native-community/masked-view": "^0.1.11", + "@react-navigation/bottom-tabs": "^6.3.2", "@react-navigation/native": "^6.0.11", "@react-navigation/native-stack": "^6.7.0", "@react-navigation/stack": "^6.2.2", @@ -32,7 +33,8 @@ "react-native-safe-area-context": "3.3.2", "react-native-screens": "~3.10.1", "react-native-svg": "12.1.1", - "react-native-web": "0.17.1" + "react-native-web": "0.17.1", + "universal-cookie": "^4.0.4" }, "devDependencies": { "@babel/core": "^7.12.9" diff --git a/servicio-areas-comunes/src/common_areas/common_areas.controller.ts b/servicio-areas-comunes/src/common_areas/common_areas.controller.ts index b4374c7d..28b5ce7e 100644 --- a/servicio-areas-comunes/src/common_areas/common_areas.controller.ts +++ b/servicio-areas-comunes/src/common_areas/common_areas.controller.ts @@ -39,4 +39,12 @@ export class CommonAreasController { let _community_id = id['community_id']; return this.commonAreasService.findByCommunity(_community_id); } + + //cambiar de estado + @MessagePattern({ cmd: 'changeStatus' }) + changeStatus(@Payload() body: string) { + let pid = body['id']; + let pstatus = body['status']; + return this.commonAreasService.changeStatus(pid,pstatus); + } } diff --git a/servicio-areas-comunes/src/common_areas/common_areas.service.ts b/servicio-areas-comunes/src/common_areas/common_areas.service.ts index 9135b5a2..e617df0c 100644 --- a/servicio-areas-comunes/src/common_areas/common_areas.service.ts +++ b/servicio-areas-comunes/src/common_areas/common_areas.service.ts @@ -41,4 +41,10 @@ export class CommonAreasService { return this.commonAreaModel.find({ community_id: community_id }).exec(); } + async changeStatus(id: string, status: string) { + return this.commonAreaModel.findOneAndUpdate({ _id: id }, {status: status}, { + new: true, + }); + } + } diff --git a/servicio-comunidad-viviendas/package-lock.json b/servicio-comunidad-viviendas/package-lock.json index 46dd3dd0..22c95f9b 100644 --- a/servicio-comunidad-viviendas/package-lock.json +++ b/servicio-comunidad-viviendas/package-lock.json @@ -5,6 +5,7 @@ "requires": true, "packages": { "": { + "name": "servicio-comunidad-viviendas", "version": "0.0.1", "license": "UNLICENSED", "dependencies": { diff --git a/servicio-usuarios/src/users/users.controller.ts b/servicio-usuarios/src/users/users.controller.ts index a32d265d..a13bae7c 100644 --- a/servicio-usuarios/src/users/users.controller.ts +++ b/servicio-usuarios/src/users/users.controller.ts @@ -112,11 +112,18 @@ export class UsersController { @MessagePattern({ cmd: 'deleteAdminSystem' }) deleteAdminSystem(@Payload() user: any) { - console.log('entró'); - return this.userService.deleteAdminSystem(user['id']); } + @MessagePattern({ cmd: 'deleteAdminCommunity' }) + deleteAdminCommunity(@Payload() user: any) { + return this.userService.deleteAdminCommunity(user['id']); + } + + @MessagePattern({ cmd: 'deleteTenant' }) + deleteTenant(@Payload() user: any) { + return this.userService.deleteTenant(user['id']); + } @MessagePattern({ cmd: 'changeStatus' }) changeStatus(@Payload() body: string) { diff --git a/servicio-usuarios/src/users/users.service.ts b/servicio-usuarios/src/users/users.service.ts index 2015ef45..413cb497 100644 --- a/servicio-usuarios/src/users/users.service.ts +++ b/servicio-usuarios/src/users/users.service.ts @@ -14,8 +14,8 @@ export class UsersService { @InjectModel(User.name) private readonly userModel: Model, @Inject('SERVICIO_NOTIFICACIONES') private readonly clientNotificationtApp: ClientProxy, @Inject('SERVICIO_COMUNIDADES') private readonly clientCommunityApp: ClientProxy, - ) { } + private publicKey: string; async create(user: UserDocument): Promise { let passwordEncriptada = Md5.init(user.password); @@ -78,14 +78,14 @@ export class UsersService { }); } - /* async remove(id: string) { - return this.userModel.findByIdAndRemove({ _id: id }).exec(); - }*/ + /* async remove(id: string) { + return this.userModel.findByIdAndRemove({ _id: id }).exec(); + }*/ async remove(id: string) { - return this.userModel.findOneAndUpdate({ _id: id }, {status: '-1'}, { + return this.userModel.findOneAndUpdate({ _id: id }, { status: '-1' }, { new: true, - }); + }); } //inicio de sesion @@ -99,8 +99,12 @@ export class UsersService { reject(err); } else { let passwordEncriptada = Md5.init(password); - if (res[0].password == passwordEncriptada) { - resolve(res[0]); + if (res.length > 0) { + if (res[0].password == passwordEncriptada) { + resolve(res[0]); + } else { + resolve(null); + } } else { resolve(null); } @@ -180,9 +184,21 @@ export class UsersService { } async deleteAdminSystem(id: string) { - return this.userModel.findOneAndUpdate({ _id: id }, {status: '-1'}, { + return this.userModel.findOneAndUpdate({ _id: id }, { status: '-1' }, { new: true, - }); + }); + } + + deleteAdminCommunity(id: string) { + return this.userModel.findOneAndUpdate({ _id: id }, { status: '-1' }, { + new: true, + }); + } + + async deleteTenant(id: string) { + return this.userModel.findOneAndUpdate({ _id: id }, { status: '-1' }, { + new: true, + }); } async validateEmail(email: string) { @@ -202,31 +218,31 @@ export class UsersService { }); } - async findNumHouseTenant(community_id: string, tenant_id: string) { + async findNumHouseTenant(community_id: string, tenant_id: string): Promise { const pattern = { cmd: 'findOneCommunity' } const payload = { _id: community_id } - let callback = await this.clientCommunityApp + let callback = this.clientCommunityApp .send(pattern, payload) - .pipe( - map((response: string) => ({ response })) - ) + .pipe(map((response: string) => ({ response }))) const finalValue = await lastValueFrom(callback); const response = finalValue['response']; const houses = response['houses']; let num_house = ""; - await houses.forEach(async house => { - if (tenant_id == house.tenants.tenant_id) { - num_house = house.number_house; + await houses.forEach(async (house: { [x: string]: string; }) => { + if (house['tenant_id'] !== undefined) { + if (house['tenant_id'] === tenant_id) { + num_house = house['number_house']; } + } }) return num_house; } async changeStatus(id: string, status: string) { - return this.userModel.findOneAndUpdate({ _id: id }, {status: status}, { + return this.userModel.findOneAndUpdate({ _id: id }, { status: status }, { new: true, - }); + }); } } diff --git a/web-ui/web-react/package-lock.json b/web-ui/web-react/package-lock.json index e9ff9cd3..6699ac1c 100644 --- a/web-ui/web-react/package-lock.json +++ b/web-ui/web-react/package-lock.json @@ -17,7 +17,8 @@ "@fullcalendar/interaction": "^5.7.2", "@fullcalendar/react": "^5.7.0", "@fullcalendar/timegrid": "^5.7.2", - "axios": "^0.19.0", + "axios": "^0.19.2", + "bootstrap": "^5.2.0", "chart.js": "3.3.2", "classnames": "^2.2.6", "cors": "^2.8.5", @@ -2288,6 +2289,16 @@ "node": ">= 6" } }, + "node_modules/@popperjs/core": { + "version": "2.11.6", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz", + "integrity": "sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==", + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, "node_modules/@svgr/babel-plugin-add-jsx-attribute": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-4.2.0.tgz", @@ -4210,6 +4221,24 @@ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" }, + "node_modules/bootstrap": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.2.0.tgz", + "integrity": "sha512-qlnS9GL6YZE6Wnef46GxGv1UpGGzAwO0aPL1yOjzDIJpeApeMvqV24iL+pjr2kU4dduoBA9fINKWKgMToobx9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/twbs" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/bootstrap" + } + ], + "peerDependencies": { + "@popperjs/core": "^2.11.5" + } + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -19688,6 +19717,12 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==" }, + "@popperjs/core": { + "version": "2.11.6", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz", + "integrity": "sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==", + "peer": true + }, "@svgr/babel-plugin-add-jsx-attribute": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-4.2.0.tgz", @@ -21217,6 +21252,12 @@ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" }, + "bootstrap": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.2.0.tgz", + "integrity": "sha512-qlnS9GL6YZE6Wnef46GxGv1UpGGzAwO0aPL1yOjzDIJpeApeMvqV24iL+pjr2kU4dduoBA9fINKWKgMToobx9A==", + "requires": {} + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", diff --git a/web-ui/web-react/package.json b/web-ui/web-react/package.json index 12dd1f1d..4cb7843c 100644 --- a/web-ui/web-react/package.json +++ b/web-ui/web-react/package.json @@ -17,7 +17,8 @@ "@fullcalendar/interaction": "^5.7.2", "@fullcalendar/react": "^5.7.0", "@fullcalendar/timegrid": "^5.7.2", - "axios": "^0.19.0", + "axios": "^0.19.2", + "bootstrap": "^5.2.0", "chart.js": "3.3.2", "classnames": "^2.2.6", "cors": "^2.8.5", diff --git a/web-ui/web-react/src/App.js b/web-ui/web-react/src/App.js index ef05324a..1551381d 100644 --- a/web-ui/web-react/src/App.js +++ b/web-ui/web-react/src/App.js @@ -33,7 +33,8 @@ import AdministradoresComunidad from './components/AdministradoresComunidad'; import GuardasSeguridad from './components/GuardasSeguridad'; import Communities from './components/ComunidadViviendas'; import Inquilinos from './components/Inquilinos'; -import InquilinosCompletar from "./components/InquilinosCompletar.js"; +import RegistroComunicado from './components/RegistroComunicado'; +import "../node_modules/bootstrap/dist/css/bootstrap.min.css"; import Crud from './pages/Crud'; import EmptyPage from './pages/EmptyPage'; @@ -200,6 +201,9 @@ const App = () => { icon: PrimeIcons.BUILDING, to: '/areasComunes', }, + + { label: 'Comunicados', icon: PrimeIcons.COMMENTS, to: '/registroComunicado'}, + ] }, ] @@ -440,7 +444,6 @@ const App = () => { <> - ) @@ -453,7 +456,6 @@ const App = () => { - ) @@ -465,8 +467,7 @@ const App = () => { - - + ) } else { @@ -479,7 +480,6 @@ const App = () => { return ( <> } /> - @@ -502,8 +502,6 @@ const App = () => { - - ) diff --git a/web-ui/web-react/src/components/AdministradoresComunidad.js b/web-ui/web-react/src/components/AdministradoresComunidad.js index 826f0619..0ec73891 100644 --- a/web-ui/web-react/src/components/AdministradoresComunidad.js +++ b/web-ui/web-react/src/components/AdministradoresComunidad.js @@ -11,7 +11,7 @@ import { faHome, faUserAlt } from '@fortawesome/free-solid-svg-icons'; import { faPhoneAlt } from '@fortawesome/free-solid-svg-icons'; import { faAt } from '@fortawesome/free-solid-svg-icons'; import { faIdCardAlt } from '@fortawesome/free-solid-svg-icons'; -import { faEllipsis } from '@fortawesome/free-solid-svg-icons'; +import { faCircleQuestion } from '@fortawesome/free-solid-svg-icons'; import { faHomeAlt } from '@fortawesome/free-solid-svg-icons'; import { Dropdown } from 'primereact/dropdown'; import classNames from 'classnames'; @@ -31,7 +31,8 @@ const AdministradoresComunidad = () => { community_name: '', user_type: '2', date_entry: new Date(), - status: '1' + status: '1', + status_text: '', }; const [listaAdmins, setListaAdmins] = useState([]); @@ -47,12 +48,23 @@ const AdministradoresComunidad = () => { const toast = useRef(null); const dt = useRef(null); + const [changeStatusAdminCommunityDialog, setChangeStatusAdminCommunityDialog] = useState(false); + async function listaAdmin() { - let nombres = await fetch('http://localhost:4000/user/findAdminComunidad/', { method: 'GET' }) + await fetch('http://localhost:4000/user/findAdminComunidad/', { method: 'GET' }) .then((response) => response.json()) .then((data) => { return Promise.all(data.message.map(item => { + + + if (item.status == '1') { + item.status_text = 'Activo'; + } else if (item.status == '0') { + item.status_text = 'Inactivo'; + } else { + item.status_text = 'Eliminado'; + } //item.full_name returns the repositorie name return fetch(`http://localhost:4000/community/findCommunityName/${item.community_id}`, { method: 'GET' }) .then((response2) => response2.json()) @@ -63,7 +75,13 @@ const AdministradoresComunidad = () => { }) })); }) - .then(data => setListaAdmins(data)); + .then(data => { + data = data.filter( + (val) => val.status != -1, + ); + console.log(data) + setListaAdmins(data); + }); } @@ -72,11 +90,16 @@ const AdministradoresComunidad = () => { async function getCommunites() { - let response = await fetch('http://localhost:4000/community/allCommunities', { method: 'GET' }); - let resList = await response.json(); - let list = await resList.message; + let response = await fetch('http://localhost:4000/community/allCommunities', { method: 'GET' }) + .then((response) => response.json()) + .then(data => data.message) + .then(data => { + data = data.filter( + (val) => val.status != -1, + ) + setCommunitiesList(data); - setCommunitiesList(await list); + }) } useEffect(() => { @@ -85,7 +108,7 @@ const AdministradoresComunidad = () => { useEffect(() => { getCommunites(); - },[]) + }, []) const cList = communitiesList.map((item) => ({ label: item.name, @@ -94,64 +117,56 @@ const AdministradoresComunidad = () => { const deleteAdminCommunity = () => { - /* fetch('http://localhost:4000/community/deleteCommunity/' + community._id, { - cache: 'no-cache', - method: 'DELETE', - headers: { - 'Content-Type': 'application/json' - } - }) - .then( - function (response) { - if (response.status != 201) - console.log('Ocurrió un error con el servicio: ' + response.status); - else - return response.json(); - } - ) - .then( - function (response) { - - let _community = communities.filter(val => val._id !== community._id); - setCommunities(_community); - setDeleteCommunityDialog(false); - setCommunity(emptyCommunity); - toast.current.show({ severity: 'success', summary: 'Exito', detail: 'Comunidad de Viviendas Eliminada', life: 3000 }); - } - ) - .catch( - err => { - console.log('Ocurrió un error con el fetch', err) - toast.current.show({ severity: 'danger', summary: 'Error', detail: 'Comunidad de Viviendas no se pudo eliminar', life: 3000 }); - } - ); - */ - let _administrators = listaAdmins.filter( - (val) => val._id !== adminCommunity._id, - ); - setListaAdmins(_administrators); - setDeleteAdminCommunityDialog(false); - setAdminCommunity(emptyAdminCommunity); - toast.current.show({ - severity: 'success', - summary: 'Administrador de Comunidad Eliminada', - life: 3000, - }); + fetch('http://localhost:4000/user/deleteAdminCommunity/' + adminCommunity._id, { + cache: 'no-cache', + method: 'DELETE', + headers: { + 'Content-Type': 'application/json' + } + }) + .then( + function (response) { + if (response.status != 201) + console.log('Ocurrió un error con el servicio: ' + response.status); + else + return response.json(); + } + ) + .then( + function (response) { + + let _administrators = listaAdmins.filter( + (val) => val._id !== adminCommunity._id, + ); + setListaAdmins(_administrators); + setDeleteAdminCommunityDialog(false); + setAdminCommunity(emptyAdminCommunity); + toast.current.show({ severity: 'success', summary: 'Exito', detail: 'Administrador Comunidad Eliminada', life: 3000 }); + } + ) + .catch( + err => { + console.log('Ocurrió un error con el fetch', err) + toast.current.show({ severity: 'danger', summary: 'Error', detail: 'Administrador Comunidad no se pudo eliminar', life: 3000 }); + } + ); + + }; const deleteSelectedAdminsCommunity = () => { let _admins = listaAdmins.filter( (val) => !selectedAdminsCommunities.includes(val), ); - /* selectedCommunities.map((item) => { - fetch('http://localhost:4000/user/deleteCommunity/' + item._id, { + selectedAdminsCommunities.map((item) => { + fetch('http://localhost:4000/user/deleteAdminCommunity/' + item._id, { cache: 'no-cache', method: 'DELETE', headers: { 'Content-Type': 'application/json' } }) - })*/ + }) setListaAdmins(_admins); setDeleteAdminsCommunitiesDialog(false); setSelectedAdminsCommunities(null); @@ -163,6 +178,52 @@ const AdministradoresComunidad = () => { }); }; + + const cambiarStatusAdminCommuniy = () => { + if (adminCommunity.status == '1') { + adminCommunity.status = '0'; + adminCommunity.status_text = 'Inactivo'; + + } else if (adminCommunity.status == '0') { + adminCommunity.status = '1'; + adminCommunity.status_text = 'Activo'; + } + var data = { + id: adminCommunity._id, + status: adminCommunity.status, + }; + fetch('http://localhost:4000/user/changeStatus', { + cache: 'no-cache', + method: 'POST', + body: JSON.stringify(data), + headers: { + 'Content-Type': 'application/json' + } + }) + .then( + function (response) { + if (response.status != 201) + console.log('Ocurrió un error con el servicio: ' + response.status); + else + return response.json(); + } + ) + .then( + function (response) { + setChangeStatusAdminCommunityDialog(false); + toast.current.show({ + severity: 'success', + summary: 'Éxito', + detail: 'Administrador de Comunidad Actualizado', + life: 3000, + }); + } + ) + .catch( + err => console.log('Ocurrió un error con el fetch', err) + ); + } + const saveAdminCommunity = () => { if (adminCommunity.name && adminCommunity.dni && adminCommunity.last_name && adminCommunity.email && adminCommunity.phone) { @@ -228,11 +289,33 @@ const AdministradoresComunidad = () => { setDeleteAdminsCommunitiesDialog(true); }; + const hideChangeStatusAdmimCommunityDialog = () => { + setChangeStatusAdminCommunityDialog(false); + }; + const confirmChangeStatuAdminCommunity = (adminCommunity) => { + setAdminCommunity(adminCommunity); + setChangeStatusAdminCommunityDialog(true); + }; const actionsAdminCommunity = (rowData) => { + let icono = ''; + let text = ''; + if (rowData.status == '0') { + icono = "pi pi-eye"; + text = "Activar Administrador de Comunidad" + } else if (rowData.status == '1') { + icono = "pi pi-eye-slash"; + text = "Inactivar Administrador de Comunidad" + } return (
+
diff --git a/web-ui/web-react/src/components/AdministradoresSistema.js b/web-ui/web-react/src/components/AdministradoresSistema.js index 10f299f2..a301c3ed 100644 --- a/web-ui/web-react/src/components/AdministradoresSistema.js +++ b/web-ui/web-react/src/components/AdministradoresSistema.js @@ -44,7 +44,6 @@ const AdministradoresSistema = () => { status_text: '', }; - async function fetchP() { let nombres = await fetch(urlFetch, { method: 'GET' }); let adminRes = await nombres.json(); @@ -60,11 +59,11 @@ const AdministradoresSistema = () => { }) setAdministrators(await data); } + useEffect(() => { fetchP(); }, []) - function registrarAdmin() { var data = { dni: document.getElementById('identificacion').value, diff --git a/web-ui/web-react/src/components/AreasComunes.js b/web-ui/web-react/src/components/AreasComunes.js index 0850e31c..7b0b6fd8 100644 --- a/web-ui/web-react/src/components/AreasComunes.js +++ b/web-ui/web-react/src/components/AreasComunes.js @@ -43,6 +43,7 @@ const AreasComunes = () => { const dt = useRef(null); const [cookies, setCookie] = useCookies(); + const [changeStatusAreaDialog, setChangeStatusAreaDialog] = useState(false); @@ -220,6 +221,51 @@ const AreasComunes = () => { }); }; + const cambiarStatuscommonArea = () => { + if (commonArea.status == '1') { + commonArea.status = '0'; + commonArea.status_text = 'Inactivo'; + + } else if (commonArea.status == '0') { + commonArea.status = '1'; + commonArea.status_text = 'Activo'; + } + var data = { + id: commonArea._id, + status: commonArea.status, + }; + fetch('http://localhost:4000/commonArea/changeStatus', { + cache: 'no-cache', + method: 'POST', + body: JSON.stringify(data), + headers: { + 'Content-Type': 'application/json' + } + }) + .then( + function (response) { + if (response.status != 201) + console.log('Ocurrió un error con el servicio: ' + response.status); + else + return response.json(); + } + ) + .then( + function (response) { + setChangeStatusAreaDialog(false); + toast.current.show({ + severity: 'success', + summary: 'Éxito', + detail: 'Área Común Actualizada', + life: 3000, + }); + } + ) + .catch( + err => console.log('Ocurrió un error con el fetch', err) + ); + } + const hideDeleteCommonAreaDialog = () => { setDeleteCommonAreaDialog(false); } @@ -237,9 +283,36 @@ const AreasComunes = () => { setDeleteCommonAreasDialog(true); }; + + + const hideChangeStatusAreaDialog = () => { + setChangeStatusAreaDialog(false); + }; + + const confirmChangeStatusArea = (commonArea) => { + setCommonArea(commonArea); + setChangeStatusAreaDialog(true); + }; + const actionsCommonArea = (rowData) => { + let icono = ''; + let text = ''; + if (rowData.status == '0') { + icono = "pi pi-eye"; + text = "Activar Área Común" + } else if (rowData.status == '1') { + icono = "pi pi-eye-slash"; + text = "Inactivar Área Común" + } + return (
+
+ +
+ + {commonArea && ( + + ¿Estás seguro que desea cambiar estado a {commonArea.name}? + + )} +
+
@@ -513,7 +622,7 @@ const AreasComunes = () => {
-
+
{ const tenantsBodyTemplate = (rowData) => { let tenants = rowData.tenants; - let name = findNameTenant(tenants.tenant_id); + let name = 'Sin inquilino'; + if (rowData.tenants) { + name = findNameTenant(tenants.tenant_id); + } + return ( <> {name} diff --git a/web-ui/web-react/src/components/Inquilinos.js b/web-ui/web-react/src/components/Inquilinos.js index e012e88e..379e32b7 100644 --- a/web-ui/web-react/src/components/Inquilinos.js +++ b/web-ui/web-react/src/components/Inquilinos.js @@ -16,9 +16,10 @@ import { faHashtag } from '@fortawesome/free-solid-svg-icons' import { faCircleQuestion } from '@fortawesome/free-solid-svg-icons' import { useCookies } from 'react-cookie' import InfoDialog from './generic/InfoDialog' +import classNames from 'classnames'; const Inquilinos = () => { - let emptyTenant = { + const emptyTenant = { _id: null, dni: '', name: '', @@ -41,16 +42,15 @@ const Inquilinos = () => { const [globalFilter, setGlobalFilter] = useState(null) const [deleteTenantDialog, setDeleteTenantDialog] = useState(false) const [deleteTenantsDialog, setDeleteTenantsDialog] = useState(false) - const [communitiesList, setCommunitiesList] = useState([]) - const [communityId, setCommunityId] = useState(null) + const [community, setCommunity] = useState([]) + const [houseNumber, setHouseNumber] = useState([]) + const [housesList, setHousesList] = useState([]) const [submitted, setSubmitted] = useState(false) let [openInfoDialog] = useState(false) const toast = useRef(null) const dt = useRef(null) - - const [cookies, setCookie] = useCookies() - const [changeStatusTenantDialog, setChangeStatusTenantDialog] = - useState(false) + const [cookies] = useCookies() + const [changeStatusTenantDialog, setChangeStatusTenantDialog] = useState(false) async function tenantsList() { await fetch( @@ -76,15 +76,21 @@ const Inquilinos = () => { }) } - async function getCommunites() { + async function getCommunity() { let response = await fetch( - 'http://localhost:4000/community/allCommunities', + `http://localhost:4000/community/findCommunityName/${cookies.community_id}`, { method: 'GET' }, ) - let resList = await response.json() - let list = await resList.message - list = await list.filter((val) => val.status !== -1) - setCommunitiesList(await list) + const responseJson = await response.json() + const result = await responseJson.message + setCommunity(await result) + const houses = await result.houses.filter((house) => + house.state === "desocupada" + ) + setHousesList(houses.map((house) => ({ + label: house.number_house, value: house.number_house + })) + ) } useEffect(() => { @@ -92,46 +98,44 @@ const Inquilinos = () => { }, [tenantsList]) useEffect(() => { - getCommunites() + getCommunity() }, []) - const cList = communitiesList.map((item) => ({ - label: item.name, - value: item._id, - })) + const saveTenant = () => { + if (tenant.email && tenant.number_house && tenant.dni + && tenant.name && tenant.last_name && tenant.phone) { + let _tenants = [...tenants] + let _tenant = { ...tenant } + _tenant.community_id = cookies.community_id; + _tenant.number_house = houseNumber; + _tenant.password = _tenant.email; - function registrarInquilino() { - let newTenant = { - _id: null, - dni: '', - name: '', - last_name: '', - email: document.getElementById('correo_electronico').value, - phone: '', - password: '', - community_id: document.getElementById('numero_vivienda').value, - community_name: '', - number_house: 'Sin número de vivienda', - date_entry: new Date(), - user_type: '3', - status: '1', - status_text: '', - } - - fetch('http://localhost:3000/api/createUser', { - method: 'POST', - cache: 'no-cache', - body: JSON.stringify(newTenant), - headers: { - 'Content-Type': 'application/json', - }, - }).then((response) => { - if (response.ok) { - alert('Inquilino registrado correctamente') - } else { - alert('Error al registrar inquilino') - } - }) + fetch(`http://localhost:4000/user/createUser`, { + cache: 'no-cache', + method: 'POST', + body: JSON.stringify(_tenant), + headers: { + 'Content-Type': 'application/json', + }, + }) + .then((response) => { + if (response.status !== 201) + console.log(`Hubo un error en el servicio: ${response.status}`) + else return response.json() + }) + .then(() => { + _tenants.push(_tenant) + toast.current.show({ + severity: 'success', + summary: 'Éxito', + detail: 'Inquilino creado', + life: 3000, + }) + setTenants(_tenants) + setTenant(emptyTenant) + }) + .catch((error) => console.log(`Ocurrió un error: ${error}`)) + } else setSubmitted(true) } const deleteTenant = () => { @@ -424,11 +428,16 @@ const Inquilinos = () => { ) } - const testInquilino = { - name: 'Juan', // Nombre - last_name: 'Pérez', // Apellidos - email: 'jperez@gmail.com', - phone: '+57 300 1234567', // Teléfono + const onInputChange = (e, name) => { + const value = (e.target && e.target.value) || '' + let _tenant = { ...tenant } + _tenant[`${name}`] = value + setTenant(_tenant) + } + + const handleHouses = (e) => { + const getHouseNumber = e.target.value; + setHouseNumber(getHouseNumber); } return ( @@ -608,31 +617,98 @@ const Inquilinos = () => {
-
-
-
Registrar Inquilino
-
-
- - +
+
+
Registro de un administrador de una comunidad de viviendas
+
+
+ +
+
+ + + + onInputChange(e, 'name')} required autoFocus className={classNames({ 'p-invalid': submitted && tenant.name === '' })} /> +
+ {submitted && tenant.name === '' && Nombre es requerido.} +
-
- - setCommunityId(e.value)} - /> +
+ +
+
+ + + + onInputChange(e, 'last_name')} required autoFocus className={classNames({ 'p-invalid': submitted && tenant.last_name === '' })} /> +
+ {submitted && tenant.last_name === '' && Apellidos son requeridos.} +
diff --git a/web-ui/web-react/src/components/InquilinosCompletar.js b/web-ui/web-react/src/components/InquilinosCompletar.js deleted file mode 100644 index 06a18ca1..00000000 --- a/web-ui/web-react/src/components/InquilinosCompletar.js +++ /dev/null @@ -1,125 +0,0 @@ -import { Button } from 'primereact/button' -import { InputText } from 'primereact/inputtext' -import React, { useState } from 'react' - -import { useCookies } from 'react-cookie' - -const InquilinosCompletar = () => { - let emptyTenant = { - _id: null, - dni: '', - name: '', - last_name: '', - email: '', - phone: '', - password: '', - community_id: '', - community_name: '', - number_house: 'Sin número de vivienda', - user_type: '4', - date_entry: new Date(), - status: '1', - status_text: '', - } - - const [tenant, setTenant] = useState(emptyTenant) - const [selectedTentants, setSelectedTenants] = useState(null) - const [globalFilter, setGlobalFilter] = useState(null) - const [deleteTenantDialog, setDeleteTenantDialog] = useState(false) - const [deleteTenantsDialog, setDeleteTenantsDialog] = useState(false) - const [communitiesList, setCommunitiesList] = useState([]) - const [communityId, setCommunityId] = useState(null) - const [submitted, setSubmitted] = useState(false) - const [cookies, setCookie] = useCookies() - const [changeStatusTenantDialog, setChangeStatusTenantDialog] = - useState(false) - - function finalizarRegistro() { - let data = { - dni: document.getElementById('identificacion').value, - name: document.getElementById('nombre').value, - last_name: document.getElementById('apellidos').value, - phone: document.getElementById('telefono').value, - email: document.getElementById('correo_electronico').value, - community_id: document.getElementById('numero_vivienda').value, - password: document.getElementById('password').value, - user_type: '3', - status: '1', - } - - fetch('http://localhost:3000/api/createUser', { - method: 'PUT', - cache: 'no-cache', - body: JSON.stringify(data), - headers: { - 'Content-Type': 'application/json', - }, - }).then((response) => { - if (response.ok) { - alert('Inquilino registrado correctamente') - } else { - alert('Error al registrar inquilino') - } - }) - } - - return ( -
-
-
-
Finalizar Registro
-
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
-
-
-
- ) -} - -export default React.memo(InquilinosCompletar) diff --git a/web-ui/web-react/src/components/RegistroComunicado.js b/web-ui/web-react/src/components/RegistroComunicado.js new file mode 100644 index 00000000..e2d756a9 --- /dev/null +++ b/web-ui/web-react/src/components/RegistroComunicado.js @@ -0,0 +1,165 @@ +import React, { useEffect, useState, useRef } from 'react'; +import { InputText } from 'primereact/inputtext'; +import { Button } from 'primereact/button'; +import { InputTextarea } from 'primereact/inputtextarea'; +import { useCookies } from "react-cookie"; +import { DataTable } from 'primereact/datatable'; +import { Column } from 'primereact/column'; +import { Toast } from 'primereact/toast'; +import { Dialog } from 'primereact/dialog'; +import { Toolbar } from 'primereact/toolbar'; +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; +import { faHome, faUserAlt } from '@fortawesome/free-solid-svg-icons'; +import { faCommentAlt } from '@fortawesome/free-solid-svg-icons'; +import { faPhoneAlt } from '@fortawesome/free-solid-svg-icons'; +import { faAt } from '@fortawesome/free-solid-svg-icons'; +import { faIdCardAlt } from '@fortawesome/free-solid-svg-icons'; +import { faEllipsis } from '@fortawesome/free-solid-svg-icons'; +import { faHomeAlt } from '@fortawesome/free-solid-svg-icons'; +import { Dropdown } from 'primereact/dropdown'; +import classNames from 'classnames'; +const RegistroComunicado = () => { + + let emptyComunicado = { + _id: null, + post: '', + user_id: '', + community_id: '' + }; + + useEffect(()=>{ + listaComunis(); + },[]) + + + const [comunicado, setComunicado] = useState(emptyComunicado); + const [comunicados,setComuicados]=useState([]); + const [comunicadoId, setComunicadoId] = useState(null); + const [submitted, setSubmitted] = useState(false); + const toast = useRef(null); + const dt = useRef(null); + const [cookies, setCookie] = useCookies(); + const [globalFilter, setGlobalFilter] = useState(null); + + async function listaComunis() { + let comunicadosA=await fetch('http://localhost:4000/post/allPosts', {method:'GET'}); + let comunicadosRes= await comunicadosA.json(); + setComuicados(comunicadosRes.message); + console.log(comunicadosRes.message); + } + + + const saveComunicado = () => { + var data = { + post: document.getElementById('txt_comunicado').value, + user_id: cookies.id, + community_id: cookies.community_id + }; + + fetch('http://localhost:4000/post/createPost', { + cache: 'no-cache', + method: 'POST', + body: JSON.stringify(data), + headers: { + 'Content-Type': 'application/json' + } + }) + .then( + function (response) { + if (response.status != 201) + console.log('Ocurrió un error con el servicio: ' + response.status); + else + return response.json(); + } + ) + .then( + function (response) { + + } + ) + .catch( + err => console.log('Ocurrió un error con el fetch', err) + ); + } + + const header = ( + + +
+
Comunicados de la comunidad
+ + + setGlobalFilter(e.target.value)} placeholder="Buscar..." /> + +
+
+ ); + const headerPost = ( + <> +

+ {' '} + {' '} + Descripción comunicado

+ + ) + + const leftToolbarTemplate = () => { + return ( + +
+
+
+ ) +} + +const rightToolbarTemplate = () => { + return ( + +
+
+
+
+ ); +}; + +export default React.memo(RegistroComunicado);