Coding-with-Adam / response-reporting-dashboard

4 stars 1 forks source link

Internal Page #1

Open Coding-with-Adam opened 5 months ago

Coding-with-Adam commented 5 months ago

Things we need to accomplish and have in the internal.py page.

Coding-with-Adam commented 5 months ago

@JorgeMiguelGomes I'd like to try and clarify the screenshot field process.

I'll add that field to the grid right now. It will be similar to the already existing URL field in the grid, and we will use it to insert the link of the screenshot.

However, what will the process of taking the screenshot look like? Can you share more about this please. For example, would this be the process?

  1. a vetted volunteer goes on social media X platform
  2. she/he flags a post as spam and take a screenshot of the post
  3. the screenshot is loaded to VOST servers. (how?)
  4. the vetted volunteer pulls the link from the server and adds it to the grid -- under the screenshot column
Coding-with-Adam commented 5 months ago

@tomahock , @JorgeMiguelGomes Is the first column (timestamp field) in the csv sheets a date that the vetted volunteer inserts or a date that is automatically created (stamped) when the row is created?
For now, I limited it to timestamp being automatically created when row is created.

Coding-with-Adam commented 5 months ago

Hi @Moh-Ozzi Regarding your comment about pagination and add row button, I started taking a look at it. I also wrote you on the charming data platform.

This clientside callback still needs to be modified, but it's a good first draft solution to move user to the end of the grid once the add-row button is clicked (I used this doc example). Right now, I manually set n=99, which is not ideal.

So we have to figure out a way in JS to grab the last existing row in the grid instead.

clientside_callback(
    """function (n) {
        if (n) {
            n = 99
            grid = dash_ag_grid.getApi("reports-table")        
            rowIndex = grid.getRowNode(n).rowIndex        
            pageTarget = Math.floor(rowIndex / grid.paginationGetPageSize())
            grid.paginationGoToPage(pageTarget)
        }
        return {"rowId": n.toString()}
    }""",
    Output("reports-table", "scrollTo"),
    Input("add-row-btn", "n_clicks"),
    prevent_initial_call=True,
)
JorgeMiguelGomes commented 5 months ago

Hi Adam, we were thinking about using the dcc upload component. https://dash.plotly.com/dash-core-components/upload

[image: VOST - Voluntários Digitais em Situações de Emergência]

Jorge Gomes Coordenador Nacional /

National Coordinator

M: +351 933 940 547

TW: @vostpt https://twitter.com/vostpt IG: @vostpt https://instagram.com/vostpt FB: VOST Portugal https://facebook.com/vostpt W: www.vost.pt

VOST PORTUGAL - Associação de Voluntários Digitais em Situações de Emergência

NIPC: 515697575 | PIC:898974952 | REGISTO IRN:841/2019

Confidencialidade: Esta mensagem (e eventuais ficheiros anexos) é destinada exclusivamente às pessoas nela indicadas e tem natureza confidencial. Se receber esta mensagem por engano, por favor contacte o remetente e elimine a mensagem e ficheiros, sem tomar conhecimento do respectivo conteúdo e sem reproduzi-la ou divulgá-la. Confidentiality Warning: This e-mail message (and any attached files) is confidential and is intended solely for the use of the individual or entity to whom it is addressed. lf you are not the intended recipient of this message please notify the sender and delete and destroy all copies immediately.

On Sun, 7 Apr 2024 at 20:46, Adam @.***> wrote:

@JorgeMiguelGomes https://github.com/JorgeMiguelGomes I'd like to try and clarify the screenshot field process.

I'll add that field to the grid right now. It will be similar to the already existing URL field in the grid, and we will use it to insert the link of the screenshot.

However, what will the process of taking the screenshot look like? Can you share more about this please. For example, would this be the process?

  1. a vetted volunteer goes on social media X platform
  2. she/he flags a post as spam and take a screenshot of the post
  3. the screenshot is loaded to VOST servers. (how?)
  4. the vetted volunteer pulls the link from the server and adds it to the grid -- under the screenshot column

— Reply to this email directly, view it on GitHub https://github.com/Coding-with-Adam/response-reporting-dashboard/issues/1#issuecomment-2041542718, or unsubscribe https://github.com/notifications/unsubscribe-auth/AIGDRCKALBPVCFX35MGIQ4DY4GA7PAVCNFSM6AAAAABFRRNAB2VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDANBRGU2DENZRHA . You are receiving this because you were mentioned.Message ID: @.*** com>

