Version 16.82.2

This commit is contained in:
Antonio Cañas Vargas 2016-12-02 10:45:53 +01:00
parent b58dac1a7b
commit f01d61f578
7 changed files with 103 additions and 75 deletions

View File

@ -1815,10 +1815,13 @@ a:hover img.CENTRE_PHOTO_SHOW
.ASG_TITLE_LIGHT {color:#AFC4CC; font-size:15pt; font-weight:bold;} .ASG_TITLE_LIGHT {color:#AFC4CC; font-size:15pt; font-weight:bold;}
.ASG_GRP {color:#4D88A1; font-size:12pt;} .ASG_GRP {color:#4D88A1; font-size:12pt;}
.ASG_GRP_LIGHT {color:#AFC4CC; font-size:12pt;} .ASG_GRP_LIGHT {color:#AFC4CC; font-size:12pt;}
.DATE_GREEN {color:#008000; font-size:13pt;}
.DATE_GREEN_LIGHT {color:#89BE87; font-size:13pt;}
.DATE_RED {color:red; font-size:13pt;} .DATE_RED {color:red; font-size:13pt;}
.DATE_RED_LIGHT {color:#F98A8A; font-size:13pt;} .DATE_RED_LIGHT {color:#F98A8A; font-size:13pt;}
.DATE_GREEN {color:#008000; font-size:13pt;}
.DATE_GREEN_LIGHT {color:#89BE87; font-size:13pt;}
.DATE_BLUE {color:#4D88A1; font-size:13pt;}
.DATE_BLUE_LIGHT {color:#AFC4CC; font-size:13pt;}
.ASG_LST_DATE_GREEN {color:#008000; font-size:11pt; white-space:nowrap;} .ASG_LST_DATE_GREEN {color:#008000; font-size:11pt; white-space:nowrap;}
.ASG_LST_DATE_RED {color:red; font-size:11pt; white-space:nowrap;} .ASG_LST_DATE_RED {color:red; font-size:11pt; white-space:nowrap;}

View File

@ -129,7 +129,7 @@ static void Agd_ShowEvents (Agd_AgendaType_t AgendaType)
extern const char *Txt_Event; extern const char *Txt_Event;
extern const char *Txt_Location; extern const char *Txt_Location;
extern const char *Txt_No_events; extern const char *Txt_No_events;
Loc_Order_t Order; Agd_Order_t Order;
struct Pagination Pagination; struct Pagination Pagination;
unsigned NumEvent; unsigned NumEvent;
Pag_WhatPaginate_t WhatPaginate[Agd_NUM_AGENDA_TYPES] = Pag_WhatPaginate_t WhatPaginate[Agd_NUM_AGENDA_TYPES] =
@ -176,8 +176,8 @@ static void Agd_ShowEvents (Agd_AgendaType_t AgendaType)
/***** Table head *****/ /***** Table head *****/
fprintf (Gbl.F.Out,"<table class=\"FRAME_TBL_MARGIN CELLS_PAD_2\">" fprintf (Gbl.F.Out,"<table class=\"FRAME_TBL_MARGIN CELLS_PAD_2\">"
"<tr>"); "<tr>");
for (Order = Loc_ORDER_BY_START_DATE; for (Order = Agd_ORDER_BY_START_DATE;
Order <= Loc_ORDER_BY_END_DATE; Order <= Agd_ORDER_BY_END_DATE;
Order++) Order++)
{ {
fprintf (Gbl.F.Out,"<th class=\"LEFT_MIDDLE\">"); fprintf (Gbl.F.Out,"<th class=\"LEFT_MIDDLE\">");
@ -285,6 +285,8 @@ static void Agd_PutParamsToCreateNewEvent (void)
static void Agd_ShowOneEvent (Agd_AgendaType_t AgendaType,long AgdCod) static void Agd_ShowOneEvent (Agd_AgendaType_t AgendaType,long AgdCod)
{ {
extern const char *Dat_TimeStatusClassVisible[Dat_NUM_TIME_STATUS];
extern const char *Dat_TimeStatusClassHidden[Dat_NUM_TIME_STATUS];
extern const char *Txt_Today; extern const char *Txt_Today;
static unsigned UniqueId = 0; static unsigned UniqueId = 0;
struct AgendaEvent AgdEvent; struct AgendaEvent AgdEvent;
@ -313,12 +315,10 @@ static void Agd_ShowOneEvent (Agd_AgendaType_t AgendaType,long AgdCod)
"</script>" "</script>"
"</td>", "</td>",
UniqueId, UniqueId,
AgdEvent.Hidden ? (AgdEvent.Open ? "DATE_GREEN_LIGHT" : AgdEvent.Hidden ? Dat_TimeStatusClassHidden[AgdEvent.TimeStatus] :
"DATE_RED_LIGHT") : Dat_TimeStatusClassVisible[AgdEvent.TimeStatus],
(AgdEvent.Open ? "DATE_GREEN" :
"DATE_RED"),
Gbl.RowEvenOdd, Gbl.RowEvenOdd,
UniqueId,AgdEvent.TimeUTC[Loc_START_TIME],Txt_Today); UniqueId,AgdEvent.TimeUTC[Agd_START_TIME],Txt_Today);
/* End date/time */ /* End date/time */
UniqueId++; UniqueId++;
@ -328,12 +328,10 @@ static void Agd_ShowOneEvent (Agd_AgendaType_t AgendaType,long AgdCod)
"</script>" "</script>"
"</td>", "</td>",
UniqueId, UniqueId,
AgdEvent.Hidden ? (AgdEvent.Open ? "DATE_GREEN_LIGHT" : AgdEvent.Hidden ? Dat_TimeStatusClassHidden[AgdEvent.TimeStatus] :
"DATE_RED_LIGHT") : Dat_TimeStatusClassVisible[AgdEvent.TimeStatus],
(AgdEvent.Open ? "DATE_GREEN" :
"DATE_RED"),
Gbl.RowEvenOdd, Gbl.RowEvenOdd,
UniqueId,AgdEvent.TimeUTC[Loc_END_TIME],Txt_Today); UniqueId,AgdEvent.TimeUTC[Agd_END_TIME],Txt_Today);
/* Event */ /* Event */
fprintf (Gbl.F.Out,"<td class=\"LEFT_TOP COLOR%u\">" fprintf (Gbl.F.Out,"<td class=\"LEFT_TOP COLOR%u\">"
@ -443,9 +441,9 @@ static void Agd_GetParamEventOrderType (void)
Par_GetParToText ("Order",UnsignedStr,10); Par_GetParToText ("Order",UnsignedStr,10);
if (sscanf (UnsignedStr,"%u",&UnsignedNum) == 1) if (sscanf (UnsignedStr,"%u",&UnsignedNum) == 1)
Gbl.Agenda.SelectedOrderType = (Loc_Order_t) UnsignedNum; Gbl.Agenda.SelectedOrderType = (Agd_Order_t) UnsignedNum;
else else
Gbl.Agenda.SelectedOrderType = Loc_DEFAULT_ORDER_TYPE; Gbl.Agenda.SelectedOrderType = Agd_DEFAULT_ORDER_TYPE;
} }
/*****************************************************************************/ /*****************************************************************************/
@ -529,10 +527,10 @@ static void Agd_GetListEvents (Agd_AgendaType_t AgendaType)
/***** Get list of events from database *****/ /***** Get list of events from database *****/
switch (Gbl.Agenda.SelectedOrderType) switch (Gbl.Agenda.SelectedOrderType)
{ {
case Loc_ORDER_BY_START_DATE: case Agd_ORDER_BY_START_DATE:
sprintf (OrderBySubQuery,"StartTime DESC,EndTime DESC,Location DESC,Event DESC"); sprintf (OrderBySubQuery,"StartTime DESC,EndTime DESC,Location DESC,Event DESC");
break; break;
case Loc_ORDER_BY_END_DATE: case Agd_ORDER_BY_END_DATE:
sprintf (OrderBySubQuery,"EndTime DESC,StartTime DESC,Location DESC,Event DESC"); sprintf (OrderBySubQuery,"EndTime DESC,StartTime DESC,Location DESC,Event DESC");
break; break;
} }
@ -596,7 +594,8 @@ static void Agd_GetDataOfEventByCod (struct AgendaEvent *AgdEvent)
sprintf (Query,"SELECT AgdCod,UsrCod,Hidden," sprintf (Query,"SELECT AgdCod,UsrCod,Hidden,"
"UNIX_TIMESTAMP(StartTime)," "UNIX_TIMESTAMP(StartTime),"
"UNIX_TIMESTAMP(EndTime)," "UNIX_TIMESTAMP(EndTime),"
"NOW() BETWEEN StartTime AND EndTime," "NOW()>EndTime," // Past event?
"NOW()<StartTime," // Future event?
"Event,Location" "Event,Location"
" FROM agendas" " FROM agendas"
" WHERE AgdCod='%ld' AND UsrCod='%ld'", " WHERE AgdCod='%ld' AND UsrCod='%ld'",
@ -620,9 +619,9 @@ static void Agd_GetDataOfEvent (struct AgendaEvent *AgdEvent,const char *Query)
AgdEvent->AgdCod = -1L; AgdEvent->AgdCod = -1L;
AgdEvent->UsrCod = -1L; AgdEvent->UsrCod = -1L;
AgdEvent->Hidden = false; AgdEvent->Hidden = false;
AgdEvent->TimeUTC[Loc_START_TIME] = AgdEvent->TimeUTC[Agd_START_TIME] =
AgdEvent->TimeUTC[Loc_END_TIME ] = (time_t) 0; AgdEvent->TimeUTC[Agd_END_TIME ] = (time_t) 0;
AgdEvent->Open = false; AgdEvent->TimeStatus = Dat_FUTURE;
AgdEvent->Event[0] = '\0'; AgdEvent->Event[0] = '\0';
AgdEvent->Location[0] = '\0'; AgdEvent->Location[0] = '\0';
@ -631,7 +630,17 @@ static void Agd_GetDataOfEvent (struct AgendaEvent *AgdEvent,const char *Query)
if (NumRows) // Event found... if (NumRows) // Event found...
{ {
/* Get row */ /* Get row:
row[0] AgdCod
row[1] UsrCod
row[2] Hidden
row[3] UNIX_TIMESTAMP(StartTime)
row[4] UNIX_TIMESTAMP(EndTime)
row[5] NOW()>EndTime // Past event?
row[6] NOW()<StartTime // Future event?
row[7] Event
row[8] Location
*/
row = mysql_fetch_row (mysql_res); row = mysql_fetch_row (mysql_res);
/* Get code of the event (row[0]) */ /* Get code of the event (row[0]) */
@ -644,19 +653,21 @@ static void Agd_GetDataOfEvent (struct AgendaEvent *AgdEvent,const char *Query)
AgdEvent->Hidden = (row[2][0] == 'Y'); AgdEvent->Hidden = (row[2][0] == 'Y');
/* Get start date (row[3] holds the start UTC time) */ /* Get start date (row[3] holds the start UTC time) */
AgdEvent->TimeUTC[Loc_START_TIME] = Dat_GetUNIXTimeFromStr (row[3]); AgdEvent->TimeUTC[Agd_START_TIME] = Dat_GetUNIXTimeFromStr (row[3]);
/* Get end date (row[4] holds the end UTC time) */ /* Get end date (row[4] holds the end UTC time) */
AgdEvent->TimeUTC[Loc_END_TIME ] = Dat_GetUNIXTimeFromStr (row[4]); AgdEvent->TimeUTC[Agd_END_TIME ] = Dat_GetUNIXTimeFromStr (row[4]);
/* Get whether the event is open or closed (row(5)) */ /* Get whether the event is past, present or futur (row(5), row[6]) */
AgdEvent->Open = (row[5][0] == '1'); AgdEvent->TimeStatus = ((row[5][0] == '1') ? Dat_PAST :
((row[6][0] == '1') ? Dat_FUTURE :
/* Get the event (row[6]) */ Dat_PRESENT));
strcpy (AgdEvent->Event,row[6]);
/* Get the event (row[7]) */ /* Get the event (row[7]) */
strcpy (AgdEvent->Location,row[7]); strcpy (AgdEvent->Event,row[7]);
/* Get the event (row[8]) */
strcpy (AgdEvent->Location,row[8]);
} }
/***** Free structure that stores the query result *****/ /***** Free structure that stores the query result *****/
@ -919,9 +930,9 @@ void Agd_RequestCreatOrEditEvent (void)
/* Initialize to empty event */ /* Initialize to empty event */
AgdEvent.AgdCod = -1L; AgdEvent.AgdCod = -1L;
AgdEvent.UsrCod = Gbl.Usrs.Me.UsrDat.UsrCod; AgdEvent.UsrCod = Gbl.Usrs.Me.UsrDat.UsrCod;
AgdEvent.TimeUTC[Loc_START_TIME] = Gbl.StartExecutionTimeUTC; AgdEvent.TimeUTC[Agd_START_TIME] = Gbl.StartExecutionTimeUTC;
AgdEvent.TimeUTC[Loc_END_TIME ] = Gbl.StartExecutionTimeUTC + (2 * 60 * 60); // +2 hours AgdEvent.TimeUTC[Agd_END_TIME ] = Gbl.StartExecutionTimeUTC + (2 * 60 * 60); // +2 hours
AgdEvent.Open = true; AgdEvent.TimeStatus = Dat_FUTURE;
AgdEvent.Event[0] = '\0'; AgdEvent.Event[0] = '\0';
AgdEvent.Location[0] = '\0'; AgdEvent.Location[0] = '\0';
} }
@ -969,7 +980,7 @@ void Agd_RequestCreatOrEditEvent (void)
"</tr>", "</tr>",
The_ClassForm[Gbl.Prefs.Theme], The_ClassForm[Gbl.Prefs.Theme],
Txt_Event, Txt_Event,
Loc_MAX_LENGTH_EVENT,AgdEvent.Event); Agd_MAX_LENGTH_EVENT,AgdEvent.Event);
/***** Location *****/ /***** Location *****/
fprintf (Gbl.F.Out,"<tr>" fprintf (Gbl.F.Out,"<tr>"
@ -984,7 +995,7 @@ void Agd_RequestCreatOrEditEvent (void)
"</tr>", "</tr>",
The_ClassForm[Gbl.Prefs.Theme], The_ClassForm[Gbl.Prefs.Theme],
Txt_Location, Txt_Location,
Loc_MAX_LENGTH_LOCATION,AgdEvent.Location); Agd_MAX_LENGTH_LOCATION,AgdEvent.Location);
/***** Start and end dates *****/ /***** Start and end dates *****/
Dat_PutFormStartEndClientLocalDateTimes (AgdEvent.TimeUTC); Dat_PutFormStartEndClientLocalDateTimes (AgdEvent.TimeUTC);
@ -1043,23 +1054,23 @@ void Agd_RecFormEvent (void)
} }
/***** Get start/end date-times *****/ /***** Get start/end date-times *****/
NewAgdEvent.TimeUTC[Loc_START_TIME] = Dat_GetTimeUTCFromForm ("StartTimeUTC"); NewAgdEvent.TimeUTC[Agd_START_TIME] = Dat_GetTimeUTCFromForm ("StartTimeUTC");
NewAgdEvent.TimeUTC[Loc_END_TIME ] = Dat_GetTimeUTCFromForm ("EndTimeUTC" ); NewAgdEvent.TimeUTC[Agd_END_TIME ] = Dat_GetTimeUTCFromForm ("EndTimeUTC" );
/***** Get event *****/ /***** Get event *****/
Par_GetParToText ("Location",NewAgdEvent.Location,Loc_MAX_LENGTH_LOCATION); Par_GetParToText ("Location",NewAgdEvent.Location,Agd_MAX_LENGTH_LOCATION);
/***** Get event *****/ /***** Get event *****/
Par_GetParToText ("Event",NewAgdEvent.Event,Loc_MAX_LENGTH_EVENT); Par_GetParToText ("Event",NewAgdEvent.Event,Agd_MAX_LENGTH_EVENT);
/***** Get text *****/ /***** Get text *****/
Par_GetParToHTML ("Txt",Txt,Cns_MAX_BYTES_TEXT); // Store in HTML format (not rigorous) Par_GetParToHTML ("Txt",Txt,Cns_MAX_BYTES_TEXT); // Store in HTML format (not rigorous)
/***** Adjust dates *****/ /***** Adjust dates *****/
if (NewAgdEvent.TimeUTC[Loc_START_TIME] == 0) if (NewAgdEvent.TimeUTC[Agd_START_TIME] == 0)
NewAgdEvent.TimeUTC[Loc_START_TIME] = Gbl.StartExecutionTimeUTC; NewAgdEvent.TimeUTC[Agd_START_TIME] = Gbl.StartExecutionTimeUTC;
if (NewAgdEvent.TimeUTC[Loc_END_TIME] == 0) if (NewAgdEvent.TimeUTC[Agd_END_TIME] == 0)
NewAgdEvent.TimeUTC[Loc_END_TIME] = NewAgdEvent.TimeUTC[Loc_START_TIME] + 2*60*60; // +2 hours NewAgdEvent.TimeUTC[Agd_END_TIME] = NewAgdEvent.TimeUTC[Agd_START_TIME] + 2*60*60; // +2 hours
/***** Check if event is correct *****/ /***** Check if event is correct *****/
if (!NewAgdEvent.Location[0]) // If there is no event if (!NewAgdEvent.Location[0]) // If there is no event
@ -1131,8 +1142,8 @@ static void Agd_CreateEvent (struct AgendaEvent *AgdEvent,const char *Txt)
" ('%ld',FROM_UNIXTIME('%ld'),FROM_UNIXTIME('%ld')," " ('%ld',FROM_UNIXTIME('%ld'),FROM_UNIXTIME('%ld'),"
"'%s','%s','%s')", "'%s','%s','%s')",
Gbl.Usrs.Me.UsrDat.UsrCod, Gbl.Usrs.Me.UsrDat.UsrCod,
AgdEvent->TimeUTC[Loc_START_TIME], AgdEvent->TimeUTC[Agd_START_TIME],
AgdEvent->TimeUTC[Loc_END_TIME ], AgdEvent->TimeUTC[Agd_END_TIME ],
AgdEvent->Event, AgdEvent->Event,
AgdEvent->Location, AgdEvent->Location,
Txt); Txt);
@ -1153,8 +1164,8 @@ static void Agd_UpdateEvent (struct AgendaEvent *AgdEvent,const char *Txt)
"EndTime=FROM_UNIXTIME('%ld')," "EndTime=FROM_UNIXTIME('%ld'),"
"Event='%s',Location='%s',Txt='%s'" "Event='%s',Location='%s',Txt='%s'"
" WHERE AgdCod='%ld' AND UsrCod='%ld'", " WHERE AgdCod='%ld' AND UsrCod='%ld'",
AgdEvent->TimeUTC[Loc_START_TIME], AgdEvent->TimeUTC[Agd_START_TIME],
AgdEvent->TimeUTC[Loc_END_TIME ], AgdEvent->TimeUTC[Agd_END_TIME ],
AgdEvent->Event,AgdEvent->Location,Txt, AgdEvent->Event,AgdEvent->Location,Txt,
AgdEvent->AgdCod,Gbl.Usrs.Me.UsrDat.UsrCod); AgdEvent->AgdCod,Gbl.Usrs.Me.UsrDat.UsrCod);
DB_QueryUPDATE (Query,"can not update event"); DB_QueryUPDATE (Query,"can not update event");

View File

@ -34,43 +34,34 @@
/************************** Public types and constants ***********************/ /************************** Public types and constants ***********************/
/*****************************************************************************/ /*****************************************************************************/
#define Loc_MAX_LENGTH_LOCATION 255 #define Agd_MAX_LENGTH_LOCATION 255
#define Loc_MAX_LENGTH_EVENT 255 #define Agd_MAX_LENGTH_EVENT 255
#define Loc_MAX_LENGTH_FOLDER 32 #define Agd_NUM_DATES 2
#define Loc_NUM_TYPES_SEND_WORK 2
typedef enum typedef enum
{ {
Loc_DO_NOT_SEND_WORK = 0, Agd_START_TIME = 0,
Loc_SEND_WORK = 1, Agd_END_TIME = 1,
} Loc_SendWork_t; } Agd_StartOrEndTime_t;
#define Loc_NUM_DATES 2
typedef enum
{
Loc_START_TIME = 0,
Loc_END_TIME = 1,
} Loc_StartOrEndTime_t;
struct AgendaEvent struct AgendaEvent
{ {
long AgdCod; long AgdCod;
bool Hidden; bool Hidden;
long UsrCod; long UsrCod;
time_t TimeUTC[Loc_NUM_DATES]; time_t TimeUTC[Agd_NUM_DATES];
bool Open; Dat_TimeStatus_t TimeStatus;
char Event[Loc_MAX_LENGTH_EVENT+1]; char Event[Agd_MAX_LENGTH_EVENT+1];
char Location[Loc_MAX_LENGTH_LOCATION+1]; char Location[Agd_MAX_LENGTH_LOCATION+1];
}; };
typedef enum typedef enum
{ {
Loc_ORDER_BY_START_DATE = 0, Agd_ORDER_BY_START_DATE = 0,
Loc_ORDER_BY_END_DATE = 1, Agd_ORDER_BY_END_DATE = 1,
} Loc_Order_t; } Agd_Order_t;
#define Loc_DEFAULT_ORDER_TYPE Loc_ORDER_BY_START_DATE #define Agd_DEFAULT_ORDER_TYPE Agd_ORDER_BY_END_DATE
/*****************************************************************************/ /*****************************************************************************/
/***************************** Public prototypes *****************************/ /***************************** Public prototypes *****************************/

View File

@ -187,13 +187,15 @@
/****************************** Public constants *****************************/ /****************************** Public constants *****************************/
/*****************************************************************************/ /*****************************************************************************/
#define Log_PLATFORM_VERSION "SWAD 16.82.1 (2016-12-02)" #define Log_PLATFORM_VERSION "SWAD 16.82.2 (2016-12-02)"
#define CSS_FILE "swad16.69.css" #define CSS_FILE "swad16.82.2.css"
#define JS_FILE "swad16.46.1.js" #define JS_FILE "swad16.46.1.js"
// Number of lines (includes comments but not blank lines) has been got with the following command: // Number of lines (includes comments but not blank lines) has been got with the following command:
// nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*?.h sql/swad*.sql | tail -1 // nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*?.h sql/swad*.sql | tail -1
/* /*
Version 16.82.2: Dec 02, 2016 Changes in colors of dates in agenda.
Default order of events in agenda now is "by end date". (209477 lines)
Version 16.82.1: Dec 02, 2016 Changes in another user's agenda. (209450 lines) Version 16.82.1: Dec 02, 2016 Changes in another user's agenda. (209450 lines)
Version 16.82: Dec 02, 2016 New action to show agenda another user's agenda. (209425 lines) Version 16.82: Dec 02, 2016 New action to show agenda another user's agenda. (209425 lines)
10 changes necessary in database: 10 changes necessary in database:

View File

@ -61,6 +61,19 @@ const unsigned Dat_NumDaysMonth[1+12] =
31, // 12: December 31, // 12: December
}; };
const char *Dat_TimeStatusClassVisible[Dat_NUM_TIME_STATUS] =
{
"DATE_RED", // Dat_PAST
"DATE_GREEN", // Dat_PRESENT
"DATE_BLUE", // Dat_FUTURE
};
const char *Dat_TimeStatusClassHidden[Dat_NUM_TIME_STATUS] =
{
"DATE_RED_LIGHT", // Dat_PAST
"DATE_GREEN_LIGHT", // Dat_PRESENT
"DATE_BLUE_LIGHT", // Dat_FUTURE
};
/*****************************************************************************/ /*****************************************************************************/
/***************************** Private prototypes ****************************/ /***************************** Private prototypes ****************************/
/*****************************************************************************/ /*****************************************************************************/

View File

@ -69,6 +69,14 @@ struct DateTime
char YYYYMMDDHHMMSS[4+2+2+2+2+2+1]; char YYYYMMDDHHMMSS[4+2+2+2+2+2+1];
}; };
#define Dat_NUM_TIME_STATUS 3
typedef enum
{
Dat_PAST = 0,
Dat_PRESENT = 1,
Dat_FUTURE = 2,
} Dat_TimeStatus_t;
/*****************************************************************************/ /*****************************************************************************/
/***************************** Public prototypes *****************************/ /***************************** Public prototypes *****************************/
/*****************************************************************************/ /*****************************************************************************/

View File

@ -410,7 +410,7 @@ struct Globals
bool LstIsRead; // Is the list already read from database, or it needs to be read? bool LstIsRead; // Is the list already read from database, or it needs to be read?
unsigned Num; // Number of events unsigned Num; // Number of events
long *LstAgdCods; // List of agenda codes long *LstAgdCods; // List of agenda codes
Loc_Order_t SelectedOrderType; Agd_Order_t SelectedOrderType;
long AgdCodToEdit; // Used as parameter in contextual links long AgdCodToEdit; // Used as parameter in contextual links
} Agenda; } Agenda;
struct struct