Merge pull request #106 from DeimosPr4/UH-listarComunidadesdeViviendas
listar comunidades de viviendas
This commit is contained in:
		
						commit
						4df366362d
					
				| 
						 | 
					@ -110,6 +110,14 @@ export class AppController {
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  @Post('community/findCommunityAdmin')
 | 
				
			||||||
 | 
					  findCommunityAdmin(
 | 
				
			||||||
 | 
					    @Body('community_id') community_id: string,
 | 
				
			||||||
 | 
					  ) {
 | 
				
			||||||
 | 
					    return this.appService.findCommunityAdmin(community_id);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // #==== API Common Areas
 | 
					  // #==== API Common Areas
 | 
				
			||||||
  @Post('commonArea/createCommonArea')
 | 
					  @Post('commonArea/createCommonArea')
 | 
				
			||||||
  createCommonArea(
 | 
					  createCommonArea(
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -115,6 +115,18 @@ export class AppService {
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  //GET parameter from API
 | 
				
			||||||
 | 
					  findCommunityAdmin(community_id: string) {
 | 
				
			||||||
 | 
					    const pattern = { cmd: 'findCommunityAdmin' };
 | 
				
			||||||
 | 
					    const payload = { community_id: community_id };
 | 
				
			||||||
 | 
					    return this.clientCommunityApp
 | 
				
			||||||
 | 
					      .send<string>(pattern, payload)
 | 
				
			||||||
 | 
					      .pipe(
 | 
				
			||||||
 | 
					        map((message: string) => ({ message })),
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // ====================== COMMUNITIES =============================== 
 | 
					  // ====================== COMMUNITIES =============================== 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  //POST parameter from API
 | 
					  //POST parameter from API
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,7 +3,11 @@ import { AppModule } from './app.module';
 | 
				
			||||||
const cors = require('cors');
 | 
					const cors = require('cors');
 | 
				
			||||||
async function bootstrap() {
 | 
					async function bootstrap() {
 | 
				
			||||||
  const app = await NestFactory.create(AppModule);
 | 
					  const app = await NestFactory.create(AppModule);
 | 
				
			||||||
 | 
					  app.enableCors({
 | 
				
			||||||
 | 
					    origin: 'http://localhost:3000',
 | 
				
			||||||
 | 
					    methods: 'GET, PUT, POST, DELETE',
 | 
				
			||||||
 | 
					    allowedHeaders: 'Content-Type, Authorization',
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
  await app.listen(4000);
 | 
					  await app.listen(4000);
 | 
				
			||||||
  app.use(cors());
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
bootstrap();
 | 
					bootstrap();
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -29,6 +29,12 @@ export class CommunitiesController {
 | 
				
			||||||
    return this.communitiesService.findOneName(_id);
 | 
					    return this.communitiesService.findOneName(_id);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 /* @MessagePattern({cmd: 'findCommunityAdmin'})
 | 
				
			||||||
 | 
					  findCommunityAdmin(@Payload() community: any) {
 | 
				
			||||||
 | 
					    let _community = community['community_id'];
 | 
				
			||||||
 | 
					    return this.communitiesService.findCommunityAdmin(_community, "2");
 | 
				
			||||||
 | 
					  }*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @MessagePattern({cmd: 'updateCommunity'})
 | 
					  @MessagePattern({cmd: 'updateCommunity'})
 | 
				
			||||||
  update(@Payload() community: CommunityDocument) {
 | 
					  update(@Payload() community: CommunityDocument) {
 | 
				
			||||||
    return this.communitiesService.update(community.id, community);
 | 
					    return this.communitiesService.update(community.id, community);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,12 +2,23 @@ import { Module } from '@nestjs/common';
 | 
				
			||||||
import { CommunitiesService } from './communities.service';
 | 
					import { CommunitiesService } from './communities.service';
 | 
				
			||||||
import { CommunitiesController } from './communities.controller';
 | 
					import { CommunitiesController } from './communities.controller';
 | 
				
			||||||
import { MongooseModule } from '@nestjs/mongoose';
 | 
					import { MongooseModule } from '@nestjs/mongoose';
 | 
				
			||||||
 | 
					import { ClientsModule, Transport } from "@nestjs/microservices";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { Community, CommunitySchema } from '../schemas/community.schema';
 | 
					import { Community, CommunitySchema } from '../schemas/community.schema';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@Module({
 | 
					@Module({
 | 
				
			||||||
  imports: [
 | 
					  imports: [
 | 
				
			||||||
 | 
					    ClientsModule.register([
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        name: "SERVICIO_USUARIOS",
 | 
				
			||||||
 | 
					        transport: Transport.TCP,
 | 
				
			||||||
 | 
					        options: {
 | 
				
			||||||
 | 
					          host: "127.0.0.1",
 | 
				
			||||||
 | 
					          port: 3001
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ]),
 | 
				
			||||||
    MongooseModule.forFeature([{ name: Community.name, schema: CommunitySchema }]), 
 | 
					    MongooseModule.forFeature([{ name: Community.name, schema: CommunitySchema }]), 
 | 
				
			||||||
  ],
 | 
					  ],
 | 
				
			||||||
  controllers: [CommunitiesController],
 | 
					  controllers: [CommunitiesController],
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,13 +1,20 @@
 | 
				
			||||||
import { Injectable } from '@nestjs/common';
 | 
					import { Injectable, Inject } from '@nestjs/common';
 | 
				
			||||||
import { Model } from 'mongoose';
 | 
					import { Model } from 'mongoose';
 | 
				
			||||||
import { Community, CommunityDocument } from 'src/schemas/community.schema';
 | 
					import { Community, CommunityDocument } from 'src/schemas/community.schema';
 | 
				
			||||||
import { InjectModel } from '@nestjs/mongoose';
 | 
					import { InjectModel } from '@nestjs/mongoose';
 | 
				
			||||||
 | 
					import { RpcException, ClientProxy } from '@nestjs/microservices';
 | 
				
			||||||
 | 
					import { from, lastValueFrom, map, scan, mergeMap } from 'rxjs';
 | 
				
			||||||
 | 
					import { Admin } from 'src/schemas/admin.entity';
 | 
				
			||||||
 | 
					import { appendFileSync } from 'fs';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@Injectable()
 | 
					@Injectable()
 | 
				
			||||||
export class CommunitiesService {
 | 
					export class CommunitiesService {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  constructor(
 | 
					  constructor(
 | 
				
			||||||
    @InjectModel(Community.name) private readonly communityModel: Model<CommunityDocument>,
 | 
					    @InjectModel(Community.name) private readonly communityModel: Model<CommunityDocument>,
 | 
				
			||||||
 | 
					    @Inject('SERVICIO_USUARIOS') private readonly clientUserApp: ClientProxy,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ) { }
 | 
					  ) { }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  async create(community: CommunityDocument): Promise<Community> {
 | 
					  async create(community: CommunityDocument): Promise<Community> {
 | 
				
			||||||
| 
						 | 
					@ -15,10 +22,29 @@ export class CommunitiesService {
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  async findAll(): Promise<Community[]> {
 | 
					  async findAll(): Promise<Community[]> {
 | 
				
			||||||
    return this.communityModel
 | 
					
 | 
				
			||||||
 | 
					    return await this.communityModel
 | 
				
			||||||
      .find()
 | 
					      .find()
 | 
				
			||||||
      .setOptions({ sanitizeFilter: true })
 | 
					      .setOptions({ sanitizeFilter: true })
 | 
				
			||||||
      .exec();
 | 
					      .exec()
 | 
				
			||||||
 | 
					      .then( async community => {
 | 
				
			||||||
 | 
					        if(community){
 | 
				
			||||||
 | 
					          await Promise.all(community.map(async c => {
 | 
				
			||||||
 | 
					            let admin = await this.findCommunityAdmin(c["_id"], "2")
 | 
				
			||||||
 | 
					            if(admin){
 | 
				
			||||||
 | 
					              c["id_admin"] = admin["_id"]
 | 
				
			||||||
 | 
					              c["name_admin"] = admin["name"]
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return c
 | 
				
			||||||
 | 
					          }))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          console.log(community)
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        return  community;
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //buscar al usuario con el id de la comunidad anexado
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  findOne(id: string): Promise<Community> {
 | 
					  findOne(id: string): Promise<Community> {
 | 
				
			||||||
| 
						 | 
					@ -37,4 +63,19 @@ export class CommunitiesService {
 | 
				
			||||||
  async remove(id: string) {
 | 
					  async remove(id: string) {
 | 
				
			||||||
    return this.communityModel.findByIdAndRemove({ _id: id }).exec();
 | 
					    return this.communityModel.findByIdAndRemove({ _id: id }).exec();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  async findCommunityAdmin(community: string, user_type: string) {
 | 
				
			||||||
 | 
					    const pattern = { cmd: 'findOneCommunityUser' }
 | 
				
			||||||
 | 
					    const payload = { community_id: community, user_type: user_type }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let callback = await this.clientUserApp
 | 
				
			||||||
 | 
					      .send<string>(pattern, payload)
 | 
				
			||||||
 | 
					      .pipe(
 | 
				
			||||||
 | 
					        map((response: string) => ({ response }))
 | 
				
			||||||
 | 
					      )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const finalValue = await lastValueFrom(callback);
 | 
				
			||||||
 | 
					    return finalValue['response'];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,4 @@
 | 
				
			||||||
 | 
					export interface Admin {
 | 
				
			||||||
 | 
					    id_community: string;
 | 
				
			||||||
 | 
					    user_type: string;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -7,6 +7,11 @@ export type CommunityDocument = Community & Document;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@Schema({ collection: 'communities' })
 | 
					@Schema({ collection: 'communities' })
 | 
				
			||||||
export class Community {
 | 
					export class Community {
 | 
				
			||||||
 | 
					    @Prop()
 | 
				
			||||||
 | 
					    id_admin: string;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Prop({ default: "Sin Administrador" })
 | 
				
			||||||
 | 
					    name_admin: string ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Prop()
 | 
					    @Prop()
 | 
				
			||||||
    name: string;
 | 
					    name: string;
 | 
				
			||||||
| 
						 | 
					@ -37,6 +42,7 @@ export class Community {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Prop({ type: [HouseSchema] })
 | 
					    @Prop({ type: [HouseSchema] })
 | 
				
			||||||
    houses: Array<House>;
 | 
					    houses: Array<House>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -7,11 +7,14 @@ import { Tenant, TenantSchema } from './tenant.schema';
 | 
				
			||||||
@Schema()
 | 
					@Schema()
 | 
				
			||||||
export class House extends Document  {
 | 
					export class House extends Document  {
 | 
				
			||||||
    @Prop({ default: " " })
 | 
					    @Prop({ default: " " })
 | 
				
			||||||
    number: string;
 | 
					    number_house: string;
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    @Prop({ default: " " })
 | 
					    @Prop({ default: " " })
 | 
				
			||||||
    description: string;
 | 
					    description: string;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Prop({ default: "desocupada" })
 | 
				
			||||||
 | 
					    state: string;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Prop({ type: TenantSchema, default: " " })
 | 
					    @Prop({ type: TenantSchema, default: " " })
 | 
				
			||||||
    tenants: Tenant;
 | 
					    tenants: Tenant;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -66,4 +66,13 @@ export class UsersController {
 | 
				
			||||||
  testSendMail(@Payload() user: UserDocument) {
 | 
					  testSendMail(@Payload() user: UserDocument) {
 | 
				
			||||||
    return this.userService.testSendMail(user);
 | 
					    return this.userService.testSendMail(user);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  //buscar usuario de una comunidad
 | 
				
			||||||
 | 
					  @MessagePattern({ cmd: 'findOneCommunityUser' })
 | 
				
			||||||
 | 
					  findCommunityUser(@Payload() user: any) {
 | 
				
			||||||
 | 
					    return this.userService.findCommunityUser(user["community_id"], user["user_type"]);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -99,4 +99,10 @@ export class UsersService {
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  async findCommunityUser(community_id: string, user_type: number): Promise<User> {
 | 
				
			||||||
 | 
					    return this.userModel.findOne({ community_id: community_id, user_type: user_type }).exec();
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -30,6 +30,7 @@ import BlocksDemo from './templates/BlocksDemo';
 | 
				
			||||||
import IconsDemo from './templates/IconsDemo';
 | 
					import IconsDemo from './templates/IconsDemo';
 | 
				
			||||||
import AdministradoresSistema from './components/AdministradoresSistema';
 | 
					import AdministradoresSistema from './components/AdministradoresSistema';
 | 
				
			||||||
import AdministradoresComunidad from './components/AdministradoresComunidad';
 | 
					import AdministradoresComunidad from './components/AdministradoresComunidad';
 | 
				
			||||||
 | 
					import Communities from './components/ComunidadViviendas';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import Crud from './pages/Crud';
 | 
					import Crud from './pages/Crud';
 | 
				
			||||||
import EmptyPage from './pages/EmptyPage';
 | 
					import EmptyPage from './pages/EmptyPage';
 | 
				
			||||||
| 
						 | 
					@ -165,6 +166,7 @@ const App = () => {
 | 
				
			||||||
                {label: 'Dashboard', icon: 'pi pi-fw pi-home', to: '/'},
 | 
					                {label: 'Dashboard', icon: 'pi pi-fw pi-home', to: '/'},
 | 
				
			||||||
                {label: 'Administradores del sistema', icon: 'pi pi-fw pi-id-card', to: '/administradoresSistema'}, 
 | 
					                {label: 'Administradores del sistema', icon: 'pi pi-fw pi-id-card', to: '/administradoresSistema'}, 
 | 
				
			||||||
                {label: 'Administradores de comunidad', icon: 'pi pi-fw pi-id-card', to: '/administradoresComunidad'}, 
 | 
					                {label: 'Administradores de comunidad', icon: 'pi pi-fw pi-id-card', to: '/administradoresComunidad'}, 
 | 
				
			||||||
 | 
					                {label: 'Comunidadades', icon: 'pi pi-fw pi-id-card', to: '/comunidadesViviendas'}, 
 | 
				
			||||||
                {label: 'Log in', icon: 'pi pi-fw pi-id-card', to: '/logIn'}
 | 
					                {label: 'Log in', icon: 'pi pi-fw pi-id-card', to: '/logIn'}
 | 
				
			||||||
            ]
 | 
					            ]
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
| 
						 | 
					@ -320,6 +322,7 @@ const App = () => {
 | 
				
			||||||
                    <Route path="/documentation" component={Documentation} />
 | 
					                    <Route path="/documentation" component={Documentation} />
 | 
				
			||||||
                    <Route path="/administradoresSistema" component={AdministradoresSistema} />
 | 
					                    <Route path="/administradoresSistema" component={AdministradoresSistema} />
 | 
				
			||||||
                    <Route path="/administradoresComunidad" component={AdministradoresComunidad} />
 | 
					                    <Route path="/administradoresComunidad" component={AdministradoresComunidad} />
 | 
				
			||||||
 | 
					                    <Route path="/comunidadesViviendas" component={Communities} />
 | 
				
			||||||
                    <Route path="/logIn" component={LogIn} />
 | 
					                    <Route path="/logIn" component={LogIn} />
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,47 @@
 | 
				
			||||||
 | 
					import React, { useEffect, useState } from 'react';
 | 
				
			||||||
 | 
					import { InputText } from 'primereact/inputtext';
 | 
				
			||||||
 | 
					import { Button } from 'primereact/button';
 | 
				
			||||||
 | 
					import { DataTable } from 'primereact/datatable';
 | 
				
			||||||
 | 
					import { Column } from 'primereact/column';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const Communities = () => {
 | 
				
			||||||
 | 
					    const [communitiesList, setCommunitiesList] = useState([]);
 | 
				
			||||||
 | 
					    const [housesList, setHousesList] = useState([]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    async function getCommunites() {
 | 
				
			||||||
 | 
					        let response = await fetch('http://localhost:4000/community/allCommunities', { method: 'GET' });
 | 
				
			||||||
 | 
					        let list = await response.json();
 | 
				
			||||||
 | 
					        setCommunitiesList(list.message);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    useEffect(() => {
 | 
				
			||||||
 | 
					        getCommunites();
 | 
				
			||||||
 | 
					    }, [])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return (
 | 
				
			||||||
 | 
					        <div className="grid">
 | 
				
			||||||
 | 
					            <div className="col-12">
 | 
				
			||||||
 | 
					                <div className="card">
 | 
				
			||||||
 | 
					                    <h5>Comunidades de Viviendas</h5>
 | 
				
			||||||
 | 
					                    <DataTable value={communitiesList}  scrollable scrollHeight="400px" scrollDirection="both" className="mt-3">
 | 
				
			||||||
 | 
					                        <Column field="name" header="Nombre" style={{ flexGrow: 1, flexBasis: '160px' }}></Column>
 | 
				
			||||||
 | 
					                        <Column field="province" header="Provincia" style={{ flexGrow: 1, flexBasis: '160px' }}></Column>
 | 
				
			||||||
 | 
					                        <Column field="canton" header="Cantón" style={{ flexGrow: 1, flexBasis: '160px' }}></Column>
 | 
				
			||||||
 | 
					                        <Column field="district" header="Distrito" style={{ flexGrow: 1, flexBasis: '160px' }}></Column>
 | 
				
			||||||
 | 
					                        <Column field="phone" header="Telefóno" style={{ flexGrow: 1, flexBasis: '180px' }}></Column>
 | 
				
			||||||
 | 
					                        <Column field="num_houses" header="Número de viviendas" style={{ flexGrow: 1, flexBasis: '180px' }}></Column>
 | 
				
			||||||
 | 
					                        <Column field="quote" header="Cuota mensual" style={{ flexGrow: 1, flexBasis: '180px' }}></Column>
 | 
				
			||||||
 | 
					                        <Column field="name_admin" header="Administrador" style={{ flexGrow: 1, flexBasis: '180px' }}></Column>
 | 
				
			||||||
 | 
					                    </DataTable>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default React.memo(Communities);
 | 
				
			||||||
		Loading…
	
		Reference in New Issue