189 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			189 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
"""Submit task command."""
 | 
						|
 | 
						|
import logging
 | 
						|
 | 
						|
from webex_bot.models.command import Command
 | 
						|
from webex_bot.models.response import Response, response_from_adaptive_card
 | 
						|
from webexpythonsdk.models.cards import (AdaptiveCard, Column, ColumnSet, Date,
 | 
						|
                                         FontSize, FontWeight, Text, TextBlock)
 | 
						|
from webexpythonsdk.models.cards.actions import Submit
 | 
						|
 | 
						|
from app.utils.config import config
 | 
						|
from app.utils.n8n import get_tasks, submit_task
 | 
						|
 | 
						|
log: logging.Logger = logging.getLogger(__name__)
 | 
						|
 | 
						|
 | 
						|
class SubmitTaskCommand(Command):
 | 
						|
    """Submit task command."""
 | 
						|
 | 
						|
    def __init__(self) -> None:
 | 
						|
        """Submit task command."""
 | 
						|
        super().__init__(
 | 
						|
            command_keyword="submit_feedback_dstgmyn",
 | 
						|
            help_message="Submit Task",
 | 
						|
            chained_commands=[SubmitTaskCallback(), MyTasksCallback()],
 | 
						|
            delete_previous_message=True,
 | 
						|
        )
 | 
						|
        self.sender: str = ""
 | 
						|
 | 
						|
    def pre_execute(self, message, attachment_actions, activity) -> None:
 | 
						|
        """Pre-execute method."""
 | 
						|
        self.sender = activity.get("actor").get("id")
 | 
						|
 | 
						|
    def execute(self, message, attachment_actions, activity) -> Response:
 | 
						|
        """Execute method."""
 | 
						|
        card_body: list = [
 | 
						|
            ColumnSet(
 | 
						|
                columns=[
 | 
						|
                    Column(
 | 
						|
                        items=[
 | 
						|
                            TextBlock(
 | 
						|
                                "Submit Task",
 | 
						|
                                weight=FontWeight.BOLDER,
 | 
						|
                                size=FontSize.MEDIUM,
 | 
						|
                            ),
 | 
						|
                            TextBlock(
 | 
						|
                                f"Add a task to {config.admin_first_name}'s To Do list. "
 | 
						|
                                + "All fields are required. Please don't use special characters.",
 | 
						|
                                wrap=True,
 | 
						|
                                isSubtle=True,
 | 
						|
                            ),
 | 
						|
                        ],
 | 
						|
                        width=2,
 | 
						|
                    )
 | 
						|
                ]
 | 
						|
            ),
 | 
						|
            ColumnSet(
 | 
						|
                columns=[
 | 
						|
                    Column(
 | 
						|
                        width=2,
 | 
						|
                        items=[
 | 
						|
                            Text(
 | 
						|
                                id="issue_title", placeholder="Summary", maxLength=100
 | 
						|
                            ),
 | 
						|
                            Text(
 | 
						|
                                id="issue_description",
 | 
						|
                                placeholder="Description",
 | 
						|
                                maxLength=1000,
 | 
						|
                                isMultiline=True,
 | 
						|
                            ),
 | 
						|
                            Date(id="completion_date", placeholder="Completion Date"),
 | 
						|
                        ],
 | 
						|
                    ),
 | 
						|
                ]
 | 
						|
            ),
 | 
						|
        ]
 | 
						|
 | 
						|
        if self.sender in config.admin_emails:
 | 
						|
            card_body.append(
 | 
						|
                ColumnSet(
 | 
						|
                    columns=[
 | 
						|
                        Column(
 | 
						|
                            width=1,
 | 
						|
                            items=[
 | 
						|
                                Text(
 | 
						|
                                    id="issue_requester",
 | 
						|
                                    placeholder="Requester Email "
 | 
						|
                                    + "(leave blank to submit for yourself)",
 | 
						|
                                    maxLength=100,
 | 
						|
                                ),
 | 
						|
                            ],
 | 
						|
                        ),
 | 
						|
                    ]
 | 
						|
                ),
 | 
						|
            )
 | 
						|
 | 
						|
        card: AdaptiveCard = AdaptiveCard(
 | 
						|
            body=card_body,
 | 
						|
            actions=[
 | 
						|
                Submit(
 | 
						|
                    title="Submit",
 | 
						|
                    data={
 | 
						|
                        "callback_keyword": "submit_task_callback_rbamzfyx",
 | 
						|
                        "sender": self.sender,
 | 
						|
                    },
 | 
						|
                ),
 | 
						|
                Submit(
 | 
						|
                    title="My Submitted Tasks",
 | 
						|
                    data={
 | 
						|
                        "callback_keyword": "my_tasks_callback_rbamzfyx",
 | 
						|
                        "sender": self.sender,
 | 
						|
                    },
 | 
						|
                ),
 | 
						|
                Submit(title="Cancel", data={"command_keyword": "exit"}),
 | 
						|
            ],
 | 
						|
        )
 | 
						|
        _result = response_from_adaptive_card(card)
 | 
						|
        return _result
 | 
						|
 | 
						|
 | 
						|
