Workflow: Manual Markdown Create

Workflow Details

Download Workflow
{
    "nodes": [
        {
            "name": "On clicking 'execute'",
            "type": "n8n-nodes-base.manualTrigger",
            "position": [
                120,
                560
            ],
            "parameters": [],
            "typeVersion": 1
        },
        {
            "name": "SortElements",
            "type": "n8n-nodes-base.itemLists",
            "position": [
                480,
                560
            ],
            "parameters": {
                "options": [],
                "operation": "sort",
                "sortFieldsUi": {
                    "sortField": [
                        {
                            "fieldName": "UserName"
                        },
                        {
                            "fieldName": "TaskTitle"
                        },
                        {
                            "fieldName": "date"
                        }
                    ]
                }
            },
            "typeVersion": 1
        },
        {
            "name": "Markdown",
            "type": "n8n-nodes-base.markdown",
            "position": [
                1340,
                580
            ],
            "parameters": {
                "mode": "markdownToHtml",
                "options": {
                    "tables": true,
                    "noHeaderId": true,
                    "rawHeaderId": false,
                    "simpleLineBreaks": true,
                    "customizedHeaderId": false,
                    "completeHTMLDocument": true
                },
                "markdown": "={{$json[\"mdreport\"]}}"
            },
            "typeVersion": 1
        },
        {
            "name": "CreateMDReport",
            "type": "n8n-nodes-base.function",
            "position": [
                1160,
                580
            ],
            "parameters": {
                "functionCode": "\/\/ created report header and custom table style\nvar md_reporthead=\"#Timesheet report\\n\";\nvar md_style =  (`\n<style> table {border: 0.5px solid; border-spacing: 0px;}\n        table th {border-bottom: 0.5px solid;}\n        table thead {background: #D0E4F5;}\n        table tr:nth-child(even) { background: #D8D8D8;}\n<\/style>\\n\\n`);\n\nvar md_reportbody=md_style+md_reporthead;\n\n\/\/declare several variables that are used for report generation\nvar tablehead = \"| Date | Hours | Task Description |\\n|:---|:---:|---|\\n\";\n\nvar cur_user=\"\";\nvar cur_usernum=0;\n\nvar cur_task=\"\";\nvar cur_tasktotal=0;\n\n\nfor (item of items) {\n  \n  \/\/ Check if new user\n  if (item.json.UserName != cur_user) {\n    \/\/ Close previous user's task\n    md_reportbody += (cur_tasktotal) ? \"\\n*\"+cur_tasktotal.toFixed(2)+\" - Total hours for this task*\\n\" : \"\";\n    cur_tasktotal = 0; cur_task=\"\";\n\n    \/\/ add new user and embed avatar as base64 image\n    cur_user = item.json.UserName;\n    md_reportbody += `\\n##![img](data:image\/png;base64,${items[cur_usernum].binary.data.data}) ${cur_user}\\n`;\n    cur_usernum   += 1;\n  } \/\/ Check for new user - ENDIF\n\n\n  \/\/ Check if new task\n  if (item.json.TaskTitle != cur_task) {\n\n    \/\/ if not empty task - add total amount of hours for *previous* task\n    md_reportbody += (cur_tasktotal) ? `\\n*${cur_tasktotal.toFixed(2)} - Total hours for this task*\\n` : \"\";\n\n    \/\/ Add new task header and reset total hours counter\n    cur_task = item.json.TaskTitle;\n    md_reportbody += `\\n###${cur_task}\\n${tablehead}`;\n    cur_tasktotal = 0;\n  } \/\/ Check for new task - ENDIF\n\n  \/\/ Add current task + update total hours\n   md_reportbody += `| ${item.json.date.split('T',1)} | ${item.json.hours.toFixed(2)} | ${item.json.note} |\\n`;\n   cur_tasktotal += item.json.hours;\n}\n\n\/\/ Let's not forget the last task's total hours:\nmd_reportbody += (cur_tasktotal) ? `\\n*${cur_tasktotal.toFixed(2)} - Total hours for this task*\\n` : \"\";\n\n\/\/ Finalise the report\nmd_reportbody += `\\n*Timesheet report generated on: ${$now.toISODate()}*`;\nmd_reporthead += \"\\n\";\n\nreturn [{mdreport: md_reportbody}];"
            },
            "typeVersion": 1
        },
        {
            "name": "Send Email",
            "type": "n8n-nodes-base.emailSend",
            "disabled": true,
            "position": [
                1760,
                580
            ],
            "parameters": {
                "options": {
                    "allowUnauthorizedCerts": false
                },
                "subject": "TimeSheet report",
                "attachments": "data"
            },
            "credentials": {
                "smtp": {
                    "id": "2",
                    "name": "info@stats.consult"
                }
            },
            "typeVersion": 1
        },
        {
            "name": "GetImg",
            "type": "n8n-nodes-base.itemLists",
            "position": [
                640,
                760
            ],
            "parameters": {
                "compare": "selectedFields",
                "options": {
                    "removeOtherFields": true
                },
                "operation": "removeDuplicates",
                "fieldsToCompare": {
                    "fields": [
                        {
                            "fieldName": "UserAvatar"
                        }
                    ]
                }
            },
            "typeVersion": 1
        },
        {
            "name": "ImgBinary",
            "type": "n8n-nodes-base.httpRequest",
            "position": [
                820,
                760
            ],
            "parameters": {
                "url": "={{$json[\"UserAvatar\"]}}",
                "options": [],
                "responseFormat": "file"
            },
            "typeVersion": 2
        },
        {
            "name": "Merge2",
            "type": "n8n-nodes-base.merge",
            "position": [
                980,
                580
            ],
            "parameters": {
                "join": "outer",
                "mode": "mergeByIndex"
            },
            "typeVersion": 1
        },
        {
            "name": "Move Binary Data1",
            "type": "n8n-nodes-base.moveBinaryData",
            "position": [
                1520,
                580
            ],
            "parameters": {
                "mode": "jsonToBinary",
                "options": {
                    "fileName": "report.html",
                    "mimeType": "text\/html",
                    "useRawData": true
                },
                "convertAllData": false
            },
            "typeVersion": 1
        },
        {
            "name": "GetTimesheetRecords",
            "type": "n8n-nodes-base.function",
            "position": [
                300,
                560
            ],
            "parameters": {
                "functionCode": "return [{UserName: \"User 1 - Lead Programmer\",\n         UserAvatar: \"https:\/\/www.gravatar.com\/avatar\/?d=robohash&s=32\",\n         TaskTitle: \"Admin\",\n         date: \"2022-05-31T00:00:00.0000000+02:00\",\n         note: \"Creating invoices and submitting timesheets\",\n         hours: 0.5},\n         {UserName: \"User 1 - Lead Programmer\",\n         UserAvatar: \"https:\/\/www.gravatar.com\/avatar\/?d=robohash&s=32\",\n         TaskTitle: \"Admin\",\n         date: \"2022-05-02T00:00:00.0000000+02:00\",\n         note: \"Reporting last month's activity\",\n         hours: 0.5},\n         {UserName: \"User 2 - Designer\",\n         UserAvatar: \"https:\/\/www.gravatar.com\/avatar\/?d=identicon&s=32\",\n         TaskTitle: \"Admin\",\n         date: \"2022-05-30T00:00:00.0000000+02:00\",\n         note: \"Filling timesheets\",\n         hours: 0.5},\n         {UserName: \"User 2 - Designer\",\n         UserAvatar: \"https:\/\/www.gravatar.com\/avatar\/?d=identicon&s=32\",\n         TaskTitle: \"Admin\",\n         date: \"2022-05-03T00:00:00.0000000+02:00\",\n         note: \"Monthly retro meeting\",\n         hours: 0.5},\n         {UserName: \"User 1 - Lead Programmer\",\n         UserAvatar: \"https:\/\/www.gravatar.com\/avatar\/?d=robohash&s=32\",\n         TaskTitle: \"Client 1\",\n         date: \"2022-05-26T00:00:00.0000000+02:00\",\n         note: \"Weekly meeting\",\n         hours: 0.5},\n         {UserName: \"User 1 - Lead Programmer\",\n         UserAvatar: \"https:\/\/www.gravatar.com\/avatar\/?d=robohash&s=32\",\n         TaskTitle: \"Client 1\",\n         date: \"2022-05-05T00:00:00.0000000+02:00\",\n         note: \"Weekly meeting\",\n         hours: 0.5},\n         {UserName: \"User 1 - Lead Programmer\",\n         UserAvatar: \"https:\/\/www.gravatar.com\/avatar\/?d=robohash&s=32\",\n         TaskTitle: \"Client 1\",\n         date: \"2022-05-19T00:00:00.0000000+02:00\",\n         note: \"Weekly meeting\",\n         hours: 0.5},\n         {UserName: \"User 1 - Lead Programmer\",\n         UserAvatar: \"https:\/\/www.gravatar.com\/avatar\/?d=robohash&s=32\",\n         TaskTitle: \"Client 1\",\n         date: \"2022-05-12T00:00:00.0000000+02:00\",\n         note: \"Weekly meeting\",\n         hours: 0.5},\n         {UserName: \"User 1 - Lead Programmer\",\n         UserAvatar: \"https:\/\/www.gravatar.com\/avatar\/?d=robohash&s=32\",\n         TaskTitle: \"Client 1\",\n         date: \"2022-05-12T00:00:00.0000000+02:00\",\n         note: \"Programmed new feature\",\n         hours: 4.5},\n         {UserName: \"User 1 - Lead Programmer\",\n         UserAvatar: \"https:\/\/www.gravatar.com\/avatar\/?d=robohash&s=32\",\n         TaskTitle: \"Client 1\",\n         date: \"2022-05-02T00:00:00.0000000+02:00\",\n         note: \"Updated this and that\",\n         hours: 2.75},\n         {UserName: \"User 2 - Designer\",\n         UserAvatar: \"https:\/\/www.gravatar.com\/avatar\/?d=identicon&s=32\",\n         TaskTitle: \"Client 2\",\n         date: \"2022-05-13T00:00:00.0000000+02:00\",\n         note: \"Designed a new report template\",\n         hours: 6.5},\n         {UserName: \"User 2 - Designer\",\n         UserAvatar: \"https:\/\/www.gravatar.com\/avatar\/?d=identicon&s=32\",\n         TaskTitle: \"Client 2\",\n         date: \"2022-05-23T00:00:00.0000000+02:00\",\n         note: \"Presented the results\",\n         hours: 1.5}\n         ];"
            },
            "typeVersion": 1
        }
    ],
    "connections": {
        "GetImg": {
            "main": [
                [
                    {
                        "node": "ImgBinary",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Merge2": {
            "main": [
                [
                    {
                        "node": "CreateMDReport",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Markdown": {
            "main": [
                [
                    {
                        "node": "Move Binary Data1",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "ImgBinary": {
            "main": [
                [
                    {
                        "node": "Merge2",
                        "type": "main",
                        "index": 1
                    }
                ]
            ]
        },
        "SortElements": {
            "main": [
                [
                    {
                        "node": "GetImg",
                        "type": "main",
                        "index": 0
                    },
                    {
                        "node": "Merge2",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "CreateMDReport": {
            "main": [
                [
                    {
                        "node": "Markdown",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Move Binary Data1": {
            "main": [
                [
                    {
                        "node": "Send Email",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "GetTimesheetRecords": {
            "main": [
                [
                    {
                        "node": "SortElements",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "On clicking 'execute'": {
            "main": [
                [
                    {
                        "node": "GetTimesheetRecords",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        }
    }
}
Back to Workflows

Related Workflows

Create a user profile in Vero
View
The Ultimate Guide to Optimize WordPress Blog Posts with AI
View
Code Schedule Create Scheduled
View
Mattermost Workflow Automate Webhook
View
Wait Splitout Create Webhook
View
HTTP Gitlab Automation Webhook
View
Respondtowebhook Stickynote Create Webhook
View
puq-docker-influxdb-deploy
View
RAG on living data
View
Translate Telegram audio messages with AI (55 supported languages) v1
View