Example #1
0
 /**
  * Get overall ticket status for each tester
  *
  * @param $plan
  * @param $testers
  * @param null $model
  * @return mixed
  */
 public function getTestersTicketsStatus($plan, $testers, $model = null)
 {
     $totalBrowsers = 0;
     $allStatus = [];
     foreach ($testers as $eachTester) {
         // Total of assigned browsers
         $totalBrowsersToTest = count(explode(',', $eachTester->browsers));
         // Overall count of all browsers for each tester
         $totalBrowsers += $totalBrowsersToTest;
         // Responses and total
         $responses = $eachTester->tickets()->where('plan_id', '=', $plan->id)->get();
         $totalResponses = count($responses);
         // If total responses already doesn't match, no need to continue further,
         // status is still new
         if ($totalResponses != $totalBrowsersToTest) {
             $allStatus[] = 'new';
             continue;
         }
         // Don't need to check each status, just get the last outcome
         foreach ($responses as $ticket) {
             $allStatus[] = $ticket->status;
         }
     }
     $overallStatus = Tools::getOverallStatus($allStatus, $totalBrowsers);
     $plan->update(['status' => $overallStatus]);
     if ($model == 'single') {
         $results['status'] = $overallStatus;
     } else {
         $results = $plan->description;
     }
     return $results;
 }
 /**
  * Save tester's ticket responses
  *
  * @param $planData
  * @return string
  */
 public function saveResponse($planData)
 {
     $totalTickets = count($planData['tickets_responses']);
     $allStatus = [];
     $redirect = false;
     $errorMsg = '';
     DB::beginTransaction();
     try {
         // Determine ticket status
         foreach ($planData['tickets_responses'] as $browser => $rows) {
             $totalRows = count($rows['tickets']);
             $completed = 0;
             $incomplete = 0;
             foreach ($rows['tickets'] as $ticket) {
                 if (!isset($ticket['test_status'])) {
                     $incomplete += 1;
                 } else {
                     $completed += 1;
                 }
             }
             if ($incomplete == $totalRows) {
                 $ticketStatus = 'new';
             } elseif ($completed == $totalRows) {
                 if ($rows['ticket_status'] == 'complete' && $ticket['original_data'] == 'modified') {
                     $ticketStatus = 'update';
                 } else {
                     $ticketStatus = 'complete';
                 }
             } else {
                 $ticketStatus = 'progress';
             }
             // Collect status for every tickets
             $allStatus[] = $ticketStatus;
             // Create or update ticket response
             $this->model->updateOrCreate(['id' => $rows['ticket_resp_id']], ['plan_id' => $planData['plan_id'], 'tester_id' => $planData['tester_id'], 'browser' => $browser, 'responses' => serialize($rows['tickets']), 'status' => $ticketStatus]);
         }
     } catch (\Exception $e) {
         $errorMsg = $e->getMessage();
         $redirect = true;
     } catch (ValidationException $e) {
         $errorMsg = $e->getErrors();
         $redirect = true;
     } catch (QueryException $e) {
         $errorMsg = $e->getErrors();
         $redirect = true;
     } catch (ModelNotFoundException $e) {
         $errorMsg = $e->getErrors();
         $redirect = true;
     }
     // Redirect if errors
     if ($redirect) {
         // Rollback
         DB::rollback();
         // Log to system
         Tools::log($errorMsg, $planData);
         return false;
     }
     // Commit all changes
     DB::commit();
     $results = Tools::getOverallStatus($allStatus, $totalTickets);
     return $results;
 }