def render_footer(self, list_id, item_id, resource, rfields, record):
        """
            Render the card footer (including card action button)

            @param list_id: the HTML ID of the list
            @param item_id: the HTML ID of the item
            @param resource: the S3Resource to render
            @param rfields: the S3ResourceFields to render
            @param record: the record as dict
        """

        T = current.T

        raw = record["_row"]

        button = ""
        actionable = False

        # Check job status
        status = raw["work_job.status"]
        if status == "STARTED":
            button_text = T("Job has started")
        elif status == "COMPLETED":
            button_text = T("Job has been completed")
        elif status == "CANCELLED":
            button_text = T("Job has been cancelled")
        else:
            button_text = ""
            actionable = True

        if actionable:
            if not self.logged_in:
                button = A(T("Login to sign up for this job"),
                           _href = URL(c="default", f="user",
                                       args = ["login"],
                                       vars = {"_next": URL(c="work", f="job",
                                                            args = ["datalist"],
                                                            ),
                                               },
                                       ),
                           _class = "action-btn",
                           )
            else:
                record_id = raw["work_job.id"]
                if record_id in self.current_assignments:
                    button = A("Cancel my assignment",
                               _class="delete-btn-ajax job-cancel",
                               )
                elif status != "ONHOLD":
                    start_date = raw["work_job.start_date"]
                    duration = raw["work_job.duration"]
                    if start_date:
                        # Calculate hours before end of planned time window
                        delta = (start_date - current.request.utcnow)
                        hours = 3600 / (delta.days * 86400 + delta.seconds)
                        hours += duration if duration else 1
                        if hours < 0:
                            # Can no longer sign up
                            actionable = False
                            button_text = T("Job date has passed")
                    if actionable:
                        workers_needed = raw["work_job.workers_max"]
                        if not workers_needed:
                            workers_needed = raw["work_job.workers_min"]
                        workers_assigned = raw["work_job.workers_assigned"]
                        if workers_assigned < workers_needed:
                            button = A(T("Sign me up"),
                                       _class="action-btn job-signup",
                                       )
                        else:
                            actionable = False
                            button_text = T("No more helpers needed")
                else:
                    actionable = False
                    button_text = T("Job is on hold")

        if not actionable:
            button = A(button_text,
                       _class = "action-btn",
                       _disabled = "disabled",
                       )

        return DIV(button, _class="card-footer")

    # ---------------------------------------------------------------------
dataset/ETHPy150Open sahana/eden/modules/s3db/work.py/work_JobListLayout.render_footer/swapped operands of `/`