-- Confidencialidade: Esta mensagem (e eventuais ficheiros anexos) é destinada exclusivamente às pessoas nela indicadas e tem natureza confidencial. Se receber esta mensagem por engano, por favor contacte o remetente e elimine a mensagem e ficheiros, sem tomar conhecimento do respectivo conteúdo e sem reproduzi-la ou divulgá-la. Confidentiality Warning: This e-mail message (and any attached files) is confidential and is intended solely for the use of the individual or entity to whom it is addressed. lf you are not the intended recipient of this message please notify the sender and delete and destroy all copies immediately.

JorgeMiguelGomes commented 5 months ago

Any timestamp should be created by the system,not by the user.

[image: VOST - Voluntários Digitais em Situações de Emergência]

Jorge Gomes Coordenador Nacional /

National Coordinator

M: +351 933 940 547

TW: @vostpt https://twitter.com/vostpt IG: @vostpt https://instagram.com/vostpt FB: VOST Portugal https://facebook.com/vostpt W: www.vost.pt

VOST PORTUGAL - Associação de Voluntários Digitais em Situações de Emergência

NIPC: 515697575 | PIC:898974952 | REGISTO IRN:841/2019

Confidencialidade: Esta mensagem (e eventuais ficheiros anexos) é destinada exclusivamente às pessoas nela indicadas e tem natureza confidencial. Se receber esta mensagem por engano, por favor contacte o remetente e elimine a mensagem e ficheiros, sem tomar conhecimento do respectivo conteúdo e sem reproduzi-la ou divulgá-la. Confidentiality Warning: This e-mail message (and any attached files) is confidential and is intended solely for the use of the individual or entity to whom it is addressed. lf you are not the intended recipient of this message please notify the sender and delete and destroy all copies immediately.

On Sun, 7 Apr 2024 at 20:55, Adam @.***> wrote:

@tomahock https://github.com/tomahock @JorgeMiguelGomes https://github.com/JorgeMiguelGomes Is the first column (timestamp field) in the csv sheets a date that the vetted volunteer inserts or a date that is automatically created (stamped) when the row is created?

— Reply to this email directly, view it on GitHub https://github.com/Coding-with-Adam/response-reporting-dashboard/issues/1#issuecomment-2041544849, or unsubscribe https://github.com/notifications/unsubscribe-auth/AIGDRCPMSE7EJNO3W77YWNTY4GCBTAVCNFSM6AAAAABFRRNAB2VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDANBRGU2DIOBUHE . You are receiving this because you were mentioned.Message ID: @.*** com>

-- Confidencialidade: Esta mensagem (e eventuais ficheiros anexos) é destinada exclusivamente às pessoas nela indicadas e tem natureza confidencial. Se receber esta mensagem por engano, por favor contacte o remetente e elimine a mensagem e ficheiros, sem tomar conhecimento do respectivo conteúdo e sem reproduzi-la ou divulgá-la. Confidentiality Warning: This e-mail message (and any attached files) is confidential and is intended solely for the use of the individual or entity to whom it is addressed. lf you are not the intended recipient of this message please notify the sender and delete and destroy all copies immediately.

supernyv commented 4 months ago

Hi @JorgeMiguelGomes , For the Response Date, if it is a timestamp as well, how do we deal with input of answer date that were yesterday for example, or ten days ago? I'll use the following scenario to illustrate the issue:

  1. A user creates a new report, leaving the response date empty because the platform hasn't responded yet.
  2. A few days later, the user realizes that the platform answered their report the previous day.
  3. The user then tries to update the report on the response reporting platform to include the date of the response, but they can't do that because the response date is a timestamp that is automatically filled
JorgeMiguelGomes commented 3 months ago

Hi @supernyv! Maybe the solution is to have two timestamps:

This way we can also calculate the time it took the platforms to reply.

from datetime import datetime

# Timestamps as strings
timestamp1 = "5/09/2024 4:56:00"
timestamp2 = "5/11/2024 5:44:54"

# Define the date format
date_format = "%m/%d/%Y %H:%M:%S"

# Convert strings to datetime objects
datetime1 = datetime.strptime(timestamp1, date_format)
datetime2 = datetime.strptime(timestamp2, date_format)

# Ensure datetime1 is the earlier timestamp
if datetime1 > datetime2:
    raise ValueError("Timestamp 2 can't be earlier than Timestamp 1")

