Hi,
I need to create an interface for timesheet entry. In the interface when I select the month and year the calendar for that month should be displayed in a grid with days (1, 2 ,3 etc) as links so that I can click the link to enter the number of hours worked on that day. How can I acheive this? I need to create this interface in 18.1 version. Thanks in advance.
Discussion posts and replies are publicly visible
Can you tell me the code for this asap
I've avoided using plugins, CDTs and referencing other rules but this works
a!localVariables( local!blankWeekDictionary: { monday: {}, tuesday: {}, wednesday: {}, thursday: {}, friday: {}, saturday: {}, sunday: {} }, local!today: todate(local(now())), local!month: month(local!today), local!year: year(local!today), local!daysInMonth: daysinmonth( local!month, local!year ), local!unsortedMonthData: a!forEach( items: 1 + enumerate(local!daysInMonth), expression: a!localVariables( local!date: date( local!year, local!month, fv!item ), { date: local!date, dayNumberInMonth: fv!item, dayNumberInWeek: weekday( local!date, 2 ), dayName: text(local!date, "dddd") } ) ), local!sortedMonthData: a!forEach( items: 1 + enumerate(7) /*There are 7 days in a week*/, expression: a!localVariables( local!matchingDayNumberInWeekDetails: index( local!unsortedMonthData, wherecontains( fv!item, tointeger( index( local!unsortedMonthData, "dayNumberInWeek", {} ) ) ), {} ), local!matchingDayNumberInMonth: index( local!matchingDayNumberInWeekDetails, "dayNumberInMonth", {} ), local!matchingDayNumberInMonth ) ), reduce( a!update, local!blankWeekDictionary, merge( { "monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday" }, local!sortedMonthData ) ) )
Thnxx
hey I need your help.
Below is my code . Using this expression i want to display calendar . I am facing problem in displaying .
If you can correct my code ...I will be very thank full .
a!localVariables( local!s:weekday(date(ri!y,ri!m,1),1), local!t:daysinmonth(ri!m,ri!y), choose(local!s, if(local!s=1, a!forEach( items:enumerate(daysinmonth(ri!m,ri!y)), expression:{if(text(date(ri!y,ri!m,fv!item+1),"dddd")="Sunday", { sun:if(fv!item+1<local!t+1,fv!item+1,{}), mon:if(fv!item+2<local!t+1,fv!item+2,{}), tues:if(fv!item+3<local!t+1,fv!item+3,{}), wed:if(fv!item+4<local!t+1,fv!item+4,{}), thurs:if(fv!item+5<local!t+1,fv!item+5,{}), fri:if(fv!item+6<local!t+1,fv!item+6,{}), sat:if(fv!item+7<local!t+1,fv!item+7,{}) } ,{})} ),{}), if(local!s=2, a!forEach( items:enumerate(daysinmonth(ri!m,ri!y)), expression:{if(text(date(ri!y,ri!m,fv!item+1),"dddd")="Monday", { mon:if(fv!item+1<local!t+1,fv!item+1,{}), tues:if(fv!item+2<local!t+1,fv!item+2,{}), wed:if(fv!item+3<local!t+1,fv!item+3,{}), thurs:if(fv!item+4<local!t+1,fv!item+4,{}), fri:if(fv!item+5<local!t+1,fv!item+5,{}), sat:if(fv!item+6<local!t+1,fv!item+6,{}), sun:if(fv!item+7<local!t+1,fv!item+7,{}), } ,{})} ),{}), if(local!s=3, a!forEach( items:enumerate(daysinmonth(ri!m,ri!y)), expression:{if(text(date(ri!y,ri!m,fv!item+1),"dddd")="Tuesday", { tues:if(fv!item+1<local!t+1,fv!item+1,{}), wed:if(fv!item+2<local!t+1,fv!item+2,{}), thurs:if(fv!item+3<local!t+1,fv!item+3,{}), fri:if(fv!item+4<local!t+1,fv!item+4,{}), sat:if(fv!item+5<local!t+1,fv!item+5,{}), sun:if(fv!item+6<local!t+1,fv!item+6,{}), mon:if(fv!item+7<local!t+1,fv!item+7,{}), } ,{})} ),{}), if(local!s=4, a!forEach( items:enumerate(daysinmonth(ri!m,ri!y)), expression:{if(text(date(ri!y,ri!m,fv!item+1),"dddd")="Wednesday", { wed:if(fv!item+1<local!t+1,fv!item+1,{}), thurs:if(fv!item+2<local!t+1,fv!item+2,{}), fri:if(fv!item+3<local!t+1,fv!item+3,{}), sat:if(fv!item+4<local!t+1,fv!item+4,{}), sun:if(fv!item+5<local!t+1,fv!item+5,{}), mon:if(fv!item+6<local!t+1,fv!item+6,{}), tues:if(fv!item+7<local!t+1,fv!item+7,{}) } ,{})} ),{}), if(local!s=5, a!forEach( items:enumerate(daysinmonth(ri!m,ri!y)), expression:{if(text(date(ri!y,ri!m,fv!item+1),"dddd")="Thursday", { thurs:if(fv!item+1<local!t+1,fv!item+1,{}), fri:if(fv!item+2<local!t+1,fv!item+2,{}), sat:if(fv!item+3<local!t+1,fv!item+3,{}), sun:if(fv!item+4<local!t+1,fv!item+4,{}), mon:if(fv!item+5<local!t+1,fv!item+5,{}), tues:if(fv!item+6<local!t+1,fv!item+6,{}), wed:if(fv!item+7<local!t+1,fv!item+7,{}), } ,{})} ),{}), if(local!s=6, a!forEach( items:enumerate(daysinmonth(ri!m,ri!y)), expression:{if(text(date(ri!y,ri!m,fv!item+1),"dddd")="Friday", { fri:if(fv!item+1<local!t+1,fv!item+1,{}), sat:if(fv!item+2<local!t+1,fv!item+2,{}), sun:if(fv!item+3<local!t+1,fv!item+3,{}), mon:if(fv!item+4<local!t+1,fv!item+4,{}), tues:if(fv!item+5<local!t+1,fv!item+5,{}), wed:if(fv!item+6<local!t+1,fv!item+6,{}), thurs:if(fv!item+7<local!t+1,fv!item+7,{}) } ,{})} ),{}), if(local!s=7, a!forEach( items:enumerate(daysinmonth(ri!m,ri!y)), expression:{if(text(date(ri!y,ri!m,fv!item+1),"dddd")="Saturday", { sat:if(fv!item+1<local!t+1,fv!item+1,{}), sun:if(fv!item+2<local!t+1,fv!item+2,{}), mon:if(fv!item+3<local!t+1,fv!item+3,{}), tues:if(fv!item+4<local!t+1,fv!item+4,{}), wed:if(fv!item+5<local!t+1,fv!item+5,{}), thurs:if(fv!item+6<local!t+1,fv!item+6,{}), fri:if(fv!item+7<local!t+1,fv!item+7,{}), } ,{})} ),{}),))
How may I help?
According to my code dates are displaying like this. I am not able to improve my code . how can i?
Want to display the result in read only grid
Had a bit of a play and came up with a few options. I ended up re-working the data to make more sense in how a grid would want the data. Again I have avoided using expression rules, CDTs and plugins.
a!localVariables( local!namesOfDaysInWeek: touniformstring( "monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday" ), local!today: todate(local(now())), local!month: month(local!today), local!year: year(local!today), local!daysInMonth: daysinmonth( local!month, local!year ), local!unsortedMonthData: a!forEach( items: 1 + enumerate(local!daysInMonth), expression: a!localVariables( local!date: date( local!year, local!month, fv!item ), { date: local!date, dayNumberInMonth: fv!item, dayNumberInWeek: weekday( local!date, 2 ), dayName: text(local!date, "dddd"), inThisMonth: true } ) ), local!firstDayOfMonthData: index( local!unsortedMonthData, 1, {} ), local!firstDayOfMonthOccursOnDayNumber: tointeger( index( local!firstDayOfMonthData, "dayNumberInWeek", {} ) ), local!firstDayOfMonthDate: todate( index( local!firstDayOfMonthData, "date", {} ) ), local!lastDayOfMonthData: index( reverse(local!unsortedMonthData), 1, {} ), local!lastDayOfMonthOccursOnDayNumber: tointeger( index( local!lastDayOfMonthData, "dayNumberInWeek", {} ) ), local!lastDayOfMonthDate: todate( index( local!lastDayOfMonthData, "date", {} ) ), local!numberOfLastMonthDaysToAddToStart: local!firstDayOfMonthOccursOnDayNumber - 1, local!numberOfNextMonthDaysToAddToEnd: 7 - local!lastDayOfMonthOccursOnDayNumber, local!lastMonthDaysToAddToStart: if( local!numberOfLastMonthDaysToAddToStart = 0, {}, reverse( a!forEach( items: 1 + enumerate(local!numberOfLastMonthDaysToAddToStart), expression: a!localVariables( local!date: local!firstDayOfMonthDate - fv!item, { date: local!date, dayNumberInMonth: day(local!date), dayNumberInWeek: weekday( local!date, 2 ), dayName: text(local!date, "dddd"), inThisMonth: false } ) ) ) ), local!nextMonthDaysToAddToEnd: if( local!numberOfNextMonthDaysToAddToEnd = 0, {}, a!forEach( items: 1 + enumerate(local!numberOfNextMonthDaysToAddToEnd), expression: a!localVariables( local!date: local!lastDayOfMonthDate + fv!item, { date: local!date, dayNumberInMonth: day(local!date), dayNumberInWeek: weekday( local!date, 2 ), dayName: text(local!date, "dddd"), inThisMonth: false } ) ) ), local!fullCalendarListOfDays: a!flatten( { local!lastMonthDaysToAddToStart, local!unsortedMonthData, local!nextMonthDaysToAddToEnd } ), local!lengthOfFullCalendarListOfDays: if( rule!CMN_IsEmpty(local!fullCalendarListOfDays), 0, length(local!fullCalendarListOfDays) ), local!numberOfCalendarRows: tointeger(local!lengthOfFullCalendarListOfDays/7), local!fullCalendarAsArray: a!forEach( items: 1 + enumerate(local!numberOfCalendarRows), expression: a!localVariables( local!calendarRow: index( local!fullCalendarListOfDays, 1 + product(fv!item - 1, 7) + enumerate(7), {} ), a!map( monday: index( local!calendarRow, 1, {} ), tuesday: index( local!calendarRow, 2, {} ), wednesday: index( local!calendarRow, 3, {} ), thursday: index( local!calendarRow, 4, {} ), friday: index( local!calendarRow, 5, {} ), saturday: index( local!calendarRow, 6, {} ), sunday: index( local!calendarRow, 7, {} ) ) ) ), { /*Read only grid using a!gridField() - Annoying that the number of items HAS to show at the bottom*/ a!gridField( label: concat( text(local!today, "mmmm"), " ", local!year ), data: local!fullCalendarAsArray, columns: a!forEach( items: local!namesOfDaysInWeek, expression: a!gridColumn( label: left(proper(fv!item), 2), value: a!localVariables( local!dayData: index( fv!row, fv!item, {} ), local!dayInMonth: index( local!dayData, "dayNumberInMonth", {} ), local!isInThisMonth: toboolean( index( local!dayData, "inThisMonth", {} ) ), a!richTextDisplayField( value: a!richTextItem( text: local!dayInMonth, style: if( local!isInThisMonth, "STRONG", { "PLAIN", "EMPHASIS" } ) ) ) ), align: "CENTER", width: "ICON" ) ), spacing: "DENSE" ), /*Editable grid using a!gridLayout() - Number of items no longer shows at the bottom*/ a!gridLayout( label: concat( text(local!today, "mmmm"), " ", local!year ), headerCells: a!forEach( items: local!namesOfDaysInWeek, expression: a!gridLayoutHeaderCell( label: left(proper(fv!item), 2), align: "CENTER" ) ), columnConfigs: a!forEach( items: local!namesOfDaysInWeek, expression: a!gridLayoutColumnConfig( width: "NARROW" ) ), rows: a!forEach( items: local!fullCalendarAsArray, expression: a!localVariables( local!calendarRowData: fv!item, a!gridRowLayout( contents: { a!forEach( items: local!namesOfDaysInWeek, expression: a!localVariables( local!dayData: index( local!calendarRowData, fv!item, {} ), local!dayInMonth: index( local!dayData, "dayNumberInMonth", {} ), local!isInThisMonth: toboolean( index( local!dayData, "inThisMonth", {} ) ), a!richTextDisplayField( value: a!richTextItem( text: local!dayInMonth, style: if( local!isInThisMonth, "STRONG", { "PLAIN", "EMPHASIS" } ) ), align: "CENTER" ) ) ) } ) ) ), /* data: local!fullCalendarAsArray, columns: a!forEach( items: local!namesOfDaysInWeek, expression: a!gridColumn( label: left(proper(fv!item), 2), value: a!localVariables( local!dayData: index( fv!row, fv!item, {} ), local!dayInMonth: index( local!dayData, "dayNumberInMonth", {} ), local!isInThisMonth: toboolean( index( local!dayData, "inThisMonth", {} ) ), a!richTextDisplayField( value: a!richTextItem( text: local!dayInMonth, style: if( local!isInThisMonth, "STRONG", { "PLAIN", "EMPHASIS" } ) ) ) ), align: "CENTER", width: "ICON" ) ), */ spacing: "DENSE" ), /*Manually created grid using columns and card layouts - Very customizable! Also if using the calendar day as a link you can use the whole card layout as the button*/ a!localVariables( local!headerColor: "#1d3557", local!inMonthColor: "#a8dadc", local!outOfMonthColor: "#f1faee", { a!richTextDisplayField( labelPosition: "COLLAPSED", value: a!richTextItem( text: concat( text(local!today, "mmmm"), " ", local!year ), style: "STRONG" ), align: "CENTER" ), a!columnsLayout( columns: { a!forEach( items: local!namesOfDaysInWeek, expression: a!localVariables( local!labelOfColumn: fv!item, local!columnContents: index( local!fullCalendarAsArray, local!labelOfColumn, {} ), a!columnLayout( contents: { a!cardLayout( contents: { a!richTextDisplayField( labelPosition: "COLLAPSED", value: a!richTextItem( text: left(proper(local!labelOfColumn), 2), style: "STRONG" ), align: "CENTER" ) }, shape: "ROUNDED", marginBelow: "EVEN_LESS", style: local!headerColor ), a!forEach( items: local!columnContents, expression: a!localVariables( local!dayData: fv!item, local!dayInMonth: index( local!dayData, "dayNumberInMonth", {} ), local!isInThisMonth: toboolean( index( local!dayData, "inThisMonth", {} ) ), a!cardLayout( contents: { a!richTextDisplayField( labelPosition: "COLLAPSED", value: a!richTextItem( text: local!dayInMonth, style: if( local!isInThisMonth, "STRONG", { "PLAIN", "EMPHASIS" } ) ), align: "CENTER" ) }, shape: "ROUNDED", marginBelow: "EVEN_LESS", style: if( local!isInThisMonth, local!inMonthColor, local!outOfMonthColor ) ) ) ) }, width: "NARROW" ) ) ) }, spacing: "DENSE" ) } ) } )
send the code plz
Hi @ajhick
May I know what is the content of rule!CMN_IsEmpty(local!fullCalendarListOfDays) in line 128.
thank you very much