2024-07-22 14:17:00 +02:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
|
|
|
|
use DateTime;
|
|
|
|
|
|
|
|
class IssueValidationController extends Controller
|
|
|
|
{
|
|
|
|
public function __construct()
|
|
|
|
{}
|
|
|
|
|
2024-08-14 13:52:30 +02:00
|
|
|
function date_to_datetime(string $date)
|
2024-07-22 14:17:00 +02:00
|
|
|
{
|
|
|
|
$date = str_replace('/', '-', $date);
|
|
|
|
$datetime = new DateTime($date);
|
|
|
|
|
|
|
|
return $datetime->format('Y-m-d H:i:s');
|
|
|
|
}
|
|
|
|
|
2024-09-05 17:09:42 +02:00
|
|
|
function search_requested_by_and_kind_bug($issue_labels){
|
|
|
|
$kind_requested_by = false;
|
2024-07-22 14:17:00 +02:00
|
|
|
foreach ($issue_labels as $key => $label) {
|
2024-09-05 17:09:42 +02:00
|
|
|
if (!$kind_requested_by && strpos($label['name'],'RequestBy') !== false) {
|
|
|
|
$kind_requested_by = true;
|
|
|
|
}
|
|
|
|
if ( strpos($label['name'],'Bug') !== false) {
|
|
|
|
return false;
|
2024-07-22 14:17:00 +02:00
|
|
|
}
|
|
|
|
}
|
2024-09-05 17:09:42 +02:00
|
|
|
return $kind_requested_by;
|
2024-07-22 14:17:00 +02:00
|
|
|
}
|
|
|
|
|
2024-08-14 13:52:30 +02:00
|
|
|
function get_issue_total_time(array $issue_time)
|
2024-07-22 14:17:00 +02:00
|
|
|
{
|
|
|
|
$count = 0;
|
|
|
|
foreach ($issue_time as $time) {
|
|
|
|
$count += (int) $time['time'];
|
|
|
|
}
|
|
|
|
|
|
|
|
return $count;
|
|
|
|
}
|
|
|
|
|
2024-08-14 13:52:30 +02:00
|
|
|
function check_issue_is_billed(array $issue_labels, array $issue_time): bool {
|
2024-07-22 14:17:00 +02:00
|
|
|
$issue_time = $this->get_issue_total_time($issue_time);
|
|
|
|
$issue_time = (gmdate('H:i:s', $issue_time) !== '00:00:00');
|
2024-09-05 17:09:42 +02:00
|
|
|
$label_requested_by_no_kind_bug = $this->search_requested_by_and_kind_bug($issue_labels);
|
|
|
|
return $issue_time && $label_requested_by_no_kind_bug;
|
2024-07-22 14:17:00 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
function handle_single_issue(string $from_date, string $to_date, array $issue, array $issue_time){
|
|
|
|
$from_datetime = $this->date_to_datetime($from_date);
|
|
|
|
$to_datetime = $this->date_to_datetime($to_date);
|
|
|
|
$closed_after_inital_date = substr($issue['closed_at'], 0, 19) > $from_datetime;
|
|
|
|
$closed_after_ending_date = substr($issue['closed_at'], 0, 19) <= $to_datetime;
|
|
|
|
$issue_is_billed = false;
|
|
|
|
if(isset($issue['labels']) && sizeof($issue['labels']) > 0) {
|
|
|
|
$issue_is_billed = $this->check_issue_is_billed($issue['labels'], $issue_time);
|
|
|
|
}
|
|
|
|
return $closed_after_inital_date && $closed_after_ending_date && $issue_is_billed;
|
|
|
|
}
|
|
|
|
}
|