community-skeleton icon indicating copy to clipboard operation
community-skeleton copied to clipboard

UVDesk - unable to view/assign some tickets

Open Niijimasama opened this issue 9 months ago • 7 comments

Bug report

I am unable to assign or view some tickets. Switching from prod to dev mode shows the error "Impossible to access as attribute("createdAt") on a null variable. See image below:

uvdesk issue

Check on the database shows the tickets are generated (via RefereshMailbox Command) correctly. No errors on ticket generation. Please help.

UVDesk Version v1.1.3; Core Version v1.1.4

Niijimasama avatar Apr 25 '24 03:04 Niijimasama

Found my problem.

Tickets were being generated successfully but initial threads were not generated in the database.

Current solution has been to identify the tickets and manually create threads for them in the database table.

Niijimasama avatar Apr 26 '24 11:04 Niijimasama

I also have this issue, is there any permanent fix for this?

Juan-DesignStudio avatar Jun 10 '24 19:06 Juan-DesignStudio

Not yet. If occurs because in the Mailbox Service does not have the exception to handle a situation where the ticket header is generated but the thread is not. I have created a program outside of UVDesk to handle this but it is not yet perfect. It can fetch the emails but not the images in the email, and no attachments yet. It also requires configuration and a cron job. I can share that if you want.

Niijimasama avatar Jun 11 '24 12:06 Niijimasama

Thanks, but I looked more into it and I think I was able to fix it you can test it out on your own if you want on the file /vendor/uvdesk/core-framework/Services/TicketService.php 287 function CreateThread

this line is the problem $collaboratorEmails = array_merge(!empty($threadData['cccol']) ? $threadData['cccol'] : [], !empty($threadData['cc']) ? $threadData['cc'] : []);

I did it like this because of testing but if you replace that with this $collaboratorEmails = [];

    //check if $threadData['cc'] is not empty then merge it with $collaboratorEmails
    if (!empty($threadData['cc'])) {
        //check if $threadData['cc'] is an array if not make it an array 
        if (!is_array($threadData['cc'])) {
            $threadData['cc'] = [$threadData['cc']];
        }

        $collaboratorEmails = array_merge($collaboratorEmails, $threadData['cc']);
    }

    //check if $threadData['cccol'] is not empty 
    if (!empty($threadData['cccol'])) {
        //check if $threadData['cccol'] is an array if not make it an array 
        if (!is_array($threadData['cccol'])) {
            $threadData['cccol'] = [$threadData['cccol']];
        }
        $collaboratorEmails = array_merge($collaboratorEmails, $threadData['cccol']);
    }

It should work

Juan-DesignStudio avatar Jun 13 '24 05:06 Juan-DesignStudio

This is great, and thank you. I will definitely try it. My initial approach was to try and modify the mailbox service i.e. /vendor/uvdesk/mailbox-component/Services/MailboxService.php 453

I thought of capturing the exception at this point but all I could come up with was a message to show that the "bug" was occurring here. Ichanged it from:

if (!empty($thread)) {
                // Thread with the same message id exists skip process.
                return [
                    'message' => "Thread with the same message id exists I.",
                    'content' => [
                        'from' => !empty($mailData['from']) ? $mailData['from'] : null,
                        'thread' => $thread->getId(),
                        'ticket' => $ticket->getId(),
                    ],
                ];
            }

to

if (!empty($thread)) {
                // Thread with the same message id exists skip process.
                return [
                    'message' => "Thread with the same message id exists I.",
                    'content' => [
                        'from' => !empty($mailData['from']) ? $mailData['from'] : null,
                        'thread' => $thread->getId(),
                        'ticket' => $ticket->getId(),
                    ],
                ];
            } else {
                // if ticket is not empty but thread is empty 
                $mailData['threadType'] = 'create';
                $mailData['referenceIds'] = $mailData['messageId'];
                $thread->getCreatedBy() == 'customer';
                
                return [
                    'message' => "I fall here.",
                    'content' => [
                        'from' => !empty($mailData['from']) ? $mailData['from'] : null,
                        'thread' => !empty($thread) ? $thread->getId() : null,
                        'ticket' => !empty($ticket) ? $ticket->getId() : null,
                    ],
                ];
                
            }

Will test and give you feedback in 2 days.

Niijimasama avatar Jun 13 '24 06:06 Niijimasama

5 day feedback: Issues has disappeared so far. No childless tickets. Will give further feedback on/by 22nd June 2024 after a larger test dataset.

Niijimasama avatar Jun 18 '24 06:06 Niijimasama

25th June 2024, issue has completely disappeared so far.

Niijimasama avatar Jun 25 '24 07:06 Niijimasama