evangeo/tickets

dev-master 2023-12-05 13:30 UTC

README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

Introduction

The Laravel Ticket Support Backend Package is a specialized solution for managing customer support requests and streamlining the back-end processes of your support system. This package is designed to empower your support team by providing the necessary tools for efficient ticket handling and resolution.

Installation

You can install the package via composer:

composer require evangeo/tickets

You can publish and run the migrations with:

php artisan vendor:publish --tag="tickets-migrations"
php artisan migrate

You can publish the config file with:

php artisan vendor:publish --tag="tickets-config"

Tables

Ticket Table Structure

Ticket Responses Table Structure

Ticket Attachment Table Structure

Ticket Category / Internal Group / Tags Table Structure

Ticket Tags Pivot Table Structure

Usage

  • Create Ticket as User
$ticket = ticket()->createAsUser($userId, $ticketData)
  • Create Ticket as Entity
$ticket = ticket()->createAsEntity($entityId, $ticketData)
  • Interact With Ticket Status
$ticket->reOpen()
        ->open()
        ->archived()
  • Interact With Ticket Category
$ticket->setCategory($id)
        ->removeCategory()
  • Interact With Ticket Internal Group
$ticket->setInternalGroup($id)
        ->removeInternalGroup()
  • Interact With Ticket Tags
$ticket->attachTags([$tagId1,$tagId2,$tagId3])
       ->detachTags([$tagId1])
       ->syncTags([$tagId4, $tagId5, $tagId6])
  • Create Ticket Response
$reponse = $ticket->replyAsUser($userId, $responseData)

$reponse = $ticket->replyAsEntity($entityId, $responseData)
  • Interact with Response Message Type
$response->markAsInternalMessage()
         ->markAsExternalMessage()
  • Upload Documents on Responses
$response->attachDocuments($attachments, function (AttachmentRepository $repository) use ($uploads){
                $repository->upload($uploads, '/path/to/folder');
            })
  • Chainable Functions
$ticket = ticket()
            ->createAsUser($userId, $ticketData)
            ->setCategory($categoryId
            ->setInternalGroup($internalGroupId
            ->attachTags([$tagId1,$tagId2,$tagId3])
            ->detachTags([$tagId1])
            ->syncTags([$tagId4, $tagId5, $tagId6])
            ->reOpen()
            ->open()
            ->archived()
            ->replyAsUser($userId, $responseData)
            ->markAsInternalMessage()
            ->attachDocuments($attachments, function (AttachmentRepository $repository) use ($uploads){
                $repository->upload($uploads, '/path/to/folder');
            })
            ->getTicket();
  • A real Scenario
$ticket = ticket()
            ->createAsUser($userId, $ticketData)
            ->replyAsUser($userId, $responseData)
            ->markAsInternalMessage()
            ->attachDocuments($attachments, function (AttachmentRepository $repository) use ($uploads){
                $repository->upload($uploads, '/path/to/folder');
            })
            ->getTicket();

Testing

composer test