Skip to content

Commit

Permalink
Сопоставление названия группы по префиксу
Browse files Browse the repository at this point in the history
  • Loading branch information
disturm committed May 4, 2024
1 parent 8465241 commit a08572e
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 11 deletions.
38 changes: 28 additions & 10 deletions src/components/work/GoogleTableFetch/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,11 @@ import SpreadsheetManager, {
} from "../../../managers/SpreadsheetManager";
import NestedList, { NestedItem } from "../../shared/NestedList";
import { Collapse, Container } from "@material-ui/core";
import { compareNormalized, filterNull } from "../../../helpers/tools";
import {
compareNormalized,
filterNull,
normalizeString,
} from "../../../helpers/tools";
import { getSpreadsheetProperties } from "../../../apis/GoogleApi";
import BrsApi, { Discipline, TermType } from "../../../apis/BrsApi";
import "./styles.css";
Expand Down Expand Up @@ -100,17 +104,31 @@ class GoogleTableFetch extends React.Component<Props, State> {
availableDisciplines: Discipline[],
spreadsheetData: SpreadsheetData
): { allMissed: boolean; missedCount: number; disciplines: NestedItem[] } {
const actualGroups = new Set(
filterNull(spreadsheetData.actualStudents.map((s) => s.groupName))
const actualGroups = Array.from(
new Set(
filterNull(
spreadsheetData.actualStudents.map((s) => s.groupName)
).filter((it) => it.length > 0)
)
);
const availableGroups = Array.from(
new Set(availableDisciplines.map((s) => s.group))
);
const availableGroups = new Set(availableDisciplines.map((s) => s.group));

let missedCount = 0;
const nestedItems: NestedItem[] = Array.from(actualGroups).map((group) => {
const groupMissed = !availableGroups.has(group);
if (groupMissed) missedCount++;
return { title: group, colored: groupMissed };
});
const nestedItems: NestedItem[] = actualGroups.map((group) => {
const normalizedGroup = normalizeString(group);
const availableForActual = availableGroups.filter((it) =>
normalizeString(it).startsWith(normalizedGroup)
);

if (availableForActual.length === 0) {
missedCount++;
return [{ title: group, colored: true }];
} else {
return availableForActual.map((it) => ({ title: it, colored: false }));
}
}).flat();

const disciplineConfig = spreadsheetData.disciplineConfig;
const disciplineTime =
Expand All @@ -121,7 +139,7 @@ class GoogleTableFetch extends React.Component<Props, State> {
: `${disciplineConfig.year}/${disciplineConfig.year + 1}`;
const disciplineTitle = `${disciplineConfig.name}, ${disciplineTime}, ${disciplineConfig.course} курс`;
return {
allMissed: missedCount === actualGroups.size,
allMissed: missedCount === actualGroups.length,
missedCount,
disciplines: [
{
Expand Down
5 changes: 4 additions & 1 deletion src/managers/MarksManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import BrsApi, {
import {
compareNormalized,
groupBy,
normalizeString,
parseAnyFloat,
pluralize,
round10,
Expand Down Expand Up @@ -817,7 +818,9 @@ function isSuitableDiscipline(
discipline: Discipline
) {
if (actualStudent.groupName && actualStudent.groupName.length > 0) {
return compareNormalized(actualStudent.groupName, discipline.group);
const s = normalizeString(actualStudent.groupName)
const d = normalizeString(discipline.group)
return d.startsWith(s)
}

return true;
Expand Down

0 comments on commit a08572e

Please sign in to comment.