/** * 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; }