# Calculate the timedelta
time_difference = datetime2 - datetime1

# Convert timedelta to hours and days
hours_difference = time_difference.total_seconds() / 3600
days_difference = time_difference.days

hours_difference, days_difference

Does this make sense?

supernyv commented 3 months ago

Hi @Jorge,

I get your idea, and it makes perfect sense that we need two timestamps to calculate response time. That way, the previous column named "timestamp" now becomes "open_report_timestamp" and the "answer date" now becomes "close_report_timestamp". However, what I am still worried about is the input method for close_report_timestamp. If it is generated by the app then it can only be a datetime value of the moment the reporting_user tells the app that the report should be closed (now). So, even if the platform (facebook for instance) answered two days ago and the user forgot to close the report for example, the timestamp cannot be the real response date but only the time the report is closed by the user. Is that the desired behavior?

JorgeMiguelGomes commented 3 months ago

While your point is valid we will try to make sure that users don't forget. Also even if they forget they should always use the date they got the email from the platforms with the decision. Does this make sense?

On Sun, May 12, 2024 at 1:48 AM Nyv @.***> wrote:

Hi @jorge https://github.com/jorge,

I get your idea, and it makes perfect sense that we need two timestamps to calculate response time. That way, the previous column named "timestamp" now becomes "open_report_timestamp" and the "answer date" now becomes "close_report_timestamp". However, what I am still worried about is the input method for close_report_timestamp. If it is generated by the app then it can only be a datetime value of the moment the reporting_user tells the app that the report should be closed (now). So, even if the platform (facebook for instance) answered two days ago and the user forgot to close the report for example, the timestamp cannot be the real response date but only the time the report is closed by the user. Is that the desired behavior?

— Reply to this email directly, view it on GitHub https://github.com/Coding-with-Adam/response-reporting-dashboard/issues/1#issuecomment-2106074169, or unsubscribe https://github.com/notifications/unsubscribe-auth/AIGDRCM24J2D4TOVMU3FJVLZB235BAVCNFSM6AAAAABFRRNAB2VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCMBWGA3TIMJWHE . You are receiving this because you were mentioned.Message ID: @.*** com>

--

[image: VOST - Voluntários Digitais em Situações de Emergência]

Jorge Gomes Coordenador Nacional /

National Coordinator

M: +351 933 940 547

TW: @vostpt https://twitter.com/vostpt IG: @vostpt https://instagram.com/vostpt FB: VOST Portugal https://facebook.com/vostpt W: www.vost.pt

VOST PORTUGAL - Associação de Voluntários Digitais em Situações de Emergência

NIPC: 515697575 | PIC:898974952 | REGISTO IRN:841/2019

Confidencialidade: Esta mensagem (e eventuais ficheiros anexos) é destinada exclusivamente às pessoas nela indicadas e tem natureza confidencial. Se receber esta mensagem por engano, por favor contacte o remetente e elimine a mensagem e ficheiros, sem tomar conhecimento do respectivo conteúdo e sem reproduzi-la ou divulgá-la. Confidentiality Warning: This e-mail message (and any attached files) is confidential and is intended solely for the use of the individual or entity to whom it is addressed. lf you are not the intended recipient of this message please notify the sender and delete and destroy all copies immediately.

-- Confidencialidade: Esta mensagem (e eventuais ficheiros anexos) é destinada exclusivamente às pessoas nela indicadas e tem natureza confidencial. Se receber esta mensagem por engano, por favor contacte o remetente e elimine a mensagem e ficheiros, sem tomar conhecimento do respectivo conteúdo e sem reproduzi-la ou divulgá-la. Confidentiality Warning: This e-mail message (and any attached files) is confidential and is intended solely for the use of the individual or entity to whom it is addressed. lf you are not the intended recipient of this message please notify the sender and delete and destroy all copies immediately.

supernyv commented 3 months ago

Alright Jorge,

I'll make updates and post pictures here for your feedback

supernyv commented 3 months ago

Hi @Jorge,

Here are a few updates.

supernyv commented 3 months ago

Pending Update on Git, it should be pushed in a few minutes

JorgeMiguelGomes commented 3 months ago

Hi @supernyv, thank you. - again - for your work on all this. As for the admin menu, it should only be accessible by admin roles, and - yes! - you are right: contributors to the platform need to be approved before being allowed in, as we don't want the platform to be misused in any way.