class SubmitTaskCallback(Command):
 | 
						|
    """Submit task callback."""
 | 
						|
 | 
						|
    def __init__(self) -> None:
 | 
						|
        """Submit task callback."""
 | 
						|
        super().__init__(
 | 
						|
            card_callback_keyword="submit_task_callback_rbamzfyx",
 | 
						|
            delete_previous_message=True,
 | 
						|
        )
 | 
						|
        self.msg: str = ""
 | 
						|
 | 
						|
    def pre_execute(self, message, attachment_actions, activity) -> None:
 | 
						|
        """Pre-execute method."""
 | 
						|
        issue_title: str = attachment_actions.inputs.get("issue_title")
 | 
						|
        issue_description: str = attachment_actions.inputs.get("issue_description")
 | 
						|
        completion_date: str = attachment_actions.inputs.get("completion_date")
 | 
						|
 | 
						|
        sender: str = attachment_actions.inputs.get("sender")
 | 
						|
        issue_requester: str = (
 | 
						|
            attachment_actions.inputs.get("issue_requester") or sender
 | 
						|
        )
 | 
						|
 | 
						|
        if not issue_title or not issue_description or not completion_date:
 | 
						|
            self.msg = "Please complete all fields."
 | 
						|
            return
 | 
						|
 | 
						|
        result: bool = submit_task(
 | 
						|
            requestor=issue_requester,
 | 
						|
            summary=issue_title,
 | 
						|
            description=issue_description,
 | 
						|
            completion_date=completion_date,
 | 
						|
        )
 | 
						|
 | 
						|
        self.msg = (
 | 
						|
            "Submitting your task..."
 | 
						|
            if result
 | 
						|
            else "Failed to submit task. Please try again."
 | 
						|
        )
 | 
						|
 | 
						|
    def execute(self, message, attachment_actions, activity) -> str:
 | 
						|
        """Execute method."""
 | 
						|
        return self.msg
 | 
						|
 | 
						|
 | 
						|
class MyTasksCallback(Command):
 | 
						|
    """My tasks callback."""
 | 
						|
 | 
						|
    def __init__(self) -> None:
 | 
						|
        """My tasks callback."""
 | 
						|
        super().__init__(
 | 
						|
            card_callback_keyword="my_tasks_callback_rbamzfyx",
 | 
						|
            delete_previous_message=True,
 | 
						|
        )
 | 
						|
        self.msg: str = ""
 | 
						|
 | 
						|
    def pre_execute(self, message, attachment_actions, activity) -> str:
 | 
						|
        """Pre-execute method."""
 | 
						|
        _msg: str = "Getting your tasks..."
 | 
						|
        return _msg
 | 
						|
 | 
						|
    def execute(self, message, attachment_actions, activity) -> str | None:
 | 
						|
        """Execute method."""
 | 
						|
        sender: str = attachment_actions.inputs.get("sender")
 | 
						|
        result: bool = get_tasks(requestor=sender)
 | 
						|
        _msg: str = "Failed to get tasks. Please try again."
 | 
						|
        if not result:
 | 
						|
            return _msg
 | 
						|
        return None
 |