mirror of
https://github.com/acanas/swad-core.git
synced 2024-06-08 01:35:32 +02:00
Version 23.6.1: Sep 18, 2023 Code refactoring in hierarchy.
This commit is contained in:
parent
5ee487e595
commit
9f5d3e4688
|
@ -217,7 +217,7 @@ void Cal_DrawCurrentMonth (void)
|
||||||
HTM_TxtF ("\tDrawCurrentMonth ('CurrentMonth',%u,%ld,%ld,'%s','%s/%s',",
|
HTM_TxtF ("\tDrawCurrentMonth ('CurrentMonth',%u,%ld,%ld,'%s','%s/%s',",
|
||||||
Gbl.Prefs.FirstDayOfWeek,
|
Gbl.Prefs.FirstDayOfWeek,
|
||||||
(long) Dat_GetStartExecutionTimeUTC (),
|
(long) Dat_GetStartExecutionTimeUTC (),
|
||||||
Gbl.Hierarchy.Ctr.PlcCod,
|
Gbl.Hierarchy.Ctr.Specific.PlcCod,
|
||||||
The_GetSuffix (),
|
The_GetSuffix (),
|
||||||
Cfg_URL_SWAD_CGI,Lan_STR_LANG_ID[Gbl.Prefs.Language]);
|
Cfg_URL_SWAD_CGI,Lan_STR_LANG_ID[Gbl.Prefs.Language]);
|
||||||
Frm_SetParsForm (ParsStr,ActSeeCal,true);
|
Frm_SetParsForm (ParsStr,ActSeeCal,true);
|
||||||
|
@ -286,7 +286,7 @@ static void Cal_DrawCalendar (Act_Action_t ActionSeeCalendar,
|
||||||
HTM_TxtF ("\tCal_DrawCalendar('calendar',%u,%ld,%ld,%s,'%s','%s/%s',",
|
HTM_TxtF ("\tCal_DrawCalendar('calendar',%u,%ld,%ld,%s,'%s','%s/%s',",
|
||||||
Gbl.Prefs.FirstDayOfWeek,
|
Gbl.Prefs.FirstDayOfWeek,
|
||||||
(long) Dat_GetStartExecutionTimeUTC (),
|
(long) Dat_GetStartExecutionTimeUTC (),
|
||||||
Gbl.Hierarchy.Ctr.PlcCod,
|
Gbl.Hierarchy.Ctr.Specific.PlcCod,
|
||||||
PrintView ? "true" :
|
PrintView ? "true" :
|
||||||
"false",
|
"false",
|
||||||
The_GetSuffix (),
|
The_GetSuffix (),
|
||||||
|
|
|
@ -183,7 +183,7 @@ static long Cfe_GetParsCallsForExams (struct Cfe_CallsForExams *CallsForExams)
|
||||||
Par_GetParUnsignedLong ("Year",
|
Par_GetParUnsignedLong ("Year",
|
||||||
0, // N.A.
|
0, // N.A.
|
||||||
Deg_MAX_YEARS_PER_DEGREE,
|
Deg_MAX_YEARS_PER_DEGREE,
|
||||||
(unsigned long) Gbl.Hierarchy.Crs.Year);
|
(unsigned long) Gbl.Hierarchy.Crs.Specific.Year);
|
||||||
|
|
||||||
/***** Get the type of call for exam *****/
|
/***** Get the type of call for exam *****/
|
||||||
Par_GetParText ("ExamSession",CallsForExams->CallForExam.Session,Cfe_MAX_BYTES_SESSION);
|
Par_GetParText ("ExamSession",CallsForExams->CallForExam.Session,Cfe_MAX_BYTES_SESSION);
|
||||||
|
|
|
@ -357,7 +357,7 @@ static void Ctr_ListOneCenterForSeeing (struct Ctr_Center *Ctr,unsigned NumCtr)
|
||||||
/***** Place *****/
|
/***** Place *****/
|
||||||
HTM_TD_Begin ("class=\"LM %s_%s %s\"",
|
HTM_TD_Begin ("class=\"LM %s_%s %s\"",
|
||||||
TxtClassNormal,The_GetSuffix (),BgColor);
|
TxtClassNormal,The_GetSuffix (),BgColor);
|
||||||
Plc.PlcCod = Ctr->PlcCod;
|
Plc.PlcCod = Ctr->Specific.PlcCod;
|
||||||
Plc_GetPlaceDataByCod (&Plc);
|
Plc_GetPlaceDataByCod (&Plc);
|
||||||
HTM_Txt (Plc.ShrtName);
|
HTM_Txt (Plc.ShrtName);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
@ -554,7 +554,7 @@ bool Ctr_GetCenterDataByCod (struct Ctr_Center *Ctr)
|
||||||
|
|
||||||
/***** Clear data *****/
|
/***** Clear data *****/
|
||||||
Ctr->PrtCod = -1L;
|
Ctr->PrtCod = -1L;
|
||||||
Ctr->PlcCod = -1L;
|
Ctr->Specific.PlcCod = -1L;
|
||||||
Ctr->Status = (Hie_Status_t) 0;
|
Ctr->Status = (Hie_Status_t) 0;
|
||||||
Ctr->RequesterUsrCod = -1L;
|
Ctr->RequesterUsrCod = -1L;
|
||||||
Ctr->ShrtName[0] = '\0';
|
Ctr->ShrtName[0] = '\0';
|
||||||
|
@ -622,7 +622,7 @@ static void Ctr_GetCenterDataFromRow (MYSQL_RES *mysql_res,
|
||||||
Ctr->PrtCod = Str_ConvertStrCodToLongCod (row[1]);
|
Ctr->PrtCod = Str_ConvertStrCodToLongCod (row[1]);
|
||||||
|
|
||||||
/***** Get place code (row[2]) *****/
|
/***** Get place code (row[2]) *****/
|
||||||
Ctr->PlcCod = Str_ConvertStrCodToLongCod (row[2]);
|
Ctr->Specific.PlcCod = Str_ConvertStrCodToLongCod (row[2]);
|
||||||
|
|
||||||
/***** Get center status (row[3]) *****/
|
/***** Get center status (row[3]) *****/
|
||||||
if (sscanf (row[3],"%u",&(Ctr->Status)) != 1)
|
if (sscanf (row[3],"%u",&(Ctr->Status)) != 1)
|
||||||
|
@ -822,7 +822,7 @@ static void Ctr_ListCentersForEdition (const struct Plc_Places *Places)
|
||||||
" class=\"PLC_SEL INPUT_%s\"",
|
" class=\"PLC_SEL INPUT_%s\"",
|
||||||
The_GetSuffix ());
|
The_GetSuffix ());
|
||||||
HTM_OPTION (HTM_Type_STRING,"0",
|
HTM_OPTION (HTM_Type_STRING,"0",
|
||||||
Ctr->PlcCod == 0 ? HTM_OPTION_SELECTED :
|
Ctr->Specific.PlcCod == 0 ? HTM_OPTION_SELECTED :
|
||||||
HTM_OPTION_UNSELECTED,
|
HTM_OPTION_UNSELECTED,
|
||||||
HTM_OPTION_ENABLED,
|
HTM_OPTION_ENABLED,
|
||||||
"%s",Txt_Another_place);
|
"%s",Txt_Another_place);
|
||||||
|
@ -832,7 +832,7 @@ static void Ctr_ListCentersForEdition (const struct Plc_Places *Places)
|
||||||
{
|
{
|
||||||
PlcInLst = &Places->Lst[NumPlc];
|
PlcInLst = &Places->Lst[NumPlc];
|
||||||
HTM_OPTION (HTM_Type_LONG,&PlcInLst->PlcCod,
|
HTM_OPTION (HTM_Type_LONG,&PlcInLst->PlcCod,
|
||||||
PlcInLst->PlcCod == Ctr->PlcCod ? HTM_OPTION_SELECTED :
|
PlcInLst->PlcCod == Ctr->Specific.PlcCod ? HTM_OPTION_SELECTED :
|
||||||
HTM_OPTION_UNSELECTED,
|
HTM_OPTION_UNSELECTED,
|
||||||
HTM_OPTION_ENABLED,
|
HTM_OPTION_ENABLED,
|
||||||
"%s",PlcInLst->ShrtName);
|
"%s",PlcInLst->ShrtName);
|
||||||
|
@ -844,7 +844,7 @@ static void Ctr_ListCentersForEdition (const struct Plc_Places *Places)
|
||||||
for (NumPlc = 0;
|
for (NumPlc = 0;
|
||||||
NumPlc < Places->Num;
|
NumPlc < Places->Num;
|
||||||
NumPlc++)
|
NumPlc++)
|
||||||
if (Places->Lst[NumPlc].PlcCod == Ctr->PlcCod)
|
if (Places->Lst[NumPlc].PlcCod == Ctr->Specific.PlcCod)
|
||||||
HTM_Txt (Places->Lst[NumPlc].ShrtName);
|
HTM_Txt (Places->Lst[NumPlc].ShrtName);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
|
@ -1054,7 +1054,7 @@ void Ctr_ChangeCtrPlc (void)
|
||||||
|
|
||||||
/***** Update place in table of centers *****/
|
/***** Update place in table of centers *****/
|
||||||
Ctr_DB_UpdateCtrPlc (Ctr_EditingCtr->Cod,NewPlcCod);
|
Ctr_DB_UpdateCtrPlc (Ctr_EditingCtr->Cod,NewPlcCod);
|
||||||
Ctr_EditingCtr->PlcCod = NewPlcCod;
|
Ctr_EditingCtr->Specific.PlcCod = NewPlcCod;
|
||||||
|
|
||||||
/***** Create alert to show the change made
|
/***** Create alert to show the change made
|
||||||
and put button to go to center changed *****/
|
and put button to go to center changed *****/
|
||||||
|
@ -1314,7 +1314,7 @@ static void Ctr_PutFormToCreateCenter (const struct Plc_Places *Places)
|
||||||
"name=\"PlcCod\" class=\"PLC_SEL INPUT_%s\"",
|
"name=\"PlcCod\" class=\"PLC_SEL INPUT_%s\"",
|
||||||
The_GetSuffix ());
|
The_GetSuffix ());
|
||||||
HTM_OPTION (HTM_Type_STRING,"0",
|
HTM_OPTION (HTM_Type_STRING,"0",
|
||||||
Ctr_EditingCtr->PlcCod == 0 ? HTM_OPTION_SELECTED :
|
Ctr_EditingCtr->Specific.PlcCod == 0 ? HTM_OPTION_SELECTED :
|
||||||
HTM_OPTION_UNSELECTED,
|
HTM_OPTION_UNSELECTED,
|
||||||
HTM_OPTION_ENABLED,
|
HTM_OPTION_ENABLED,
|
||||||
"%s",Txt_Another_place);
|
"%s",Txt_Another_place);
|
||||||
|
@ -1324,7 +1324,7 @@ static void Ctr_PutFormToCreateCenter (const struct Plc_Places *Places)
|
||||||
{
|
{
|
||||||
PlcInLst = &Places->Lst[NumPlc];
|
PlcInLst = &Places->Lst[NumPlc];
|
||||||
HTM_OPTION (HTM_Type_LONG,&PlcInLst->PlcCod,
|
HTM_OPTION (HTM_Type_LONG,&PlcInLst->PlcCod,
|
||||||
PlcInLst->PlcCod == Ctr_EditingCtr->PlcCod ? HTM_OPTION_SELECTED :
|
PlcInLst->PlcCod == Ctr_EditingCtr->Specific.PlcCod ? HTM_OPTION_SELECTED :
|
||||||
HTM_OPTION_UNSELECTED,
|
HTM_OPTION_UNSELECTED,
|
||||||
HTM_OPTION_ENABLED,
|
HTM_OPTION_ENABLED,
|
||||||
"%s",PlcInLst->ShrtName);
|
"%s",PlcInLst->ShrtName);
|
||||||
|
@ -1528,7 +1528,7 @@ static void Ctr_ReceiveFormRequestOrCreateCtr (Hie_Status_t Status)
|
||||||
Ctr_EditingCtr->PrtCod = Gbl.Hierarchy.Ins.Cod;
|
Ctr_EditingCtr->PrtCod = Gbl.Hierarchy.Ins.Cod;
|
||||||
|
|
||||||
/* Get place */
|
/* Get place */
|
||||||
Ctr_EditingCtr->PlcCod = ParCod_GetAndCheckParMin (ParCod_Plc,0); // 0 (another place) is allowed here
|
Ctr_EditingCtr->Specific.PlcCod = ParCod_GetAndCheckParMin (ParCod_Plc,0); // 0 (another place) is allowed here
|
||||||
|
|
||||||
/* Get center short name and full name */
|
/* Get center short name and full name */
|
||||||
Par_GetParText ("ShortName",Ctr_EditingCtr->ShrtName,Cns_HIERARCHY_MAX_BYTES_SHRT_NAME);
|
Par_GetParText ("ShortName",Ctr_EditingCtr->ShrtName,Cns_HIERARCHY_MAX_BYTES_SHRT_NAME);
|
||||||
|
@ -1874,7 +1874,7 @@ static void Ctr_EditingCenterConstructor (void)
|
||||||
/***** Reset center *****/
|
/***** Reset center *****/
|
||||||
Ctr_EditingCtr->Cod = -1L;
|
Ctr_EditingCtr->Cod = -1L;
|
||||||
Ctr_EditingCtr->PrtCod = -1L;
|
Ctr_EditingCtr->PrtCod = -1L;
|
||||||
Ctr_EditingCtr->PlcCod = -1L;
|
Ctr_EditingCtr->Specific.PlcCod = -1L;
|
||||||
Ctr_EditingCtr->Status = (Hie_Status_t) 0;
|
Ctr_EditingCtr->Status = (Hie_Status_t) 0;
|
||||||
Ctr_EditingCtr->RequesterUsrCod = -1L;
|
Ctr_EditingCtr->RequesterUsrCod = -1L;
|
||||||
Ctr_EditingCtr->ShrtName[0] = '\0';
|
Ctr_EditingCtr->ShrtName[0] = '\0';
|
||||||
|
|
|
@ -45,7 +45,12 @@ struct Ctr_Center
|
||||||
{
|
{
|
||||||
long Cod; // Center code
|
long Cod; // Center code
|
||||||
long PrtCod; // Parent (institution) code
|
long PrtCod; // Parent (institution) code
|
||||||
long PlcCod; // Place code
|
union
|
||||||
|
{
|
||||||
|
long PlcCod; // Center place code
|
||||||
|
long TypCod; // Degree type code
|
||||||
|
unsigned Year; // Course year: 0 (optatives), 1, 2, 3...
|
||||||
|
} Specific;
|
||||||
Hie_Status_t Status; // Center status
|
Hie_Status_t Status; // Center status
|
||||||
long RequesterUsrCod; // User code of the person who requested the creation of this center
|
long RequesterUsrCod; // User code of the person who requested the creation of this center
|
||||||
char ShrtName[Cns_HIERARCHY_MAX_BYTES_SHRT_NAME + 1];
|
char ShrtName[Cns_HIERARCHY_MAX_BYTES_SHRT_NAME + 1];
|
||||||
|
|
|
@ -679,7 +679,7 @@ static void CtrCfg_Place (bool PutForm)
|
||||||
" class=\"INPUT_SHORT_NAME INPUT_%s\"",
|
" class=\"INPUT_SHORT_NAME INPUT_%s\"",
|
||||||
The_GetSuffix ());
|
The_GetSuffix ());
|
||||||
HTM_OPTION (HTM_Type_STRING,"0",
|
HTM_OPTION (HTM_Type_STRING,"0",
|
||||||
Gbl.Hierarchy.Ctr.PlcCod == 0 ? HTM_OPTION_SELECTED :
|
Gbl.Hierarchy.Ctr.Specific.PlcCod == 0 ? HTM_OPTION_SELECTED :
|
||||||
HTM_OPTION_UNSELECTED,
|
HTM_OPTION_UNSELECTED,
|
||||||
HTM_OPTION_ENABLED,
|
HTM_OPTION_ENABLED,
|
||||||
"%s",Txt_Another_place);
|
"%s",Txt_Another_place);
|
||||||
|
@ -689,7 +689,7 @@ static void CtrCfg_Place (bool PutForm)
|
||||||
{
|
{
|
||||||
PlcInLst = &Places.Lst[NumPlc];
|
PlcInLst = &Places.Lst[NumPlc];
|
||||||
HTM_OPTION (HTM_Type_LONG,&PlcInLst->PlcCod,
|
HTM_OPTION (HTM_Type_LONG,&PlcInLst->PlcCod,
|
||||||
PlcInLst->PlcCod == Gbl.Hierarchy.Ctr.PlcCod ? HTM_OPTION_SELECTED :
|
PlcInLst->PlcCod == Gbl.Hierarchy.Ctr.Specific.PlcCod ? HTM_OPTION_SELECTED :
|
||||||
HTM_OPTION_UNSELECTED,
|
HTM_OPTION_UNSELECTED,
|
||||||
HTM_OPTION_ENABLED,
|
HTM_OPTION_ENABLED,
|
||||||
"%s",PlcInLst->ShrtName);
|
"%s",PlcInLst->ShrtName);
|
||||||
|
@ -703,7 +703,7 @@ static void CtrCfg_Place (bool PutForm)
|
||||||
else // I can not change center place
|
else // I can not change center place
|
||||||
{
|
{
|
||||||
/* Text with the place name */
|
/* Text with the place name */
|
||||||
Plc.PlcCod = Gbl.Hierarchy.Ctr.PlcCod;
|
Plc.PlcCod = Gbl.Hierarchy.Ctr.Specific.PlcCod;
|
||||||
Plc_GetPlaceDataByCod (&Plc);
|
Plc_GetPlaceDataByCod (&Plc);
|
||||||
HTM_Txt (Plc.FullName);
|
HTM_Txt (Plc.FullName);
|
||||||
}
|
}
|
||||||
|
@ -1089,7 +1089,7 @@ void CtrCfg_ChangeCtrPlc (void)
|
||||||
|
|
||||||
/***** Update place in table of centers *****/
|
/***** Update place in table of centers *****/
|
||||||
Ctr_DB_UpdateCtrPlc (Gbl.Hierarchy.Ctr.Cod,NewPlcCod);
|
Ctr_DB_UpdateCtrPlc (Gbl.Hierarchy.Ctr.Cod,NewPlcCod);
|
||||||
Gbl.Hierarchy.Ctr.PlcCod = NewPlcCod;
|
Gbl.Hierarchy.Ctr.Specific.PlcCod = NewPlcCod;
|
||||||
|
|
||||||
/***** Write message to show the change made *****/
|
/***** Write message to show the change made *****/
|
||||||
Ale_ShowAlert (Ale_SUCCESS,Txt_The_place_of_the_center_has_changed);
|
Ale_ShowAlert (Ale_SUCCESS,Txt_The_place_of_the_center_has_changed);
|
||||||
|
|
|
@ -60,7 +60,7 @@ long Ctr_DB_CreateCenter (const struct Ctr_Center *Ctr,Hie_Status_t Status)
|
||||||
" (%ld,%ld,%u,%ld,"
|
" (%ld,%ld,%u,%ld,"
|
||||||
"'%s','%s','%s','')",
|
"'%s','%s','%s','')",
|
||||||
Ctr->PrtCod,
|
Ctr->PrtCod,
|
||||||
Ctr->PlcCod,
|
Ctr->Specific.PlcCod,
|
||||||
(unsigned) Status,
|
(unsigned) Status,
|
||||||
Gbl.Usrs.Me.UsrDat.UsrCod,
|
Gbl.Usrs.Me.UsrDat.UsrCod,
|
||||||
Ctr->ShrtName,
|
Ctr->ShrtName,
|
||||||
|
|
|
@ -632,10 +632,11 @@ TODO: Francisco Javier Fern
|
||||||
Me sale este error, no sé si por no recordar yo la sintaxis apropiada para mandar a varios destinatarios. ¿No era así?
|
Me sale este error, no sé si por no recordar yo la sintaxis apropiada para mandar a varios destinatarios. ¿No era así?
|
||||||
"can npt create received message (duplicated entry '243218-2160773' for key 'UsrCod_MsgCod')
|
"can npt create received message (duplicated entry '243218-2160773' for key 'UsrCod_MsgCod')
|
||||||
*/
|
*/
|
||||||
#define Log_PLATFORM_VERSION "SWAD 23.6 (2023-09-18)"
|
#define Log_PLATFORM_VERSION "SWAD 23.6.1 (2023-09-18)"
|
||||||
#define CSS_FILE "swad22.120.4.css"
|
#define CSS_FILE "swad22.120.4.css"
|
||||||
#define JS_FILE "swad22.49.js"
|
#define JS_FILE "swad22.49.js"
|
||||||
/*
|
/*
|
||||||
|
Version 23.6.1: Sep 18, 2023 Code refactoring in hierarchy. (337727 lines)
|
||||||
Version 23.6: Sep 18, 2023 Code refactoring in centers and coordinates. (337699 lines)
|
Version 23.6: Sep 18, 2023 Code refactoring in centers and coordinates. (337699 lines)
|
||||||
Version 23.5.1: Sep 18, 2023 Code refactoring in edition of countries. (337657 lines)
|
Version 23.5.1: Sep 18, 2023 Code refactoring in edition of countries. (337657 lines)
|
||||||
Version 23.5: Sep 15, 2023 Code refactoring in edition of countries. (337658 lines)
|
Version 23.5: Sep 15, 2023 Code refactoring in edition of countries. (337658 lines)
|
||||||
|
|
|
@ -48,6 +48,12 @@
|
||||||
struct Cty_Countr
|
struct Cty_Countr
|
||||||
{
|
{
|
||||||
long Cod; // Country code
|
long Cod; // Country code
|
||||||
|
union
|
||||||
|
{
|
||||||
|
long PlcCod; // Center place code
|
||||||
|
long TypCod; // Degree type code
|
||||||
|
unsigned Year; // Course year: 0 (optatives), 1, 2, 3...
|
||||||
|
} Specific;
|
||||||
char ShrtName[Cns_HIERARCHY_MAX_BYTES_SHRT_NAME + 1]; // Alpha2
|
char ShrtName[Cns_HIERARCHY_MAX_BYTES_SHRT_NAME + 1]; // Alpha2
|
||||||
char FullName[Cns_HIERARCHY_MAX_BYTES_FULL_NAME + 1];
|
char FullName[Cns_HIERARCHY_MAX_BYTES_FULL_NAME + 1];
|
||||||
char WWW[Cns_MAX_BYTES_WWW + 1];
|
char WWW[Cns_MAX_BYTES_WWW + 1];
|
||||||
|
|
|
@ -926,7 +926,7 @@ static bool Crs_ListCoursesOfAYearForSeeing (unsigned Year)
|
||||||
NumCrs++)
|
NumCrs++)
|
||||||
{
|
{
|
||||||
Crs = &(Gbl.Hierarchy.Crss.Lst[NumCrs]);
|
Crs = &(Gbl.Hierarchy.Crss.Lst[NumCrs]);
|
||||||
if (Crs->Year == Year) // The year of the course is this?
|
if (Crs->Specific.Year == Year) // The year of the course is this?
|
||||||
{
|
{
|
||||||
ThisYearHasCourses = true;
|
ThisYearHasCourses = true;
|
||||||
if (Crs->Status & Hie_STATUS_BIT_PENDING)
|
if (Crs->Status & Hie_STATUS_BIT_PENDING)
|
||||||
|
@ -966,7 +966,7 @@ static bool Crs_ListCoursesOfAYearForSeeing (unsigned Year)
|
||||||
/* Course year */
|
/* Course year */
|
||||||
HTM_TD_Begin ("class=\"CM %s_%s %s\"",
|
HTM_TD_Begin ("class=\"CM %s_%s %s\"",
|
||||||
TxtClassNormal,The_GetSuffix (),BgColor);
|
TxtClassNormal,The_GetSuffix (),BgColor);
|
||||||
HTM_Txt (Txt_YEAR_OF_DEGREE[Crs->Year]);
|
HTM_Txt (Txt_YEAR_OF_DEGREE[Crs->Specific.Year]);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
/* Institutional code of the course */
|
/* Institutional code of the course */
|
||||||
|
@ -1129,7 +1129,7 @@ static void Crs_ListCoursesOfAYearForEdition (unsigned Year)
|
||||||
NumCrs++)
|
NumCrs++)
|
||||||
{
|
{
|
||||||
Crs = &(Gbl.Hierarchy.Crss.Lst[NumCrs]);
|
Crs = &(Gbl.Hierarchy.Crss.Lst[NumCrs]);
|
||||||
if (Crs->Year == Year)
|
if (Crs->Specific.Year == Year)
|
||||||
{
|
{
|
||||||
ICanEdit = Crs_CheckIfICanEdit (Crs);
|
ICanEdit = Crs_CheckIfICanEdit (Crs);
|
||||||
|
|
||||||
|
@ -1174,7 +1174,7 @@ static void Crs_ListCoursesOfAYearForEdition (unsigned Year)
|
||||||
// because it's possible to move this course
|
// because it's possible to move this course
|
||||||
// to another degree (with other active years)
|
// to another degree (with other active years)
|
||||||
HTM_OPTION (HTM_Type_UNSIGNED,&YearAux,
|
HTM_OPTION (HTM_Type_UNSIGNED,&YearAux,
|
||||||
YearAux == Crs->Year ? HTM_OPTION_SELECTED :
|
YearAux == Crs->Specific.Year ? HTM_OPTION_SELECTED :
|
||||||
HTM_OPTION_UNSELECTED,
|
HTM_OPTION_UNSELECTED,
|
||||||
HTM_OPTION_ENABLED,
|
HTM_OPTION_ENABLED,
|
||||||
"%s",Txt_YEAR_OF_DEGREE[YearAux]);
|
"%s",Txt_YEAR_OF_DEGREE[YearAux]);
|
||||||
|
@ -1182,7 +1182,7 @@ static void Crs_ListCoursesOfAYearForEdition (unsigned Year)
|
||||||
Frm_EndForm ();
|
Frm_EndForm ();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
HTM_Txt (Txt_YEAR_OF_DEGREE[Crs->Year]);
|
HTM_Txt (Txt_YEAR_OF_DEGREE[Crs->Specific.Year]);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
/* Institutional code of the course */
|
/* Institutional code of the course */
|
||||||
|
@ -1324,7 +1324,7 @@ static void Crs_PutFormToCreateCourse (void)
|
||||||
Year <= Deg_MAX_YEARS_PER_DEGREE;
|
Year <= Deg_MAX_YEARS_PER_DEGREE;
|
||||||
Year++)
|
Year++)
|
||||||
HTM_OPTION (HTM_Type_UNSIGNED,&Year,
|
HTM_OPTION (HTM_Type_UNSIGNED,&Year,
|
||||||
Year == Crs_EditingCrs->Year ? HTM_OPTION_SELECTED :
|
Year == Crs_EditingCrs->Specific.Year ? HTM_OPTION_SELECTED :
|
||||||
HTM_OPTION_UNSELECTED,
|
HTM_OPTION_UNSELECTED,
|
||||||
HTM_OPTION_ENABLED,
|
HTM_OPTION_ENABLED,
|
||||||
"%s",Txt_YEAR_OF_DEGREE[Year]);
|
"%s",Txt_YEAR_OF_DEGREE[Year]);
|
||||||
|
@ -1486,19 +1486,19 @@ static void Crs_ReceiveFormRequestOrCreateCrs (Hie_Status_t Status)
|
||||||
Crs_GetParsNewCourse (Crs_EditingCrs);
|
Crs_GetParsNewCourse (Crs_EditingCrs);
|
||||||
|
|
||||||
/***** Check if year is correct *****/
|
/***** Check if year is correct *****/
|
||||||
if (Crs_EditingCrs->Year <= Deg_MAX_YEARS_PER_DEGREE) // If year is valid
|
if (Crs_EditingCrs->Specific.Year <= Deg_MAX_YEARS_PER_DEGREE) // If year is valid
|
||||||
{
|
{
|
||||||
if (Crs_EditingCrs->ShrtName[0] &&
|
if (Crs_EditingCrs->ShrtName[0] &&
|
||||||
Crs_EditingCrs->FullName[0]) // If there's a course name
|
Crs_EditingCrs->FullName[0]) // If there's a course name
|
||||||
{
|
{
|
||||||
/***** If name of course was in database... *****/
|
/***** If name of course was in database... *****/
|
||||||
if (Crs_DB_CheckIfCrsNameExistsInYearOfDeg ("ShortName",Crs_EditingCrs->ShrtName,
|
if (Crs_DB_CheckIfCrsNameExistsInYearOfDeg ("ShortName",Crs_EditingCrs->ShrtName,
|
||||||
-1L,Crs_EditingCrs->PrtCod,Crs_EditingCrs->Year))
|
-1L,Crs_EditingCrs->PrtCod,Crs_EditingCrs->Specific.Year))
|
||||||
Ale_CreateAlert (Ale_WARNING,NULL,
|
Ale_CreateAlert (Ale_WARNING,NULL,
|
||||||
Txt_The_course_X_already_exists,
|
Txt_The_course_X_already_exists,
|
||||||
Crs_EditingCrs->ShrtName);
|
Crs_EditingCrs->ShrtName);
|
||||||
else if (Crs_DB_CheckIfCrsNameExistsInYearOfDeg ("FullName",Crs_EditingCrs->FullName,
|
else if (Crs_DB_CheckIfCrsNameExistsInYearOfDeg ("FullName",Crs_EditingCrs->FullName,
|
||||||
-1L,Crs_EditingCrs->PrtCod,Crs_EditingCrs->Year))
|
-1L,Crs_EditingCrs->PrtCod,Crs_EditingCrs->Specific.Year))
|
||||||
Ale_CreateAlert (Ale_WARNING,NULL,
|
Ale_CreateAlert (Ale_WARNING,NULL,
|
||||||
Txt_The_course_X_already_exists,
|
Txt_The_course_X_already_exists,
|
||||||
Crs_EditingCrs->FullName);
|
Crs_EditingCrs->FullName);
|
||||||
|
@ -1516,7 +1516,7 @@ static void Crs_ReceiveFormRequestOrCreateCrs (Hie_Status_t Status)
|
||||||
else // Year not valid
|
else // Year not valid
|
||||||
Ale_CreateAlert (Ale_WARNING,NULL,
|
Ale_CreateAlert (Ale_WARNING,NULL,
|
||||||
Txt_The_year_X_is_not_allowed,
|
Txt_The_year_X_is_not_allowed,
|
||||||
Crs_EditingCrs->Year);
|
Crs_EditingCrs->Specific.Year);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -1530,7 +1530,7 @@ static void Crs_GetParsNewCourse (struct Crs_Course *Crs)
|
||||||
/***** Get parameters of the course from form *****/
|
/***** Get parameters of the course from form *****/
|
||||||
/* Get year */
|
/* Get year */
|
||||||
Par_GetParText ("OthCrsYear",YearStr,2);
|
Par_GetParText ("OthCrsYear",YearStr,2);
|
||||||
Crs->Year = Deg_ConvStrToYear (YearStr);
|
Crs->Specific.Year = Deg_ConvStrToYear (YearStr);
|
||||||
|
|
||||||
/* Get institutional code */
|
/* Get institutional code */
|
||||||
Par_GetParText ("InsCrsCod",Crs->InstitutionalCod,Crs_MAX_BYTES_INSTITUTIONAL_COD);
|
Par_GetParText ("InsCrsCod",Crs->InstitutionalCod,Crs_MAX_BYTES_INSTITUTIONAL_COD);
|
||||||
|
@ -1593,7 +1593,7 @@ bool Crs_GetCourseDataByCod (struct Crs_Course *Crs)
|
||||||
|
|
||||||
/***** Clear data *****/
|
/***** Clear data *****/
|
||||||
Crs->PrtCod = -1L;
|
Crs->PrtCod = -1L;
|
||||||
Crs->Year = 0;
|
Crs->Specific.Year = 0;
|
||||||
Crs->Status = (Hie_Status_t) 0;
|
Crs->Status = (Hie_Status_t) 0;
|
||||||
Crs->RequesterUsrCod = -1L;
|
Crs->RequesterUsrCod = -1L;
|
||||||
Crs->ShrtName[0] = '\0';
|
Crs->ShrtName[0] = '\0';
|
||||||
|
@ -1639,7 +1639,7 @@ static void Crs_GetCourseDataFromRow (MYSQL_RES *mysql_res,
|
||||||
Crs->PrtCod = Str_ConvertStrCodToLongCod (row[1]);
|
Crs->PrtCod = Str_ConvertStrCodToLongCod (row[1]);
|
||||||
|
|
||||||
/***** Get year (row[2]) *****/
|
/***** Get year (row[2]) *****/
|
||||||
Crs->Year = Deg_ConvStrToYear (row[2]);
|
Crs->Specific.Year = Deg_ConvStrToYear (row[2]);
|
||||||
|
|
||||||
/***** Get course status (row[4]) *****/
|
/***** Get course status (row[4]) *****/
|
||||||
if (sscanf (row[4],"%u",&(Crs->Status)) != 1)
|
if (sscanf (row[4],"%u",&(Crs->Status)) != 1)
|
||||||
|
@ -1904,7 +1904,7 @@ void Crs_UpdateCrsYear (struct Crs_Course *Crs,unsigned NewYear)
|
||||||
Crs_DB_UpdateCrsYear (Crs->Cod,NewYear);
|
Crs_DB_UpdateCrsYear (Crs->Cod,NewYear);
|
||||||
|
|
||||||
/***** Copy course year/semester *****/
|
/***** Copy course year/semester *****/
|
||||||
Crs->Year = NewYear;
|
Crs->Specific.Year = NewYear;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -1980,7 +1980,7 @@ void Crs_RenameCourse (struct Crs_Course *Crs,Cns_ShrtOrFullName_t ShrtOrFullNam
|
||||||
{
|
{
|
||||||
/***** If course was in database... *****/
|
/***** If course was in database... *****/
|
||||||
if (Crs_DB_CheckIfCrsNameExistsInYearOfDeg (ParName,NewCrsName,Crs->Cod,
|
if (Crs_DB_CheckIfCrsNameExistsInYearOfDeg (ParName,NewCrsName,Crs->Cod,
|
||||||
Crs->PrtCod,Crs->Year))
|
Crs->PrtCod,Crs->Specific.Year))
|
||||||
Ale_CreateAlert (Ale_WARNING,NULL,
|
Ale_CreateAlert (Ale_WARNING,NULL,
|
||||||
Txt_The_course_X_already_exists,
|
Txt_The_course_X_already_exists,
|
||||||
NewCrsName);
|
NewCrsName);
|
||||||
|
@ -2613,7 +2613,7 @@ static void Crs_EditingCourseConstructor (void)
|
||||||
/***** Reset course *****/
|
/***** Reset course *****/
|
||||||
Crs_EditingCrs->Cod = -1L;
|
Crs_EditingCrs->Cod = -1L;
|
||||||
Crs_EditingCrs->PrtCod = -1L;
|
Crs_EditingCrs->PrtCod = -1L;
|
||||||
Crs_EditingCrs->Year = 0;
|
Crs_EditingCrs->Specific.Year = 0;
|
||||||
Crs_EditingCrs->Status = 0;
|
Crs_EditingCrs->Status = 0;
|
||||||
Crs_EditingCrs->InstitutionalCod[0] = '\0';
|
Crs_EditingCrs->InstitutionalCod[0] = '\0';
|
||||||
Crs_EditingCrs->ShrtName[0] = '\0';
|
Crs_EditingCrs->ShrtName[0] = '\0';
|
||||||
|
|
|
@ -56,7 +56,12 @@ struct Crs_Course
|
||||||
{
|
{
|
||||||
long Cod; // Course code
|
long Cod; // Course code
|
||||||
long PrtCod; // Parent (degree) code
|
long PrtCod; // Parent (degree) code
|
||||||
unsigned Year; // Year: 0 (optatives), 1, 2, 3...
|
union
|
||||||
|
{
|
||||||
|
long PlcCod; // Center place code
|
||||||
|
long TypCod; // Degree type code
|
||||||
|
unsigned Year; // Course year: 0 (optatives), 1, 2, 3...
|
||||||
|
} Specific;
|
||||||
Hie_Status_t Status; // Course status
|
Hie_Status_t Status; // Course status
|
||||||
long RequesterUsrCod; // User code of the person who requested the creation of this course
|
long RequesterUsrCod; // User code of the person who requested the creation of this course
|
||||||
char InstitutionalCod[Crs_MAX_BYTES_INSTITUTIONAL_COD + 1]; // Institutional code of the course
|
char InstitutionalCod[Crs_MAX_BYTES_INSTITUTIONAL_COD + 1]; // Institutional code of the course
|
||||||
|
|
|
@ -332,7 +332,7 @@ static void CrsCfg_Year (bool PutForm)
|
||||||
Year <= Deg_MAX_YEARS_PER_DEGREE;
|
Year <= Deg_MAX_YEARS_PER_DEGREE;
|
||||||
Year++)
|
Year++)
|
||||||
HTM_OPTION (HTM_Type_UNSIGNED,&Year,
|
HTM_OPTION (HTM_Type_UNSIGNED,&Year,
|
||||||
Year == Gbl.Hierarchy.Crs.Year ? HTM_OPTION_SELECTED :
|
Year == Gbl.Hierarchy.Crs.Specific.Year ? HTM_OPTION_SELECTED :
|
||||||
HTM_OPTION_UNSELECTED,
|
HTM_OPTION_UNSELECTED,
|
||||||
HTM_OPTION_ENABLED,
|
HTM_OPTION_ENABLED,
|
||||||
"%s",Txt_YEAR_OF_DEGREE[Year]);
|
"%s",Txt_YEAR_OF_DEGREE[Year]);
|
||||||
|
@ -340,7 +340,7 @@ static void CrsCfg_Year (bool PutForm)
|
||||||
Frm_EndForm ();
|
Frm_EndForm ();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
HTM_Txt (Gbl.Hierarchy.Crs.Year ? Txt_YEAR_OF_DEGREE[Gbl.Hierarchy.Crs.Year] :
|
HTM_Txt (Gbl.Hierarchy.Crs.Specific.Year ? Txt_YEAR_OF_DEGREE[Gbl.Hierarchy.Crs.Specific.Year] :
|
||||||
Txt_Not_applicable);
|
Txt_Not_applicable);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
|
||||||
|
@ -491,17 +491,17 @@ void CrsCfg_ChangeCrsDeg (void)
|
||||||
|
|
||||||
/***** If name of course was in database in the new degree... *****/
|
/***** If name of course was in database in the new degree... *****/
|
||||||
if (Crs_DB_CheckIfCrsNameExistsInYearOfDeg ("ShortName",Gbl.Hierarchy.Crs.ShrtName,-1L,
|
if (Crs_DB_CheckIfCrsNameExistsInYearOfDeg ("ShortName",Gbl.Hierarchy.Crs.ShrtName,-1L,
|
||||||
NewDeg.Cod,Gbl.Hierarchy.Crs.Year))
|
NewDeg.Cod,Gbl.Hierarchy.Crs.Specific.Year))
|
||||||
Ale_CreateAlert (Ale_WARNING,NULL,
|
Ale_CreateAlert (Ale_WARNING,NULL,
|
||||||
Txt_In_the_year_X_of_the_degree_Y_already_existed_a_course_with_the_name_Z,
|
Txt_In_the_year_X_of_the_degree_Y_already_existed_a_course_with_the_name_Z,
|
||||||
Txt_YEAR_OF_DEGREE[Gbl.Hierarchy.Crs.Year],
|
Txt_YEAR_OF_DEGREE[Gbl.Hierarchy.Crs.Specific.Year],
|
||||||
NewDeg.FullName,
|
NewDeg.FullName,
|
||||||
Gbl.Hierarchy.Crs.ShrtName);
|
Gbl.Hierarchy.Crs.ShrtName);
|
||||||
else if (Crs_DB_CheckIfCrsNameExistsInYearOfDeg ("FullName",Gbl.Hierarchy.Crs.FullName,-1L,
|
else if (Crs_DB_CheckIfCrsNameExistsInYearOfDeg ("FullName",Gbl.Hierarchy.Crs.FullName,-1L,
|
||||||
NewDeg.Cod,Gbl.Hierarchy.Crs.Year))
|
NewDeg.Cod,Gbl.Hierarchy.Crs.Specific.Year))
|
||||||
Ale_CreateAlert (Ale_WARNING,NULL,
|
Ale_CreateAlert (Ale_WARNING,NULL,
|
||||||
Txt_In_the_year_X_of_the_degree_Y_already_existed_a_course_with_the_name_Z,
|
Txt_In_the_year_X_of_the_degree_Y_already_existed_a_course_with_the_name_Z,
|
||||||
Txt_YEAR_OF_DEGREE[Gbl.Hierarchy.Crs.Year],
|
Txt_YEAR_OF_DEGREE[Gbl.Hierarchy.Crs.Specific.Year],
|
||||||
NewDeg.FullName,
|
NewDeg.FullName,
|
||||||
Gbl.Hierarchy.Crs.FullName);
|
Gbl.Hierarchy.Crs.FullName);
|
||||||
else // Update degree in database
|
else // Update degree in database
|
||||||
|
|
|
@ -59,7 +59,7 @@ void Crs_DB_CreateCourse (struct Crs_Course *Crs,Hie_Status_t Status)
|
||||||
" (%ld,%u,'%s',%u,%ld,"
|
" (%ld,%u,'%s',%u,%ld,"
|
||||||
"'%s','%s')",
|
"'%s','%s')",
|
||||||
Crs->PrtCod,
|
Crs->PrtCod,
|
||||||
Crs->Year,
|
Crs->Specific.Year,
|
||||||
Crs->InstitutionalCod,
|
Crs->InstitutionalCod,
|
||||||
(unsigned) Status,
|
(unsigned) Status,
|
||||||
Gbl.Usrs.Me.UsrDat.UsrCod,
|
Gbl.Usrs.Me.UsrDat.UsrCod,
|
||||||
|
|
|
@ -418,7 +418,7 @@ static void Deg_ListDegreesForEdition (const struct DegTyp_DegTypes *DegTypes)
|
||||||
{
|
{
|
||||||
DegTypInLst = &DegTypes->Lst[NumDegTyp];
|
DegTypInLst = &DegTypes->Lst[NumDegTyp];
|
||||||
HTM_OPTION (HTM_Type_LONG,&DegTypInLst->DegTypCod,
|
HTM_OPTION (HTM_Type_LONG,&DegTypInLst->DegTypCod,
|
||||||
DegTypInLst->DegTypCod == DegInLst->TypCod ? HTM_OPTION_SELECTED :
|
DegTypInLst->DegTypCod == DegInLst->Specific.TypCod ? HTM_OPTION_SELECTED :
|
||||||
HTM_OPTION_UNSELECTED,
|
HTM_OPTION_UNSELECTED,
|
||||||
HTM_OPTION_ENABLED,
|
HTM_OPTION_ENABLED,
|
||||||
"%s",DegTypInLst->DegTypName);
|
"%s",DegTypInLst->DegTypName);
|
||||||
|
@ -432,7 +432,7 @@ static void Deg_ListDegreesForEdition (const struct DegTyp_DegTypes *DegTypes)
|
||||||
NumDegTyp++)
|
NumDegTyp++)
|
||||||
{
|
{
|
||||||
DegTypInLst = &DegTypes->Lst[NumDegTyp];
|
DegTypInLst = &DegTypes->Lst[NumDegTyp];
|
||||||
if (DegTypInLst->DegTypCod == DegInLst->TypCod)
|
if (DegTypInLst->DegTypCod == DegInLst->Specific.TypCod)
|
||||||
HTM_Txt (DegTypInLst->DegTypName);
|
HTM_Txt (DegTypInLst->DegTypName);
|
||||||
}
|
}
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
@ -579,7 +579,7 @@ static void Deg_PutFormToCreateDegree (const struct DegTyp_DegTypes *DegTypes)
|
||||||
{
|
{
|
||||||
DegTypInLst = &DegTypes->Lst[NumDegTyp];
|
DegTypInLst = &DegTypes->Lst[NumDegTyp];
|
||||||
HTM_OPTION (HTM_Type_LONG,&DegTypInLst->DegTypCod,
|
HTM_OPTION (HTM_Type_LONG,&DegTypInLst->DegTypCod,
|
||||||
DegTypInLst->DegTypCod == Deg_EditingDeg->TypCod ? HTM_OPTION_SELECTED :
|
DegTypInLst->DegTypCod == Deg_EditingDeg->Specific.TypCod ? HTM_OPTION_SELECTED :
|
||||||
HTM_OPTION_UNSELECTED,
|
HTM_OPTION_UNSELECTED,
|
||||||
HTM_OPTION_ENABLED,
|
HTM_OPTION_ENABLED,
|
||||||
"%s",DegTypInLst->DegTypName);
|
"%s",DegTypInLst->DegTypName);
|
||||||
|
@ -788,7 +788,7 @@ static void Deg_ListOneDegreeForSeeing (struct Deg_Degree *Deg,unsigned NumDeg)
|
||||||
unsigned NumCrss = Crs_GetCachedNumCrssInDeg (Deg->Cod);
|
unsigned NumCrss = Crs_GetCachedNumCrssInDeg (Deg->Cod);
|
||||||
|
|
||||||
/***** Get data of type of degree of this degree *****/
|
/***** Get data of type of degree of this degree *****/
|
||||||
DegTyp.DegTypCod = Deg->TypCod;
|
DegTyp.DegTypCod = Deg->Specific.TypCod;
|
||||||
if (!DegTyp_GetDegreeTypeDataByCod (&DegTyp))
|
if (!DegTyp_GetDegreeTypeDataByCod (&DegTyp))
|
||||||
Err_WrongDegTypExit ();
|
Err_WrongDegTypExit ();
|
||||||
|
|
||||||
|
@ -1069,7 +1069,7 @@ static void Deg_ReceiveFormRequestOrCreateDeg (Hie_Status_t Status)
|
||||||
Par_GetParText ("FullName" ,Deg_EditingDeg->FullName,Cns_HIERARCHY_MAX_BYTES_FULL_NAME);
|
Par_GetParText ("FullName" ,Deg_EditingDeg->FullName,Cns_HIERARCHY_MAX_BYTES_FULL_NAME);
|
||||||
|
|
||||||
/* Get degree type */
|
/* Get degree type */
|
||||||
Deg_EditingDeg->TypCod = ParCod_GetAndCheckPar (ParCod_OthDegTyp);
|
Deg_EditingDeg->Specific.TypCod = ParCod_GetAndCheckPar (ParCod_OthDegTyp);
|
||||||
|
|
||||||
/* Get degree WWW */
|
/* Get degree WWW */
|
||||||
Par_GetParText ("WWW",Deg_EditingDeg->WWW,Cns_MAX_BYTES_WWW);
|
Par_GetParText ("WWW",Deg_EditingDeg->WWW,Cns_MAX_BYTES_WWW);
|
||||||
|
@ -1153,7 +1153,7 @@ bool Deg_GetDegreeDataByCod (struct Deg_Degree *Deg)
|
||||||
|
|
||||||
/***** Clear data *****/
|
/***** Clear data *****/
|
||||||
Deg->PrtCod = -1L;
|
Deg->PrtCod = -1L;
|
||||||
Deg->TypCod = -1L;
|
Deg->Specific.TypCod = -1L;
|
||||||
Deg->Status = (Hie_Status_t) 0;
|
Deg->Status = (Hie_Status_t) 0;
|
||||||
Deg->RequesterUsrCod = -1L;
|
Deg->RequesterUsrCod = -1L;
|
||||||
Deg->ShrtName[0] = '\0';
|
Deg->ShrtName[0] = '\0';
|
||||||
|
@ -1198,7 +1198,7 @@ static void Deg_GetDegreeDataFromRow (MYSQL_RES *mysql_res,
|
||||||
|
|
||||||
/***** Get center code (row[1]) and code of the degree type (row[2]) *****/
|
/***** Get center code (row[1]) and code of the degree type (row[2]) *****/
|
||||||
Deg->PrtCod = Str_ConvertStrCodToLongCod (row[1]);
|
Deg->PrtCod = Str_ConvertStrCodToLongCod (row[1]);
|
||||||
Deg->TypCod = Str_ConvertStrCodToLongCod (row[2]);
|
Deg->Specific.TypCod = Str_ConvertStrCodToLongCod (row[2]);
|
||||||
|
|
||||||
/* Get course status (row[3]) */
|
/* Get course status (row[3]) */
|
||||||
if (sscanf (row[3],"%u",&(Deg->Status)) != 1)
|
if (sscanf (row[3],"%u",&(Deg->Status)) != 1)
|
||||||
|
@ -1391,7 +1391,7 @@ void Deg_ChangeDegreeType (void)
|
||||||
|
|
||||||
/***** Update the table of degrees changing old type by new type *****/
|
/***** Update the table of degrees changing old type by new type *****/
|
||||||
Deg_DB_UpdateDegTyp (Deg_EditingDeg->Cod,NewDegTypCod);
|
Deg_DB_UpdateDegTyp (Deg_EditingDeg->Cod,NewDegTypCod);
|
||||||
Deg_EditingDeg->TypCod = NewDegTypCod;
|
Deg_EditingDeg->Specific.TypCod = NewDegTypCod;
|
||||||
|
|
||||||
/***** Create alert to show the change made
|
/***** Create alert to show the change made
|
||||||
and put button to go to degree changed *****/
|
and put button to go to degree changed *****/
|
||||||
|
@ -1772,7 +1772,7 @@ static void Deg_EditingDegreeConstructor (void)
|
||||||
/***** Reset degree *****/
|
/***** Reset degree *****/
|
||||||
Deg_EditingDeg->Cod = -1L;
|
Deg_EditingDeg->Cod = -1L;
|
||||||
Deg_EditingDeg->PrtCod = -1L;
|
Deg_EditingDeg->PrtCod = -1L;
|
||||||
Deg_EditingDeg->TypCod = -1L;
|
Deg_EditingDeg->Specific.TypCod = -1L;
|
||||||
Deg_EditingDeg->Status = (Hie_Status_t) 0;
|
Deg_EditingDeg->Status = (Hie_Status_t) 0;
|
||||||
Deg_EditingDeg->RequesterUsrCod = -1L;
|
Deg_EditingDeg->RequesterUsrCod = -1L;
|
||||||
Deg_EditingDeg->ShrtName[0] = '\0';
|
Deg_EditingDeg->ShrtName[0] = '\0';
|
||||||
|
|
|
@ -51,7 +51,12 @@ struct Deg_Degree
|
||||||
{
|
{
|
||||||
long Cod; // Degree code
|
long Cod; // Degree code
|
||||||
long PrtCod; // Parent (center) code
|
long PrtCod; // Parent (center) code
|
||||||
|
union
|
||||||
|
{
|
||||||
|
long PlcCod; // Center place code
|
||||||
long TypCod; // Degree type code
|
long TypCod; // Degree type code
|
||||||
|
unsigned Year; // Course year: 0 (optatives), 1, 2, 3...
|
||||||
|
} Specific;
|
||||||
Hie_Status_t Status; // Degree status
|
Hie_Status_t Status; // Degree status
|
||||||
long RequesterUsrCod; // User code of the person who requested the creation of this degree
|
long RequesterUsrCod; // User code of the person who requested the creation of this degree
|
||||||
char ShrtName[Cns_HIERARCHY_MAX_BYTES_SHRT_NAME + 1]; // Short name of degree
|
char ShrtName[Cns_HIERARCHY_MAX_BYTES_SHRT_NAME + 1]; // Short name of degree
|
||||||
|
|
|
@ -65,7 +65,7 @@ void Deg_DB_CreateDegree (struct Deg_Degree *Deg,Hie_Status_t Status)
|
||||||
" (%ld,%ld,%u,"
|
" (%ld,%ld,%u,"
|
||||||
"%ld,'%s','%s','%s')",
|
"%ld,'%s','%s','%s')",
|
||||||
Deg->PrtCod,
|
Deg->PrtCod,
|
||||||
Deg->TypCod,
|
Deg->Specific.TypCod,
|
||||||
(unsigned) Status,
|
(unsigned) Status,
|
||||||
Gbl.Usrs.Me.UsrDat.UsrCod,
|
Gbl.Usrs.Me.UsrDat.UsrCod,
|
||||||
Deg->ShrtName,
|
Deg->ShrtName,
|
||||||
|
|
|
@ -324,7 +324,7 @@ static void DegTyp_ListDegreeTypesForSeeing (const struct DegTyp_DegTypes *DegTy
|
||||||
NumDegTyp++, The_ChangeRowColor ())
|
NumDegTyp++, The_ChangeRowColor ())
|
||||||
{
|
{
|
||||||
BgColor = (DegTypes->Lst[NumDegTyp].DegTypCod ==
|
BgColor = (DegTypes->Lst[NumDegTyp].DegTypCod ==
|
||||||
Gbl.Hierarchy.Deg.TypCod) ? "BG_HIGHLIGHT" :
|
Gbl.Hierarchy.Deg.Specific.TypCod) ? "BG_HIGHLIGHT" :
|
||||||
The_GetColorRows ();
|
The_GetColorRows ();
|
||||||
|
|
||||||
/* Begin table row */
|
/* Begin table row */
|
||||||
|
|
|
@ -669,7 +669,7 @@ void Hie_ResetHierarchy (void)
|
||||||
/***** Center *****/
|
/***** Center *****/
|
||||||
Gbl.Hierarchy.Ctr.Cod = -1L;
|
Gbl.Hierarchy.Ctr.Cod = -1L;
|
||||||
Gbl.Hierarchy.Ctr.PrtCod = -1L;
|
Gbl.Hierarchy.Ctr.PrtCod = -1L;
|
||||||
Gbl.Hierarchy.Ctr.PlcCod = -1L;
|
Gbl.Hierarchy.Ctr.Specific.PlcCod = -1L;
|
||||||
|
|
||||||
/***** Degree *****/
|
/***** Degree *****/
|
||||||
Gbl.Hierarchy.Deg.Cod = -1L;
|
Gbl.Hierarchy.Deg.Cod = -1L;
|
||||||
|
|
|
@ -41,6 +41,12 @@ struct Ins_Instit
|
||||||
{
|
{
|
||||||
long Cod; // Institution code
|
long Cod; // Institution code
|
||||||
long PrtCod; // Parent (country) code
|
long PrtCod; // Parent (country) code
|
||||||
|
union
|
||||||
|
{
|
||||||
|
long PlcCod; // Center place code
|
||||||
|
long TypCod; // Degree type code
|
||||||
|
unsigned Year; // Course year: 0 (optatives), 1, 2, 3...
|
||||||
|
} Specific;
|
||||||
Hie_Status_t Status; // Institution status
|
Hie_Status_t Status; // Institution status
|
||||||
long RequesterUsrCod; // User code of the person who requested the creation of this institution
|
long RequesterUsrCod; // User code of the person who requested the creation of this institution
|
||||||
char ShrtName[Cns_HIERARCHY_MAX_BYTES_SHRT_NAME + 1];
|
char ShrtName[Cns_HIERARCHY_MAX_BYTES_SHRT_NAME + 1];
|
||||||
|
|
|
@ -1058,8 +1058,8 @@ static void Rep_WriteRowCrsData (long CrsCod,Rol_Role_t Role,
|
||||||
fprintf (Rep_File,"<strong>%s</strong> -",Crs.FullName);
|
fprintf (Rep_File,"<strong>%s</strong> -",Crs.FullName);
|
||||||
|
|
||||||
/***** Write year *****/
|
/***** Write year *****/
|
||||||
if (Crs.Year)
|
if (Crs.Specific.Year)
|
||||||
fprintf (Rep_File," %s",Txt_YEAR_OF_DEGREE[Crs.Year]);
|
fprintf (Rep_File," %s",Txt_YEAR_OF_DEGREE[Crs.Specific.Year]);
|
||||||
|
|
||||||
/***** Write degree full name *****/
|
/***** Write degree full name *****/
|
||||||
fprintf (Rep_File," %s",Deg.FullName);
|
fprintf (Rep_File," %s",Deg.FullName);
|
||||||
|
|
|
@ -3319,7 +3319,7 @@ static void Sta_ShowNumHitsPerCourse (Sta_CountType_t CountType,
|
||||||
/* Write degree year */
|
/* Write degree year */
|
||||||
HTM_TD_Begin ("class=\"CT LOG_%s\"",The_GetSuffix ());
|
HTM_TD_Begin ("class=\"CT LOG_%s\"",The_GetSuffix ());
|
||||||
if (CrsOK)
|
if (CrsOK)
|
||||||
HTM_Txt (Txt_YEAR_OF_DEGREE[Crs.Year]);
|
HTM_Txt (Txt_YEAR_OF_DEGREE[Crs.Specific.Year]);
|
||||||
else
|
else
|
||||||
HTM_Hyphen ();
|
HTM_Hyphen ();
|
||||||
HTM_NBSP ();
|
HTM_NBSP ();
|
||||||
|
|
Loading…
Reference in New Issue
Block a user