Skip to content

Commit

Permalink
🚑 hot fix
Browse files Browse the repository at this point in the history
  • Loading branch information
pedrogomes18 committed Aug 1, 2024
1 parent 1a1f90f commit af8d8b1
Showing 1 changed file with 113 additions and 127 deletions.
240 changes: 113 additions & 127 deletions src/screens/SalesInspector/TabScreens/Visit/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import * as S from './styles';
import { StatusBar } from 'expo-status-bar';
import { ActivityIndicator, ScrollView, Text } from 'react-native';
import AccordionVisit from '@components/AccordionVisit';
import React, { useEffect, useState } from 'react';
import React, { useEffect, useState, useCallback } from 'react';

import ISeller from '@interfaces/Seller';
import ICategories from '@interfaces/Visit/Categories';
Expand Down Expand Up @@ -31,108 +31,103 @@ const VisitComponent = ({ route }) => {

const { user } = useAuth();

useEffect(() => {
const fetchData = async () => {
try {
setLoading(true);
const fetchTemplates = useCallback(async () => {
let templates: any[] = [];
if (user.managerId) {
templates = await VisitService.getTemplateByManagerId(user.managerId);
}

if (cargo === 'Vendedor') {
const sellerData =
await SellerService.getAllSellerFromCompany(companyId);
if (user.job === 'Diretor') {
const directorTemplates = await VisitService.getTemplateByDirectorId(
user.id
);
if (directorTemplates) {
templates = [...templates, ...directorTemplates];
}
}

const foundSeller = sellerData.find(
(seller) => seller.id === idEmployee
if (user.companyId) {
const companyTemplates = await VisitService.getTemplateByCompanyId(
user.companyId
);
if (companyTemplates) {
templates = [...templates, ...companyTemplates];
}
}

return templates;
}, [user.managerId, user.job, user.id, user.companyId]);

const fetchData = useCallback(async () => {
try {
setLoading(true);

if (cargo === 'Vendedor') {
const sellerData =
await SellerService.getAllSellerFromCompany(companyId);
const foundSeller = sellerData.find(
(seller) => seller.id === idEmployee
);

if (foundSeller) {
setSeller(foundSeller);
const visitsData = await VisitService.getVisitByIdSeller(
foundSeller.id
);
setVisits(visitsData);

if (foundSeller) {
setSeller(foundSeller);

const visitsData = await VisitService.getVisitByIdSeller(
foundSeller.id
);
setVisits(visitsData);

// Busca todos os templates disponíveis
let templates = [];
if (user.managerId) {
templates = await VisitService.getTemplateByManagerId(
user.managerId
);
}

if (user.job === 'Diretor') {
const directorTemplates =
await VisitService.getTemplateByDirectorId(user.id);
if (directorTemplates) {
templates = [...templates, ...directorTemplates];
}
}
if (user.companyId) {
const companyTemplates =
await VisitService.getTemplateByCompanyId(user.companyId);
if (companyTemplates) {
templates = [...templates, ...companyTemplates];
}
}

const fetchedCategories: { [key: string]: ICategories[] } = {};
const fetchedQuestions: { [key: string]: IQuestions[] } = {};
const fetchedQuestionGrades: { [key: string]: IQuestionGrade[] } =
{};
const templates = await fetchTemplates();

for (const visit of visitsData) {
fetchedCategories[visit.id] = [];
fetchedQuestions[visit.id] = [];
fetchedQuestionGrades[visit.id] = [];
const fetchedCategories: { [key: string]: ICategories[] } = {};
const fetchedQuestions: { [key: string]: IQuestions[] } = {};
const fetchedQuestionGrades: { [key: string]: IQuestionGrade[] } = {};

for (const template of templates) {
const categories = await VisitService.getCategoriesByIdTemplate(
template.id
);
for (const visit of visitsData) {
fetchedCategories[visit.id] = [];
fetchedQuestions[visit.id] = [];
fetchedQuestionGrades[visit.id] = [];

for (const category of categories) {
if (category.visitTemplateId === visit.visitTemplateId) {
fetchedCategories[visit.id].push(category);

const questions =
await VisitService.getQuestionsByIdCategory(category.id);
for (const template of templates) {
const categories = await VisitService.getCategoriesByIdTemplate(
template.id
);

const questionGrades =
await VisitGradesService.getAllQuestionsBySeller(
foundSeller.id
);
for (const category of categories) {
if (category.visitTemplateId === visit.visitTemplateId) {
fetchedCategories[visit.id].push(category);

fetchedQuestions[visit.id].push(...questions);
fetchedQuestionGrades[visit.id].push(
...questionGrades.filter((qg) => qg.visitId === visit.id)
const questions = await VisitService.getQuestionsByIdCategory(
category.id
);
const questionGrades =
await VisitGradesService.getAllQuestionsBySeller(
foundSeller.id
);
}

fetchedQuestions[visit.id].push(...questions);
fetchedQuestionGrades[visit.id].push(
...questionGrades.filter((qg) => qg.visitId === visit.id)
);
}
}
}

setCategories(fetchedCategories);
setQuestions(fetchedQuestions);
setQuestionGrades(fetchedQuestionGrades);
}

setCategories(fetchedCategories);
setQuestions(fetchedQuestions);
setQuestionGrades(fetchedQuestionGrades);
}
} catch (error) {
console.error('Erro ao buscar dados de supervisores:', error);
} finally {
setLoading(false);
}
};
} catch (error) {
console.error('Erro ao buscar dados de supervisores:', error);
} finally {
setLoading(false);
}
}, [cargo, idEmployee, companyId, fetchTemplates]);

useEffect(() => {
fetchData();
}, [
cargo,
idEmployee,
companyId,
user.managerId,
user.companyId,
user.job,
user.id,
]);
}, [fetchData]);

if (loading) {
return (
Expand All @@ -142,46 +137,40 @@ const VisitComponent = ({ route }) => {
);
}

const calculateMedia = (visitId: string, categoryId: string) => {
const relevantQuestions =
questions[visitId]?.filter(
(question) => question.categoriesId === categoryId
) || [];
const relevantGrades =
questionGrades[visitId]?.filter((grade) =>
relevantQuestions.some(
(question) => question.id === grade.questionsId && grade.grade !== 0
)
) || [];
const calculateMedia = (
visitId: string,
questions: { [key: string]: IQuestions[] },
questionGrades: { [key: string]: IQuestionGrade[] }
) => {
const relevantQuestions = questions[visitId] || [];
const relevantGrades = questionGrades[visitId] || [];

const totalGrades = relevantGrades.reduce(
(total, grade) => total + grade.grade,
0
);
return relevantGrades.length > 0 ? totalGrades / relevantGrades.length : 0;
};

const generateQuestionsWithGrades = (visitId: string, categoryId: string) => {
const generateQuestionsWithGrades = (
visitId: string,
categoryId: string,
questions: { [key: string]: IQuestions[] },
questionGrades: { [key: string]: IQuestionGrade[] }
) => {
const relevantQuestions =
questions[visitId]?.filter(
(question) => question.categoriesId === categoryId
) || [];
const questionsWithGrades: { question: string; grade: string }[] = [];

relevantQuestions.forEach((question) => {
return relevantQuestions.map((question) => {
const grade = questionGrades[visitId]?.find(
(grade) => grade.questionsId === question.id && grade.grade !== 0
);
if (grade) {
questionsWithGrades.push({
question: question.question,
grade: grade.grade.toString(),
});
} else {
questionsWithGrades.push({ question: question.question, grade: 'X,X' });
}
return {
question: question.question,
grade: grade ? grade.grade.toString() : 'X,X',
};
});

return questionsWithGrades;
};

return (
Expand All @@ -191,26 +180,23 @@ const VisitComponent = ({ route }) => {
<S.WrapperView>
{visits.length > 0 ? (
visits.map((visit) => (
<S.ViewWrapper key={visit.id}>
<S.VisitTitle>
{visit.storeVisited} - {visit.dateVisited}
</S.VisitTitle>
{categories[visit.id]?.map((category) => (
<AccordionVisit
key={category.id}
title={category.name}
media={calculateMedia(visit.id, category.id)}
questions={generateQuestionsWithGrades(
visit.id,
category.id
)}
/>
))}
</S.ViewWrapper>
<AccordionVisit
key={visit.id}
title={`${visit.storeVisited} - ${visit.dateVisited}`}
media={calculateMedia(visit.id, questions, questionGrades)}
questions={categories[visit.id]?.flatMap((category) =>
generateQuestionsWithGrades(
visit.id,
category.id,
questions,
questionGrades
)
)}
/>
))
) : (
<S.NoVisitsContainer>
<Text>{`${cargo} não tem visitas cadastradas.`}</Text>
<Text>Nenhuma visita registrada para o dia selecionado.</Text>
</S.NoVisitsContainer>
)}
</S.WrapperView>
Expand Down

0 comments on commit af8d8b1

Please sign in to comment.