diff --git a/app/Console/Commands/CalculateProgressGantt.php b/app/Console/Commands/CalculateProgressGantt.php
new file mode 100644
index 0000000..f3b40c9
--- /dev/null
+++ b/app/Console/Commands/CalculateProgressGantt.php
@@ -0,0 +1,28 @@
+argument('hierarchy_id');
+ $hierarchy = HierarchyFtth::findOrFail($hierarchy_id);
+ $project = Project::find($hierarchy->project_id);
+
+ $data = MasterFunctionsHelper::calculateSCurveForProgressTree($hierarchy_id);
+
+ $hierarchy->bobot_planning = 100;
+ $hierarchy->progress =round(((int) end($data[0]['data']['percentageReal']) / (int) end($data[0]['data']['percentagePlan'])) * 100, 2);
+ $hierarchy->save();
+ }
+}
diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php
index a7fceee..726d069 100644
--- a/app/Console/Kernel.php
+++ b/app/Console/Kernel.php
@@ -14,7 +14,8 @@ class Kernel extends ConsoleKernel
*/
protected $commands = [
Commands\syncHumanResourceIntegration::class,
- Commands\CalculateSCurve::class
+ Commands\CalculateSCurve::class,
+ Commands\CalculateProgressGantt::class
];
/**
diff --git a/app/Helpers/MasterFunctionsHelper.php b/app/Helpers/MasterFunctionsHelper.php
index b404eb0..9a9b18e 100644
--- a/app/Helpers/MasterFunctionsHelper.php
+++ b/app/Helpers/MasterFunctionsHelper.php
@@ -168,44 +168,29 @@ class MasterFunctionsHelper
return $dataFinal;
}
- public function calculateProgressBasedOnReportMaterial($keyGantt)
+ public function calculateProgressBasedOnReportMaterialOld($keyGantt)
{
DB::enableQueryLog();
-
$dataFinal = [];
$dataPayload = [];
$dataPayload['period'] = 'week';
$totalACWP = 0;
$totalBCWP = 0;
$tempPercentage = [];
-
$dataProject = Project::find($keyGantt['proyek_id']);
$dataHeader = Activity::where('type_activity', 'header')->where("proyek_id", $keyGantt['proyek_id'])->where("version_gantt_id", $keyGantt['id'])->first();
if (isset($dataPayload['end_date']) && $dataPayload['end_date'] > $dataProject->akhir_proyek) {
$dataPayload['end_date'] = $dataProject->akhir_proyek;
}
-
if ($dataHeader) {
$totalRencanaBudget = Activity::where('parent_id', $dataHeader->id)->where("proyek_id", $keyGantt['proyek_id'])->where("version_gantt_id", $keyGantt['id'])->sum("rencana_biaya");
} else {
$totalRencanaBudget = Activity::whereNull('parent_id')->where("proyek_id", $keyGantt['proyek_id'])->where("version_gantt_id", $keyGantt['id'])->sum("rencana_biaya");
}
-
if (!Activity::where("version_gantt_id", $keyGantt['id'])->first())
return $dataFinal;
-
- $alreadyHasReport = DB::table('report_activity_material as a')
- ->select('a.id')
- ->join('m_activity as b', 'b.id', '=', 'a.activity_id')
- ->where('b.version_gantt_id', '=', $keyGantt['id'])
- ->exists();
- // note : delete this
- // if(!$alreadyHasReport)
- // return $dataFinal;
-
$minDate = Activity::where('version_gantt_id', $keyGantt['id'])->whereNull('parent_id')->pluck('start_date')->first();
-
- $begin = new \DateTime($minDate . ' Monday');
+ $begin = new \DateTime($minDate);
$begin->modify('last Monday');
if (isset($dataPayload['end_date'])) {
$maxDate = $dataPayload['end_date'];
@@ -232,7 +217,6 @@ class MasterFunctionsHelper
$interval = new \DateInterval('P7D');
}
$period = new \DatePeriod($begin, $interval, $end);
-
$arr_ActualM = [];
$tempDate = [];
$tempPercentagePlan = [];
@@ -240,23 +224,12 @@ class MasterFunctionsHelper
$tempPercentageReal = [];
$tempTtlPercentPlan = 0;
$tempTtlPercentActual = 0;
-
$currentACWP = 0;
$currentBCWP = 0;
-
foreach ($period as $dt) {
$minSevenDays = new \Datetime($dt->format("Y-m-d"));
$minSevenDays = $minSevenDays->modify('-7 day')->format("Y-m-d");
$tempDate[] = array($dt->format("Y-m-d"));
- // $dataPlanM = DB::table('assign_material_to_activity as ama')
- // ->select('ama.activity_id', 'ama.qty_planning', 'ama.plan_date', 'ama.start_activity', 'a.bobot_planning', 'a.biaya_actual', 'a.duration', 'a.persentase_progress')
- // ->join('m_activity as a', 'a.id', '=', 'ama.activity_id')
- // ->where('ama.proyek_id', '=', $keyGantt['proyek_id'])
- // ->where('a.version_gantt_id', '=', $keyGantt['id'])
- // ->whereDate('ama.plan_date', '<=',$dt->format("Y-m-d"))
- // ->whereDate('ama.plan_date', '>', $minSevenDays)
- // ->get();
-
$activities = DB::table('m_activity AS a')
->join('assign_material_to_activity AS amta', 'amta.activity_id', '=', 'a.id')
->where('a.type_activity', 'task')
@@ -265,7 +238,6 @@ class MasterFunctionsHelper
->whereDate('amta.plan_date', '<=', $dt->format("Y-m-d"))
->whereDate('amta.plan_date', '>', $minSevenDays)
->select('a.bobot_planning', 'a.biaya_actual', 'a.duration', 'a.persentase_progress', 'a.id');
-
$dataPlanM = DB::table('m_activity AS a')
->join('assign_hr_to_activity AS ahta', 'ahta.activity_id', '=', 'a.id')
->where('a.type_activity', 'task')
@@ -276,7 +248,6 @@ class MasterFunctionsHelper
->select('a.bobot_planning', 'a.biaya_actual', 'a.duration', 'a.persentase_progress', 'a.id')
->union($activities)
->get();
-
$dataActualM = DB::table('report_activity_material as ram')
->select('ram.activity_id', 'ram.qty', 'ram.report_date', 'a.bobot_planning', 'a.biaya_actual', 'a.duration', 'a.persentase_progress')
->join('m_activity as a', 'a.id', '=', 'ram.activity_id')
@@ -290,7 +261,6 @@ class MasterFunctionsHelper
$sumPercentagePlan = 0;
$totalACWP = isset($totalACWP) ? $totalACWP : 0;
$totalBCWP = isset($totalBCWP) ? $totalBCWP : 0;
-
foreach ($dataPlanM as $keyPlanM) {
// $sumVolPlan = DB::table(function ($query) use ($keyGantt) {
// $query->select('a.*')
@@ -315,9 +285,20 @@ class MasterFunctionsHelper
->where('activity_id', '=', $keyPlanM->id)
->groupBy('activity_id')
->first();
- $weekCount = $keyPlanM->duration / 7;
- $weeklyPlan = $weekCount > 0 ? $sumVolPlan->ttl_qty_plan / $weekCount : 0;
- $weeklyProgress = $weeklyPlan / $sumVolPlan->ttl_qty_plan * $keyPlanM->bobot_planning;
+ if ($keyPlanM->duration) {
+ $weekCount = $keyPlanM->duration / 7;
+ $weeklyPlan = $weekCount >= 1 ? $sumVolPlan->ttl_qty_plan / $weekCount : $sumVolPlan->ttl_qty_plan / $weekCount / 7;
+ // $weeklyProgress = $sumVolPlan->ttl_qty_plan * $keyPlanM->bobot_planning;
+ $weeklyProgress = $weeklyPlan / $sumVolPlan->ttl_qty_plan * $keyPlanM->bobot_planning;
+ // $bobotHari = $keyPlanM->bobot_planning / $keyPlanM->duration;
+ } else {
+ // $weeklyProgress = 0;
+ $weekCount = 1 / 7;
+ $weeklyPlan = $weekCount >= 1 ? $sumVolPlan->ttl_qty_plan / $weekCount : $sumVolPlan->ttl_qty_plan / $weekCount / 7;
+ // $weeklyProgress = $sumVolPlan->ttl_qty_plan * $keyPlanM->bobot_planning;
+ $weeklyProgress = $weeklyPlan / $sumVolPlan->ttl_qty_plan * $keyPlanM->bobot_planning;
+ }
+
// $weeklyPlan = $weekCount > 0 ? $keyPlanM->bobot_planning / $weekCount : 0;
// $weeklyProgress = $weeklyPlan * $keyPlanM->bobot_planning;
$dataTempPlan[$x]['activity_id'] = $keyPlanM->id;
@@ -339,7 +320,6 @@ class MasterFunctionsHelper
}
$x++;
}
-
$w = 0;
$dataTempReport = [];
$sumPercentageActual = 0;
@@ -390,8 +370,6 @@ class MasterFunctionsHelper
// $sumPercentageActual+=($keyActualM->qty/$sumVolActual->ttl_qty_plan)*$keyActualM->bobot_planning;
// }
// }
-
-
$totalACWP += $keyActualM->duration > 0 ? $keyActualM->biaya_actual / $keyActualM->duration : 0;
} catch (\DivisionByZeroError $e) {
return response()->json(['message' => $e->getMessage()]);
@@ -399,7 +377,6 @@ class MasterFunctionsHelper
$dataTempReport[$w]['totalacwp'] = $totalACWP;
$w++;
}
-
$arr_ActualM[] = array(
'date' => $dt->format("Y-m-d"),
'percentPlan' => $sumPercentagePlan,
@@ -407,42 +384,30 @@ class MasterFunctionsHelper
'plan' => $dataTempPlan,
'actual' => $dataTempReport,
);
+ $today = new DateTime();
+ $date = new DateTime($dt->format("Y-m-d"));
if (isset($dataPayload['period']) && $dataPayload['period'] == 'week') {
$tempTtlPercentPlan += $sumPercentagePlan;
$tempTtlPercentActual += $sumPercentageActual;
-
- // if($tempTtlPercentPlan >= 100 || $tempTtlPercentActual >= $keyGantt['progress'];){
- // if($tempTtlPercentActual >= 100)
- // $tempTtlPercentActual = 100;
- // if($tempTtlPercentPlan >= 100)
- // $tempTtlPercentPlan = 100;
-
- // if($tempTtlPercentActual >= $keyGantt['progress'])
- // $tempTtlPercentActual = $keyGantt['progress'];
- // todo
- // if ($tempTtlPercentPlan >= 100)
- // $tempTtlPercentPlan = 100;
- // $sumPercentageActual > $keyGantt['progress'] ? $keyGantt['progress'] : $sumPercentageActual
-
- // }
-
$currentACWP += $totalACWP;
$currentBCWP += $totalBCWP;
-
$tempPercentage[] = array(round($tempTtlPercentPlan, 2), round($tempTtlPercentActual, 2));
$tempPercentagePlan[] = round($tempTtlPercentPlan, 2);
$tempPercentagePlanWhr[] = ["weekly period", $tempPercentagePlan];
- $tempPercentageReal[] = round($tempTtlPercentActual, 2);
+ if ($date < $today) {
+ $tempPercentageReal[] = round($tempTtlPercentActual, 2);
+ }
if ($tempTtlPercentPlan >= 100 && $tempTtlPercentActual >= 100) {
break;
}
} else {
$tempPercentage[] = array(round($sumPercentagePlan, 2), round($sumPercentageActual, 2));
$tempPercentagePlan[] = round($sumPercentagePlan, 2);
- $tempPercentageReal[] = round($sumPercentageActual, 2);
+ if ($date < $today) {
+ $tempPercentageReal[] = round($sumPercentageActual, 2);
+ }
}
}
-
try {
if (round($totalACWP, 0) > $totalRencanaBudget) {
$estimatedCost = round($totalACWP, 0) + 0;
@@ -457,14 +422,12 @@ class MasterFunctionsHelper
]);
}
$estimatedCost = $totalACWP > $totalRencanaBudget ? $totalACWP : $totalRencanaBudget;
-
$costDeviation = $totalRencanaBudget - $estimatedCost;
if ($costDeviation > 0) {
$potential = "SAVING";
} else {
$potential = $costDeviation == 0 ? "ON BUDGET" : "OVERRUN";
}
-
$lastReal = $tempPercentageReal[count($tempPercentageReal) - 1];
$totalBCWP = $lastReal * $dataProject->rencana_biaya / 100;
$dataResponse = array(
@@ -484,12 +447,220 @@ class MasterFunctionsHelper
"potential" => $potential,
)
);
-
$dataFinal[] = array(
"proyek_name" => $dataProject->nama,
"data" => $dataResponse,
"gantt" => $keyGantt
);
+ return $dataFinal;
+ }
+
+ public function calculateProgressBasedOnReportMaterial($keyGantt)
+ {
+ DB::enableQueryLog();
+
+ $dataFinal = [];
+ $dataPayload = [];
+ $dataPayload['period'] = 'week';
+ $totalACWP = 0;
+ $totalBCWP = 0;
+ $tempPercentage = [];
+
+ $dataProject = Project::find($keyGantt['proyek_id']);
+ $dataHeader = Activity::where('type_activity', 'header')->where("proyek_id", $keyGantt['proyek_id'])->where("version_gantt_id", $keyGantt['id'])->first();
+ if (isset($dataPayload['end_date']) && $dataPayload['end_date'] > $dataProject->akhir_proyek) {
+ $dataPayload['end_date'] = $dataProject->akhir_proyek;
+ }
+
+ if ($dataHeader) {
+ // $totalRencanaBudget = Activity::where('parent_id', $dataHeader->id)->where("proyek_id", $keyGantt['proyek_id'])->where("version_gantt_id", $keyGantt['id'])->sum("rencana_biaya");
+ } else {
+ // $totalRencanaBudget = Activity::whereNull('parent_id')->where("proyek_id", $keyGantt['proyek_id'])->where("version_gantt_id", $keyGantt['id'])->sum("rencana_biaya");
+ }
+
+ if (!Activity::where("version_gantt_id", $keyGantt['id'])->first())
+ return $dataFinal;
+
+ $minDate = Activity::where('version_gantt_id', $keyGantt['id'])->whereNull('parent_id')->pluck('start_date')->first();
+
+ $begin = new \DateTime($minDate);
+ $begin = $begin->modify('-1 day');
+ if (isset($dataPayload['end_date'])) {
+ $maxDate = $dataPayload['end_date'];
+ $end = new \DateTime($maxDate . ' Friday');
+ // $end->modify('next Friday');
+ // $end->modify('next Friday');
+ /* $interval = \DateInterval::createFromDateString('1 day'); */ // should be using this but its bugged
+ $interval = new \DateInterval('P1D');
+ } else {
+ $actualMaxDate = DB::table('assign_material_to_activity as ama')
+ ->where("ama.proyek_id", $keyGantt['proyek_id'])
+ ->join('m_activity as a', 'a.id', '=', 'ama.activity_id')
+ ->where('a.version_gantt_id', '=', $keyGantt['id'])
+ ->max("a.end_date"); // plan date overlapped with assign_material_to_activity's, it should be m_activity's
+ $plannedMaxDate = DB::table('assign_material_to_activity as ama')
+ ->where("ama.proyek_id", $keyGantt['proyek_id'])
+ ->join('m_activity as a', 'a.id', '=', 'ama.activity_id')
+ ->where('a.version_gantt_id', '=', $keyGantt['id'])
+ ->max("a.planned_end"); // plan date overlapped with assign_material_to_activity's, it should be m_activity'
+ $maxDate = max(new \DateTime($plannedMaxDate), new \DateTime($actualMaxDate));
+ $end = new \DateTime($maxDate->format('Y-m-d') . ' Friday');
+ // $end->modify('next Friday');
+ // $end->modify('next Friday');
+ $interval = new \DateInterval('P1D');
+ }
+ $period = new \DatePeriod($begin, $interval, $end);
+
+ // $arr_ActualM = [];
+ $tempDate = [];
+ // $tempPercentagePlan = [];
+ // $tempPercentagePlanWhr = [];
+ // $tempPercentageReal = [];
+ // $tempTtlPercentPlan = 0;
+ // $tempTtlPercentActual = 0;
+
+ // $currentACWP = 0;
+ // $currentBCWP = 0;
+ $dataActivityPlanDate = [];
+ $progressPlanKomulatifWeek = [];
+ $progressActualKomulatifWeek = [];
+ $dateWeek = [];
+ $tmpProgressPlanWeek = 0;
+ $tmpProgressActualWeek = 0;
+ foreach ($period as $dt) {
+ $loopDay = $dt->format("Y-m-d");
+ //new \Datetime($dt->format("Y-m-d"));
+ // $minSevenDays = $minSevenDays->modify('-7 day')->format("Y-m-d");
+ $tempDate[] = array($dt->format("Y-m-d"));
+
+ $dataPlanM = DB::table('m_activity')
+ ->where('type_activity', 'task')
+ ->where('bobot_planning', '>', 0)
+ ->where('version_gantt_id', $keyGantt['id'])
+ ->whereDate('planned_start', '<=', $loopDay)
+ ->whereDate('planned_end', '>=', $loopDay)
+ ->select('name', 'bobot_planning', 'biaya_actual', 'duration', 'persentase_progress', 'id', 'planned_start', 'planned_end')
+ ->get();
+
+ $dataActualM = DB::table('report_activity_material as ram')
+ ->join('m_activity as ma', 'ma.id', '=', 'ram.activity_id')
+ ->select(
+ 'ram.activity_id',
+ 'ram.qty as qty_actual',
+ 'ma.bobot_planning',
+ 'ma.name',
+ DB::raw('(SELECT SUM(amta.qty_planning) FROM assign_material_to_activity amta WHERE amta.activity_id = ram.activity_id) AS qty_plan'),
+ DB::raw('(SELECT SUM(ram.qty) FROM report_activity_material ram WHERE ram.activity_id = ma.id) AS sum_qty_actual'),
+ DB::raw('(SELECT DISTINCT status_activity FROM assign_material_to_activity amta WHERE amta.activity_id = ram.activity_id) AS status_activity'),
+ DB::raw('(SELECT COUNT(id) FROM report_activity_material ram WHERE ram.activity_id = ma.id) AS count_report')
+ )
+ ->where('ram.report_date', $loopDay)
+ ->where('ma.version_gantt_id', $keyGantt['id'])
+ ->get();
+
+ $dataActivityPlan = [];
+ $dataActivityActual = [];
+ $today = date('Y-m-d');
+ $statusCutOfDate = false;
+ // if (new \DateTime($loopDay) < $today) {
+ // $statusCutOfDate = true;
+ // }
+
+ $progressPlanKomulatifWeek[] += round($tmpProgressPlanWeek, 2);
+ if (new \DateTime($loopDay . ' Friday') <= new \DateTime($today . ' Friday')) {
+ // $tempPercentageReal[] = round($tempTtlPercentActual, 2);
+ $progressActualKomulatifWeek[] += round($tmpProgressActualWeek, 2);
+ }
+ $dateWeek[] = [$loopDay];
+ // $progressPlanKomulatifWeek[] += $tmpProgressPlanWeek;
+ foreach ($dataPlanM as $keyPlanM) {
+ # hitung untuk persentase progress planning
+ // if($keyPlanM->duration == 0){
+ // $duration = 2;
+ // Tanggal awal
+ $startDate = new DateTime($keyPlanM->planned_start);
+ // Tanggal akhir
+ $endDate = new DateTime($keyPlanM->planned_end);
+ // Menghitung selisih hari
+ $interval = $startDate->diff($endDate);
+ // Mengambil hasil selisih hari
+ $duration = (int) $interval->days + 1;
+ // }else{
+ // $duration = $keyPlanM->duration + 2;
+ // }
+ // $startPlan = new DateTime($keyPlanM->planned_start);
+ // $endPlan = new DateTime($keyPlanM->planned_end);
+ // $interval = $startPlan->diff($endPlan);
+
+ // // Mengambil hasil selisih hari
+ // $duration = $interval->days;
+ $progressPlanWeek = $keyPlanM->bobot_planning / $duration;
+ $dataActivityPlan[] = array(
+ 'progressPlanDay' => $progressPlanWeek,
+ 'name' => $keyPlanM->name,
+ 'bobot_p' => $keyPlanM->bobot_planning,
+ 'duration' => $keyPlanM->duration
+ );
+ $tmpProgressPlanWeek += $progressPlanWeek;
+ }
+
+ // hitung progress actual
+ foreach ($dataActualM as $keyActualM) {
+ # hitung untuk persentase progress actual
+ // $progressActualWeek = ((((($keyActualM->qty_actual / $keyActualM->sum_qty_actual) * 100) / $keyActualM->qty_plan)*100)*$keyActualM->bobot_planning)/100;
+ // jika total report > dari planning
+ if ($keyActualM->sum_qty_actual > $keyActualM->qty_plan) {
+ $progressActualWeek = ($keyActualM->qty_actual / $keyActualM->sum_qty_actual) * $keyActualM->bobot_planning;
+ } else {
+ // jika total report < dari planning
+ // $progressActualWeek = ((($keyActualM->qty_actual / $keyActualM->sum_qty_actual) * 100) / $keyActualM->qty_plan)*$keyActualM->bobot_planning;
+ if ($keyActualM->qty_actual == 0) {
+ $progressActualWeek = 0;
+ } else {
+ $progressActualWeek = ($keyActualM->qty_actual / $keyActualM->qty_plan) * $keyActualM->bobot_planning;
+ }
+ }
+ if ($keyActualM->status_activity == 'done') {
+ $progressActualWeek = $keyActualM->bobot_planning / $keyActualM->count_report;
+ } else {
+ $progressActualWeek = $progressActualWeek > ($keyActualM->bobot_planning * 95) / 100 ? ($keyActualM->bobot_planning * 95) / 100 : $progressActualWeek;
+ }
+ $dataActivityActual[] = array(
+ 'progressActualDay' => $progressActualWeek,
+ 'qty_act' => $keyActualM->qty_actual,
+ 'bobot_p' => $keyActualM->bobot_planning,
+ 'qty_plan' => $keyActualM->qty_plan,
+ 'status_activity' => $keyActualM->status_activity,
+ 'sum_qty_actual' => $keyActualM->sum_qty_actual,
+ 'name' => $keyActualM->name
+ );
+
+ $tmpProgressActualWeek += $progressActualWeek;
+ }
+
+ $dataActivityPlanDate[] = array(
+ "date" => $loopDay,
+ "statusWeek" => new \DateTime($loopDay) == new \DateTime($loopDay . ' Friday') ? true : false,
+ "activity-plan" => $dataActivityPlan,
+ "activity-actual" => $dataActivityActual,
+ "tmpProgressActualWeek" => $tmpProgressActualWeek,
+ "progressPlanWeek" => $tmpProgressPlanWeek
+ );
+ }
+
+ $dataFinal[] = array(
+ // "date" => $dateWeek,
+ "proyek_name" => $dataProject->nama,
+ "data" => [
+ "date" => $dateWeek,
+ "percentagePlan" => $progressPlanKomulatifWeek,
+ "percentageReal" => $progressActualKomulatifWeek,
+ "data_details" => $dataActivityPlanDate
+ ],
+
+
+ "gantt" => $keyGantt
+ );
return $dataFinal;
}
@@ -806,15 +977,15 @@ class MasterFunctionsHelper
return $dataFinal;
}
- public function calculateSCurve($projectId)
+ public function calculateSCurveOld($projectId)
{
DB::enableQueryLog();
$dataFinal = [];
$dataPayload = [];
$dataPayload['period'] = 'week';
- $totalACWP = 0;
- $totalBCWP = 0;
+ // $totalACWP = 0;
+ // $totalBCWP = 0;
$tempPercentage = [];
$dataProject = Project::find($projectId);
@@ -836,13 +1007,13 @@ class MasterFunctionsHelper
$minDate = $dataProject->mulai_proyek;
- $begin = new \DateTime($minDate . ' Monday');
+ $begin = new \DateTime($minDate);
$begin->modify('last Monday');
if (isset($dataPayload['end_date'])) {
$maxDate = $dataPayload['end_date'];
$end = new \DateTime($maxDate . ' Friday');
$end->modify('next Friday');
- $end->modify('next Friday');
+ // $end->modify('next Friday');
/* $interval = \DateInterval::createFromDateString('1 day'); */ // should be using this but its bugged
$interval = new \DateInterval('P7D');
} else {
@@ -866,8 +1037,8 @@ class MasterFunctionsHelper
$tempTtlPercentPlan = 0;
$tempTtlPercentActual = 0;
- $currentACWP = 0;
- $currentBCWP = 0;
+ // $currentACWP = 0;
+ // $currentBCWP = 0;
foreach ($period as $dt) {
$minSevenDays = new \Datetime($dt->format("Y-m-d"));
@@ -911,8 +1082,8 @@ class MasterFunctionsHelper
$dataTempPlan = [];
$x = 0;
$sumPercentagePlan = 0;
- $totalACWP = isset($totalACWP) ? $totalACWP : 0;
- $totalBCWP = isset($totalBCWP) ? $totalBCWP : 0;
+ // $totalACWP = isset($totalACWP) ? $totalACWP : 0;
+ // $totalBCWP = isset($totalBCWP) ? $totalBCWP : 0;
foreach ($dataPlanM as $keyPlanM) {
// $sumVolPlan = DB::table(function ($query) use ($projectId) {
@@ -938,9 +1109,19 @@ class MasterFunctionsHelper
->groupBy('activity_id')
->first();
- $weekCount = 1; // jadiin perhari (1)
- $weeklyPlan = $sumVolPlan->ttl_qty_plan / $weekCount;
- $weeklyProgress = $weeklyPlan / $sumVolPlan->ttl_qty_plan * $keyPlanM->bobot_planning;
+ if ($keyPlanM->duration) {
+ $weekCount = $keyPlanM->duration / 7;
+ $weeklyPlan = $weekCount >= 1 ? $sumVolPlan->ttl_qty_plan / $weekCount : $sumVolPlan->ttl_qty_plan / $weekCount / 7;
+ // $weeklyProgress = $sumVolPlan->ttl_qty_plan * $keyPlanM->bobot_planning;
+ $weeklyProgress = $weeklyPlan / $sumVolPlan->ttl_qty_plan * $keyPlanM->bobot_planning;
+ // $bobotHari = $keyPlanM->bobot_planning / $keyPlanM->duration;
+ } else {
+ // $weeklyProgress = 0;
+ $weekCount = 1 / 7;
+ $weeklyPlan = $weekCount >= 1 ? $sumVolPlan->ttl_qty_plan / $weekCount : $sumVolPlan->ttl_qty_plan / $weekCount / 7;
+ // $weeklyProgress = $sumVolPlan->ttl_qty_plan * $keyPlanM->bobot_planning;
+ $weeklyProgress = $weeklyPlan / $sumVolPlan->ttl_qty_plan * $keyPlanM->bobot_planning;
+ }
// $weeklyPlan = $sumVolPlan->ttl_qty_plan / $weekCount;
// $weeklyProgress = 80;
@@ -953,11 +1134,11 @@ class MasterFunctionsHelper
try {
$dataTempPlan[$x]['percentage'] = $keyPlanM->bobot_planning;
$sumPercentagePlan += $weeklyProgress;
- if (isset($keyPlanM->duration) && $keyPlanM->duration > 0)
- $totalBCWP += (((($keyPlanM->persentase_progress * $keyPlanM->bobot_planning) / 100) / $keyPlanM->duration) * $totalRencanaBudget) / 100;
- else
- $totalBCWP = 0;
- $dataTempPlan[$x]['totalBCWP'] = $totalBCWP;
+ // if (isset($keyPlanM->duration) && $keyPlanM->duration > 0)
+ // $totalBCWP += (((($keyPlanM->persentase_progress * $keyPlanM->bobot_planning) / 100) / $keyPlanM->duration) * $totalRencanaBudget) / 100;
+ // else
+ // $totalBCWP = 0;
+ // $dataTempPlan[$x]['totalBCWP'] = $totalBCWP;
} catch (\DivisionByZeroError $e) {
return response()->json(['message' => $e->getMessage()]);
}
@@ -1033,11 +1214,11 @@ class MasterFunctionsHelper
// }
- $totalACWP += $keyActualM->duration > 0 ? $keyActualM->biaya_actual / $keyActualM->duration : 0;
+ // $totalACWP += $keyActualM->duration > 0 ? $keyActualM->biaya_actual / $keyActualM->duration : 0;
} catch (\DivisionByZeroError $e) {
return response()->json(['message' => $e->getMessage()]);
}
- $dataTempReport[$w]['totalacwp'] = $totalACWP;
+ // $dataTempReport[$w]['totalacwp'] = $totalACWP;
$w++;
}
@@ -1048,6 +1229,9 @@ class MasterFunctionsHelper
'plan' => $dataTempPlan,
'actual' => $dataTempReport,
);
+
+ $today = new DateTime();
+ $date = new DateTime($dt->format("Y-m-d"));
if (isset($dataPayload['period']) && $dataPayload['period'] == 'week') {
$tempTtlPercentPlan += $sumPercentagePlan;
$tempTtlPercentActual += $sumPercentageActual;
@@ -1055,55 +1239,62 @@ class MasterFunctionsHelper
// if ($tempTtlPercentPlan >= 100)
// $tempTtlPercentPlan = 100;
- $currentACWP += $totalACWP;
- $currentBCWP += $totalBCWP;
+ // $currentACWP += $totalACWP;
+ // $currentBCWP += $totalBCWP;
$tempPercentage[] = array(round($tempTtlPercentPlan, 2), round($tempTtlPercentActual, 2));
$tempPercentagePlan[] = round($tempTtlPercentPlan, 2);
$tempPercentagePlanWhr[] = ["weekly period", $tempPercentagePlan];
- $tempPercentageReal[] = round($tempTtlPercentActual, 2);
+ if ($date < $today) {
+ $tempPercentageReal[] = round($tempTtlPercentActual, 2);
+ }
// if ($tempTtlPercentPlan >= 100 && $tempTtlPercentActual >= 100) {
// break;
// }
} else {
$tempPercentage[] = array(round($sumPercentagePlan, 2), round($sumPercentageActual, 2));
$tempPercentagePlan[] = round($sumPercentagePlan, 2);
- $tempPercentageReal[] = round($sumPercentageActual, 2);
+ if ($date < $today) {
+ $tempPercentageReal[] = round($sumPercentageActual, 2);
+ }
}
$tempDate[] = array($dt->format("Y-m-d"));
}
- try {
- if (round($totalACWP, 0) > $totalRencanaBudget) {
- $estimatedCost = round($totalACWP, 0) + 0;
- } else {
- $estimatedCost = ($totalRencanaBudget + 0);
- }
- } catch (\DivisionByZeroError $e) {
- return response()->json([
- 'message' => $e->getMessage(),
- "line" => 566,
- ]);
- }
- $estimatedCost = $totalACWP > $totalRencanaBudget ? $totalACWP : $totalRencanaBudget;
-
- $costDeviation = $totalRencanaBudget - $estimatedCost;
- if ($costDeviation > 0) {
- $potential = "SAVING";
- } else {
- $potential = $costDeviation == 0 ? "ON BUDGET" : "OVERRUN";
- }
-
- $lastReal = $tempPercentageReal[count($tempPercentageReal) - 1];
- $totalBCWP = $lastReal * $dataProject->rencana_biaya / 100;
+ // try {
+ // if (round($totalACWP, 0) > $totalRencanaBudget) {
+ // $estimatedCost = round($totalACWP, 0) + 0;
+ // } else {
+ // $estimatedCost = ($totalRencanaBudget + 0);
+ // }
+ // } catch (\DivisionByZeroError $e) {
+ // return response()->json([
+ // 'message' => $e->getMessage(),
+ // "line" => 566,
+ // ]);
+ // }
+ // $estimatedCost = $totalACWP > $totalRencanaBudget ? $totalACWP : $totalRencanaBudget;
+
+ // $costDeviation = $totalRencanaBudget - $estimatedCost;
+ // if ($costDeviation > 0) {
+ // $potential = "SAVING";
+ // } else {
+ // $potential = $costDeviation == 0 ? "ON BUDGET" : "OVERRUN";
+ // }
+
+ // $lastReal = $tempPercentageReal[count($tempPercentageReal) - 1];
+ // $lastReal = $tempPercentageReal[count($tempPercentageReal) < 1 ? count($tempPercentageReal) : count($tempPercentageReal) - 1];
+ // $totalBCWP = $lastReal * $dataProject->rencana_biaya / 100;
$dataResponse = array(
"date" => $tempDate,
- "start" => $begin,
+ "start" => $minDate,
+ "begin" => $begin,
+ // "periode" => $period,
"end" => $end,
"percentage" => $tempPercentage,
"percentagePlan" => $tempPercentagePlan,
"percentageReal" => $tempPercentageReal,
- "data_details" => $arr_ActualM,
+ // "data_details" => $arr_ActualM,
// "budget_control" => array(
// "current_budget" => $totalRencanaBudget,
// "acwp" => round($totalACWP, 0),
@@ -1124,6 +1315,511 @@ class MasterFunctionsHelper
return $dataFinal;
}
+ public function calculateSCurve($projectId)
+ {
+ DB::enableQueryLog();
+
+ // $hierarchyGantts = [];
+ // if (isset($hierarchyId)) {
+ // $hierarchy = HierarchyFtth::findOrFail($hierarchyId);
+ // $projectId = $hierarchy->project_id;
+ // // if (isset($hierarchy)) {
+ // // $hierarchyGantts = VersionGantt::where('hierarchy_ftth_id', $hierarchyId)->get()->toArray();
+ // // }
+ // }
+
+ $dataFinal = [];
+ $dataPayload = [];
+ $dataPayload['period'] = 'week';
+ $totalACWP = 0;
+ $totalBCWP = 0;
+ $tempPercentage = [];
+
+ $dataProject = Project::find($projectId);
+ $dataHeader = Activity::where('type_activity', 'header')->where("proyek_id", $projectId)->first();
+ if (isset($dataPayload['end_date']) && $dataPayload['end_date'] > $dataProject->akhir_proyek) {
+ $dataPayload['end_date'] = $dataProject->akhir_proyek;
+ }
+
+ if ($dataHeader) {
+ // $totalRencanaBudget = Activity::where('parent_id', $dataHeader->id)->where("proyek_id", $projectId)->sum("rencana_biaya");
+ } else {
+ // $totalRencanaBudget = Activity::whereNull('parent_id')->where("proyek_id", $projectId)->sum("rencana_biaya");
+ }
+
+ $minDate = $dataProject->mulai_proyek;
+
+ $begin = new \DateTime($minDate);
+ $begin = $begin->modify('-1 day');
+ if (isset($dataPayload['end_date'])) {
+ $maxDate = $dataPayload['end_date'];
+ $end = new \DateTime($maxDate . ' Friday');
+ // $end->modify('next Friday');
+ // $end->modify('next Friday');
+ /* $interval = \DateInterval::createFromDateString('1 day'); */ // should be using this but its bugged
+ $interval = new \DateInterval('P1D');
+ } else {
+ $maxDate = $dataProject->akhir_proyek;
+ $end = new \DateTime($maxDate);
+ $end = new \DateTime($end->format('Y-m-d') . ' Friday');
+ // $end->modify('next Friday');
+ // $end->modify('next Friday');
+ $interval = new \DateInterval('P1D');
+ }
+ $period = new \DatePeriod($begin, $interval, $end);
+
+ // $arr_ActualM = [];
+ $tempDate = [];
+ // $tempPercentagePlan = [];
+ // $tempPercentagePlanWhr = [];
+ // $tempPercentageReal = [];
+ // $tempTtlPercentPlan = 0;
+ // $tempTtlPercentActual = 0;
+
+ // $currentACWP = 0;
+ // $currentBCWP = 0;
+ $dataActivityPlanDate = [];
+ $progressPlanKomulatifWeek = [];
+ $progressActualKomulatifWeek = [];
+ $dateWeek = [];
+ $tmpProgressPlanWeek = 0;
+ $tmpProgressActualWeek = 0;
+ foreach ($period as $dt) {
+ $loopDay = $dt->format("Y-m-d");
+ //new \Datetime($dt->format("Y-m-d"));
+ // $minSevenDays = $minSevenDays->modify('-7 day')->format("Y-m-d");
+ $tempDate[] = array($dt->format("Y-m-d"));
+ $dataPlanM = [];
+ $dataActualM = [];
+ // if (count($hierarchyGantts) > 0) {
+ // foreach ($hierarchyGantts as $key => $gantt) {
+ // $dataPlanM[] = DB::table('m_activity')
+ // ->where('type_activity', 'task')
+ // ->where('bobot_planning', '>', 0)
+ // ->where('version_gantt_id', $gantt['id'])
+ // ->whereDate('planned_start', '<=', $loopDay)
+ // ->whereDate('planned_end', '>=', $loopDay)
+ // ->select('name', 'bobot_planning', 'biaya_actual', 'duration', 'persentase_progress', 'id', 'planned_start', 'planned_end')
+ // ->get()->toArray();
+
+ // $dataActualM[] = DB::table('report_activity_material as ram')
+ // ->join('m_activity as ma', 'ma.id', '=', 'ram.activity_id')
+ // ->select('ram.activity_id', 'ram.qty as qty_actual', 'ma.bobot_planning', 'ma.name',
+ // DB::raw('(SELECT SUM(amta.qty_planning) FROM assign_material_to_activity amta WHERE amta.activity_id = ram.activity_id) AS qty_plan'),
+ // DB::raw('(SELECT SUM(ram.qty) FROM report_activity_material ram WHERE ram.activity_id = ma.id) AS sum_qty_actual'),
+ // DB::raw('(SELECT DISTINCT status_activity FROM assign_material_to_activity amta WHERE amta.activity_id = ram.activity_id) AS status_activity'),
+ // DB::raw('(SELECT COUNT(id) FROM report_activity_material ram WHERE ram.activity_id = ma.id) AS count_report')
+ // )
+ // ->where('ram.report_date', $loopDay)
+ // ->where('ma.version_gantt_id', $gantt['id'])
+ // ->get()->toArray();
+ // }
+ // } else {
+
+ $dataPlanM = DB::table('m_activity')
+ ->where('type_activity', 'task')
+ ->where('bobot_planning', '>', 0)
+ ->where('proyek_id', $projectId)
+ ->whereDate('planned_start', '<=', $loopDay)
+ ->whereDate('planned_end', '>=', $loopDay)
+ ->select('name', 'bobot_planning', 'biaya_actual', 'duration', 'persentase_progress', 'id', 'planned_start', 'planned_end')
+ ->get();
+
+ $dataActualM = DB::table('report_activity_material as ram')
+ ->join('m_activity as ma', 'ma.id', '=', 'ram.activity_id')
+ ->select(
+ 'ram.activity_id',
+ 'ram.qty as qty_actual',
+ 'ma.bobot_planning',
+ 'ma.name',
+ DB::raw('(SELECT SUM(amta.qty_planning) FROM assign_material_to_activity amta WHERE amta.activity_id = ram.activity_id) AS qty_plan'),
+ DB::raw('(SELECT SUM(ram.qty) FROM report_activity_material ram WHERE ram.activity_id = ma.id) AS sum_qty_actual'),
+ DB::raw('(SELECT DISTINCT status_activity FROM assign_material_to_activity amta WHERE amta.activity_id = ram.activity_id) AS status_activity'),
+ DB::raw('(SELECT COUNT(id) FROM report_activity_material ram WHERE ram.activity_id = ma.id) AS count_report')
+ )
+ ->where('ram.report_date', $loopDay)
+ ->where('ma.proyek_id', $projectId)
+ ->get();
+ // }
+
+ $dataActivityPlan = [];
+ $dataActivityActual = [];
+ $today = date('Y-m-d');
+
+ $progressPlanKomulatifWeek[] += round($tmpProgressPlanWeek, 2);
+ if (new \DateTime($loopDay . ' Friday') <= new \DateTime($today . ' Friday')) {
+ // $tempPercentageReal[] = round($tempTtlPercentActual, 2);
+ $progressActualKomulatifWeek[] += round($tmpProgressActualWeek, 2);
+ }
+ $dateWeek[] = [$loopDay];
+ // $progressPlanKomulatifWeek[] += $tmpProgressPlanWeek;
+ // if (count($dataPlanM) > 0 && count($dataPlanM[0]) > 0) {
+ foreach ($dataPlanM as $keyPlanM) {
+ # hitung untuk persentase progress planning
+ // if($keyPlanM->duration == 0){
+ // $duration = 2;
+ // Tanggal awal
+ $startDate = new DateTime($keyPlanM->planned_start);
+ // Tanggal akhir
+ $endDate = new DateTime($keyPlanM->planned_end);
+ // Menghitung selisih hari
+ $interval = $startDate->diff($endDate);
+ // Mengambil hasil selisih hari
+ $duration = (int) $interval->days + 1;
+ // }else{
+ // $duration = $keyPlanM->duration + 2;
+ // }
+ // $startPlan = new DateTime($keyPlanM->planned_start);
+ // $endPlan = new DateTime($keyPlanM->planned_end);
+ // $interval = $startPlan->diff($endPlan);
+
+ // // Mengambil hasil selisih hari
+ // $duration = $interval->days;
+ // 2023-07-26
+ $progressPlanWeek = $keyPlanM->bobot_planning / $duration;
+ $dataActivityPlan[] = array(
+ 'progressPlanDay' => $progressPlanWeek,
+ 'name' => $keyPlanM->name,
+ 'bobot_p' => $keyPlanM->bobot_planning,
+ 'duration' => $keyPlanM->duration
+ );
+ $tmpProgressPlanWeek += $progressPlanWeek;
+ }
+ // }
+
+ // hitung progress actual
+ // if (count($dataActualM) > 0 && count($dataActualM[0]) > 0) {
+ foreach ($dataActualM as $keyActualM) {
+ # hitung untuk persentase progress actual
+ // $progressActualWeek = ((((($keyActualM->qty_actual / $keyActualM->sum_qty_actual) * 100) / $keyActualM->qty_plan)*100)*$keyActualM->bobot_planning)/100;
+ // jika total report > dari planning
+ if ($keyActualM->sum_qty_actual > $keyActualM->qty_plan) {
+ $progressActualWeek = (($keyActualM->qty_actual / $keyActualM->sum_qty_actual) * 100) * $keyActualM->bobot_planning / 100;
+ } else {
+ // jika total report < dari planning
+ // $progressActualWeek = ((($keyActualM->qty_actual / $keyActualM->sum_qty_actual) * 100) / $keyActualM->qty_plan)*$keyActualM->bobot_planning;
+ if ($keyActualM->qty_actual == 0) {
+ $progressActualWeek = 0;
+ } else {
+ $progressActualWeek = ($keyActualM->qty_actual / $keyActualM->qty_plan) * $keyActualM->bobot_planning;
+ }
+ }
+ if ($keyActualM->status_activity == 'done') {
+ // if($keyActualM->sum_qty_actual > $keyActualM->qty_plan){
+
+ // }
+ // if($progressActualWeek > $keyActualM->bobot_planning){
+ // $progressActualWeek = $keyActualM->bobot_planning;
+ // }else if($keyActualM->qty_actual == 0){
+ // $progressActualWeek = $keyActualM->bobot_planning;
+ // }else if($keyActualM->qty_plan == $keyActualM->sum_qty_actual){
+ $progressActualWeek = $keyActualM->bobot_planning / $keyActualM->count_report;
+ // }else {
+ // $progressActualWeek = $progressActualWeek;
+ // }
+ // $progressActualWeek = $progressActualWeek > $keyActualM->bobot_planning ? $keyActualM->bobot_planning : $progressActualWeek;
+ // jika report lebih dari 1 x, maka harusnya di bagi sabanyak jumlah report,
+ // contoh ada 3 report, report ke 1 adalah 5 maka 100/3 dan di looping
+ } else {
+ $progressActualWeek = $progressActualWeek > ($keyActualM->bobot_planning * 95) / 100 ? ($keyActualM->bobot_planning * 95) / 100 : $progressActualWeek;
+ }
+ $dataActivityActual[] = array(
+ 'progressActualDay' => $progressActualWeek,
+ 'qty_act' => $keyActualM->qty_actual,
+ 'bobot_p' => $keyActualM->bobot_planning,
+ 'qty_plan' => $keyActualM->qty_plan,
+ 'status_activity' => $keyActualM->status_activity,
+ 'sum_qty_actual' => $keyActualM->sum_qty_actual,
+ 'name' => $keyActualM->name
+ );
+
+ $tmpProgressActualWeek += $progressActualWeek;
+ }
+ // }
+
+ $dataActivityPlanDate[] = array(
+ "date" => $loopDay,
+ "statusWeek" => new \DateTime($loopDay) == new \DateTime($loopDay . ' Friday') ? true : false,
+ "activity-plan" => $dataActivityPlan,
+ "activity-actual" => $dataActivityActual,
+ "tmpProgressActualWeek" => $tmpProgressActualWeek,
+ "progressPlanWeek" => $tmpProgressPlanWeek
+ );
+ }
+
+ $dataFinal[] = array(
+ // "date" => $dateWeek,
+ "proyek_name" => $dataProject->nama,
+ "data" => [
+ "date" => $dateWeek,
+ "percentagePlan" => $progressPlanKomulatifWeek,
+ "percentageReal" => $progressActualKomulatifWeek
+ // "data_details" => $dataActivityPlanDate
+ ]
+ );
+
+ return $dataFinal;
+ }
+
+ public function calculateSCurveForProgressTree($hierarchyId)
+ {
+ DB::enableQueryLog();
+
+ // $hierarchyGantts = [];
+ if (isset($hierarchyId)) {
+ $hierarchy = HierarchyFtth::findOrFail($hierarchyId);
+ $projectId = $hierarchy->project_id;
+ // if (isset($hierarchy)) {
+ // $hierarchyGantts = VersionGantt::where('hierarchy_ftth_id', $hierarchyId)->get()->toArray();
+ // }
+ }
+
+ $dataFinal = [];
+ $dataPayload = [];
+ $dataPayload['period'] = 'week';
+ $totalACWP = 0;
+ $totalBCWP = 0;
+ $tempPercentage = [];
+
+ $dataProject = Project::find($projectId);
+ $dataHeader = Activity::where('type_activity', 'header')->where("proyek_id", $projectId)->first();
+ if (isset($dataPayload['end_date']) && $dataPayload['end_date'] > $dataProject->akhir_proyek) {
+ $dataPayload['end_date'] = $dataProject->akhir_proyek;
+ }
+
+ if ($dataHeader) {
+ // $totalRencanaBudget = Activity::where('parent_id', $dataHeader->id)->where("proyek_id", $projectId)->sum("rencana_biaya");
+ } else {
+ // $totalRencanaBudget = Activity::whereNull('parent_id')->where("proyek_id", $projectId)->sum("rencana_biaya");
+ }
+
+ $minDate = $dataProject->mulai_proyek;
+
+ $begin = new \DateTime($minDate);
+ $begin = $begin->modify('-1 day');
+ if (isset($dataPayload['end_date'])) {
+ $maxDate = $dataPayload['end_date'];
+ $end = new \DateTime($maxDate . ' Friday');
+ // $end->modify('next Friday');
+ // $end->modify('next Friday');
+ /* $interval = \DateInterval::createFromDateString('1 day'); */ // should be using this but its bugged
+ $interval = new \DateInterval('P1D');
+ } else {
+ $maxDate = $dataProject->akhir_proyek;
+ $end = new \DateTime($maxDate);
+ $end = new \DateTime($end->format('Y-m-d') . ' Friday');
+ // $end->modify('next Friday');
+ // $end->modify('next Friday');
+ $interval = new \DateInterval('P1D');
+ }
+ $period = new \DatePeriod($begin, $interval, $end);
+
+ // $arr_ActualM = [];
+ $tempDate = [];
+ // $tempPercentagePlan = [];
+ // $tempPercentagePlanWhr = [];
+ // $tempPercentageReal = [];
+ // $tempTtlPercentPlan = 0;
+ // $tempTtlPercentActual = 0;
+
+ // $currentACWP = 0;
+ // $currentBCWP = 0;
+ $dataActivityPlanDate = [];
+ $progressPlanKomulatifWeek = [];
+ $progressActualKomulatifWeek = [];
+ $dateWeek = [];
+ $tmpProgressPlanWeek = 0;
+ $tmpProgressActualWeek = 0;
+ foreach ($period as $dt) {
+ $loopDay = $dt->format("Y-m-d");
+ //new \Datetime($dt->format("Y-m-d"));
+ // $minSevenDays = $minSevenDays->modify('-7 day')->format("Y-m-d");
+ $tempDate[] = array($dt->format("Y-m-d"));
+ $dataPlanM = [];
+ $dataActualM = [];
+ // if (count($hierarchyGantts) > 0) {
+ // foreach ($hierarchyGantts as $key => $gantt) {
+ // $dataPlanM[] = DB::table('m_activity')
+ // ->where('type_activity', 'task')
+ // ->where('bobot_planning', '>', 0)
+ // ->where('version_gantt_id', $gantt['id'])
+ // ->whereDate('planned_start', '<=', $loopDay)
+ // ->whereDate('planned_end', '>=', $loopDay)
+ // ->select('name', 'bobot_planning', 'biaya_actual', 'duration', 'persentase_progress', 'id', 'planned_start', 'planned_end')
+ // ->get()->toArray();
+
+ // $dataActualM[] = DB::table('report_activity_material as ram')
+ // ->join('m_activity as ma', 'ma.id', '=', 'ram.activity_id')
+ // ->select('ram.activity_id', 'ram.qty as qty_actual', 'ma.bobot_planning', 'ma.name',
+ // DB::raw('(SELECT SUM(amta.qty_planning) FROM assign_material_to_activity amta WHERE amta.activity_id = ram.activity_id) AS qty_plan'),
+ // DB::raw('(SELECT SUM(ram.qty) FROM report_activity_material ram WHERE ram.activity_id = ma.id) AS sum_qty_actual'),
+ // DB::raw('(SELECT DISTINCT status_activity FROM assign_material_to_activity amta WHERE amta.activity_id = ram.activity_id) AS status_activity'),
+ // DB::raw('(SELECT COUNT(id) FROM report_activity_material ram WHERE ram.activity_id = ma.id) AS count_report')
+ // )
+ // ->where('ram.report_date', $loopDay)
+ // ->where('ma.version_gantt_id', $gantt['id'])
+ // ->get()->toArray();
+ // }
+ // } else {
+
+ $dataPlanM = DB::table('m_hierarchy_ftth as mhf')
+ ->join('m_version_gantt as mvg', 'mvg.hierarchy_ftth_id', '=', 'mhf.id')
+ ->join('m_activity as ma', 'ma.version_gantt_id', '=', 'mvg.id')
+ ->where('ma.type_activity', 'task')
+ ->where('ma.bobot_planning', '>', 0)
+ ->where('mhf.project_id', $projectId)
+ ->whereDate('planned_start', '<=', $loopDay)
+ ->whereDate('planned_end', '>=', $loopDay)
+ ->select('ma.name', 'ma.bobot_planning', 'ma.biaya_actual', 'ma.duration', 'ma.persentase_progress', 'ma.id', 'ma.planned_start', 'ma.planned_end')
+ ->get();
+
+ $dataActualM = DB::table('m_hierarchy_ftth as mhf')
+ ->join('m_version_gantt as mvg', 'mvg.hierarchy_ftth_id', '=', 'mhf.id')
+ ->join('m_activity as ma', 'ma.version_gantt_id', '=', 'mvg.id')
+ ->join('report_activity_material as ram', 'ram.activity_id', '=', 'ma.id')
+ ->select(
+ 'ram.activity_id',
+ 'ram.qty as qty_actual',
+ 'ma.bobot_planning',
+ 'ma.name',
+ DB::raw('(SELECT SUM(amta.qty_planning) FROM assign_material_to_activity amta WHERE amta.activity_id = ram.activity_id) AS qty_plan'),
+ DB::raw('(SELECT SUM(ram.qty) FROM report_activity_material ram WHERE ram.activity_id = ma.id) AS sum_qty_actual'),
+ DB::raw('(SELECT DISTINCT status_activity FROM assign_material_to_activity amta WHERE amta.activity_id = ram.activity_id) AS status_activity'),
+ DB::raw('(SELECT COUNT(id) FROM report_activity_material ram WHERE ram.activity_id = ma.id) AS count_report')
+ )
+ ->where('ram.report_date', $loopDay)
+ // ->where('ma.proyek_id', $projectId)
+ ->where('mhf.project_id', $projectId)
+ ->get();
+ // }
+
+ $dataActivityPlan = [];
+ $dataActivityActual = [];
+ $today = date('Y-m-d');
+ if (new \DateTime($loopDay) == new \DateTime($loopDay . ' Friday')) {
+
+ $progressPlanKomulatifWeek[] += round($tmpProgressPlanWeek, 2);
+ if (new \DateTime($loopDay . ' Friday') <= new \DateTime($today . ' Friday')) {
+ // $tempPercentageReal[] = round($tempTtlPercentActual, 2);
+ $progressActualKomulatifWeek[] += round($tmpProgressActualWeek, 2);
+ }
+ $dateWeek[] = [$loopDay];
+ }
+ // $progressPlanKomulatifWeek[] += $tmpProgressPlanWeek;
+ // if (count($dataPlanM) > 0 && count($dataPlanM[0]) > 0) {
+ foreach ($dataPlanM as $keyPlanM) {
+ # hitung untuk persentase progress planning
+ // if($keyPlanM->duration == 0){
+ // $duration = 2;
+ // Tanggal awal
+ if (count($keyPlanM) == 0) {
+ continue;
+ }
+ $startDate = new DateTime($keyPlanM->planned_start);
+ // Tanggal akhir
+ $endDate = new DateTime($keyPlanM->planned_end);
+ // Menghitung selisih hari
+ $interval = $startDate->diff($endDate);
+ // Mengambil hasil selisih hari
+ $duration = (int) $interval->days + 1;
+ // }else{
+ // $duration = $keyPlanM->duration + 2;
+ // }
+ // $startPlan = new DateTime($keyPlanM->planned_start);
+ // $endPlan = new DateTime($keyPlanM->planned_end);
+ // $interval = $startPlan->diff($endPlan);
+
+ // // Mengambil hasil selisih hari
+ // $duration = $interval->days;
+ // 2023-07-26
+ $progressPlanWeek = $keyPlanM->bobot_planning / $duration;
+ $dataActivityPlan[] = array(
+ 'progressPlanDay' => $progressPlanWeek,
+ 'name' => $keyPlanM->name,
+ 'bobot_p' => $keyPlanM->bobot_planning,
+ 'duration' => $keyPlanM->duration
+ );
+ $tmpProgressPlanWeek += $progressPlanWeek;
+ }
+ // }
+
+ // hitung progress actual
+ // if (count($dataActualM) > 0 && count($dataActualM[0]) > 0) {
+ foreach ($dataActualM as $keyActualM) {
+ if (count($keyPlanM) == 0) {
+ continue;
+ }
+ # hitung untuk persentase progress actual
+ // $progressActualWeek = ((((($keyActualM->qty_actual / $keyActualM->sum_qty_actual) * 100) / $keyActualM->qty_plan)*100)*$keyActualM->bobot_planning)/100;
+ // jika total report > dari planning
+ if ($keyActualM->sum_qty_actual > $keyActualM->qty_plan) {
+ $progressActualWeek = (($keyActualM->qty_actual / $keyActualM->sum_qty_actual) * 100) * $keyActualM->bobot_planning / 100;
+ } else {
+ // jika total report < dari planning
+ // $progressActualWeek = ((($keyActualM->qty_actual / $keyActualM->sum_qty_actual) * 100) / $keyActualM->qty_plan)*$keyActualM->bobot_planning;
+ if ($keyActualM->qty_actual == 0) {
+ $progressActualWeek = 0;
+ } else {
+ $progressActualWeek = ($keyActualM->qty_actual / $keyActualM->qty_plan) * $keyActualM->bobot_planning;
+ }
+ }
+ if ($keyActualM->status_activity == 'done') {
+ // if($keyActualM->sum_qty_actual > $keyActualM->qty_plan){
+
+ // }
+ // if($progressActualWeek > $keyActualM->bobot_planning){
+ // $progressActualWeek = $keyActualM->bobot_planning;
+ // }else if($keyActualM->qty_actual == 0){
+ // $progressActualWeek = $keyActualM->bobot_planning;
+ // }else if($keyActualM->qty_plan == $keyActualM->sum_qty_actual){
+ $progressActualWeek = $keyActualM->bobot_planning / $keyActualM->count_report;
+ // }else {
+ // $progressActualWeek = $progressActualWeek;
+ // }
+ // $progressActualWeek = $progressActualWeek > $keyActualM->bobot_planning ? $keyActualM->bobot_planning : $progressActualWeek;
+ // jika report lebih dari 1 x, maka harusnya di bagi sabanyak jumlah report,
+ // contoh ada 3 report, report ke 1 adalah 5 maka 100/3 dan di looping
+ } else {
+ $progressActualWeek = $progressActualWeek > ($keyActualM->bobot_planning * 95) / 100 ? ($keyActualM->bobot_planning * 95) / 100 : $progressActualWeek;
+ }
+ $dataActivityActual[] = array(
+ 'progressActualDay' => $progressActualWeek,
+ 'qty_act' => $keyActualM->qty_actual,
+ 'bobot_p' => $keyActualM->bobot_planning,
+ 'qty_plan' => $keyActualM->qty_plan,
+ 'status_activity' => $keyActualM->status_activity,
+ 'sum_qty_actual' => $keyActualM->sum_qty_actual,
+ 'name' => $keyActualM->name
+ );
+
+ $tmpProgressActualWeek += $progressActualWeek;
+ }
+ // }
+
+ $dataActivityPlanDate[] = array(
+ "date" => $loopDay,
+ "statusWeek" => new \DateTime($loopDay) == new \DateTime($loopDay . ' Friday') ? true : false,
+ "activity-plan" => $dataActivityPlan,
+ "activity-actual" => $dataActivityActual,
+ "tmpProgressActualWeek" => $tmpProgressActualWeek,
+ "progressPlanWeek" => $tmpProgressPlanWeek
+ );
+ }
+
+ $dataFinal[] = array(
+ // "date" => $dateWeek,
+ "proyek_name" => $dataProject->nama,
+ "data" => [
+ "date" => $dateWeek,
+ "percentagePlan" => $progressPlanKomulatifWeek,
+ "percentageReal" => $progressActualKomulatifWeek
+ // "data_details" => $dataActivityPlanDate
+ ]
+ );
+
+ return $dataFinal;
+ }
+
public function calculateProgressBasedOnSimple($keyGantt)
{
DB::enableQueryLog();
diff --git a/app/Http/Controllers/ActivityController.php b/app/Http/Controllers/ActivityController.php
old mode 100644
new mode 100755
index 21dc80c..2571438
--- a/app/Http/Controllers/ActivityController.php
+++ b/app/Http/Controllers/ActivityController.php
@@ -1,9 +1,11 @@
json(['status' => 'success', 'data' => $dataGantt, 'code' => 200], 200);
}
+ public function activitySCurve($proyek_id, $gantt_id)
+ {
+
+ // "data": [
+ // {
+ // "id": 1,
+ // "text": "Office itinerancy",
+ // "type": "project",
+ // "order": "10",
+ // "progress": 0.4,
+ // "open": true,
+ // "user":"0",
+ // "start_date": "02-04-2024 00:00",
+ // "duration": 17,
+ // "end_date": "19-04-2024 00:00",
+ // "parent": 0
+ // }
+ // ],
+ // "links": [
+ // {
+ // "id": "1",
+ // "source": "1",
+ // "target": "2",
+ // "type": "1"
+ // }
+ // ]
+ // }
+
+ $checkHeader = Activity::where('version_gantt_id', $gantt_id)->where('type_activity', 'header')->count();
+ $finalData = [];
+ if ($checkHeader > 0) {
+ $dataHeader = Activity::select('id', 'name as text', 'type_activity as type', 'persentase_progress as progress', 'start_date', 'end_date', 'duration', 'parent_id', 'sortorder as order')->where('version_gantt_id', $gantt_id)->where('type_activity', 'header')->first();
+
+ // $dataHeader->start_date1 = isset($dataHeader->start) ? date_format(date_create($dataHeader->start), "d-m-Y H:i") : NULL;
+ // $dataHeader->end_date1 = isset($dataHeader->end) ? date_format(date_create($dataHeader->end), "d-m-Y H:i") : NULL;
+
+ $dataHeader->progress = $dataHeader->progress / 100;
+
+ $dataHeader->type = "project";
+ $dataHeader->text = $dataHeader->name;
+ $finalData[] = $dataHeader;
+ $data = Activity::select('id', 'name as text', 'type_activity as type', 'persentase_progress as progress', 'start_date', 'end_date', 'duration', 'parent_id', 'sortorder as order')->where('version_gantt_id', $gantt_id)->where('parent_id', $dataHeader->id)->orderBy('sortorder', 'asc')->get();
+ } else {
+ $data = Activity::select('id', 'name as text', 'type_activity as type', 'persentase_progress as progress', 'start_date', 'end_date', 'duration', 'parent_id', 'sortorder as order')->where('version_gantt_id', $gantt_id)->whereNull('parent_id')->orderBy('sortorder', 'asc')->get();
+ }
+
+ foreach ($data as $objRow) {
+ $type = "project";
+ $dataChildren = $this->getChildrenSCurve($gantt_id, $objRow->id);
+
+ if ($objRow->type_activity == "milestone")
+ $type = $objRow->type_activity;
+ if (empty($dataChildren))
+ $type = "task";
+
+ $objRow->parent = $objRow->parent_id ? $objRow->parent_id : null;
+ // $objRow->start_date = isset($objRow->start) ? date_format(date_create($objRow->start), "d-m-Y H:i") : NULL;
+ // $objRow->end_date1 = isset($objRow->end) ? date_format(date_create($objRow->end), "d-m-Y H:i") : NULL;
+
+ $objRow->progress = $objRow->persentase_progress / 100;
+ $objRow->type = $type;
+ $finalData[] = $objRow;
+ $finalData = array_merge($finalData, $dataChildren);
+ }
+
+ $dataLink = Link::where('version_gantt_id', $gantt_id)->get();
+ $finalLink = [];
+ foreach ($dataLink as $objRow) {
+ $dataRow = array(
+ 'id' => $objRow->id,
+ 'source' => $objRow->s_activity_id,
+ 'target' => $objRow->t_activity_id,
+ 'type' => $objRow->type_link,
+ 'code' => $objRow->code_link
+ );
+ if ($objRow->lag)
+ $dataRow['lag'] = $objRow->lag;
+ $finalLink[] = $dataRow;
+ }
+
+ $resultData = array(
+ "data" => $finalData,
+ "links" => $finalLink
+ );
+
+ return response()->json(['status' => 'success', 'data' => $resultData, 'code' => 200], 200);
+ }
+
private function getDataActivity($id)
{
$checkHeader = Activity::where('version_gantt_id', $id)->where('type_activity', 'header')->count();
@@ -116,6 +208,43 @@ class ActivityController extends Controller
return $resultData;
}
+ private function getChildrenSCurve($gantt_id, $parent_id)
+ {
+ $finalData = [];
+
+ $data = Activity::select('id', 'name as text', 'type_activity as type', 'bobot_planning', 'persentase_progress as progress', 'start_date', 'end_date', 'duration', 'parent_id', 'sortorder as order')
+ ->where('version_gantt_id', $gantt_id)->where('parent_id', $parent_id)->orderBy('sortorder', 'asc')->get();
+ foreach ($data as $objRow) {
+ $objRow->parent = $parent_id;
+ $objRow->progress = (float) $objRow->bobot_planning / 100;
+ // $objRow->start_date1 = isset($objRow->start) ? date_format(date_create($objRow->start), "d-m-Y H:i") : NULL;
+ // $objRow->end_date1 = isset($objRow->end) ? date_format(date_create($objRow->end), "d-m-Y H:i") : NULL;
+
+ $dataChildren = $this->getChildrenSCurve($gantt_id, $objRow->id);
+ if ($objRow->type_activity == "milestone") {
+ $objRow->type = $objRow->type_activity;
+ // $objRow->actual_start = isset($objRow->actual_start) ? date_format(date_create($objRow->actual_start), "d-m-Y") : NULL;
+ } elseif (empty($dataChildren)) {
+ $objRow->type = "task";
+ // $objRow->actual_start = isset($objRow->actual_start) ? date_format(date_create($objRow->actual_start), "d-m-Y") : NULL;
+ // $objRow->actual_end = isset($objRow->actual_end) ? date_format(date_create($objRow->actual_end), "d-m-Y") : NULL;
+ // if(isset($objRow->actual_start)){
+ // $objRow->auto_scheduling = false;
+ // }
+ } else {
+ $objRow->type = "project";
+ // $actualStart = $this->getFirstLastDateActivity($objRow->id, "start");
+ // $objRow->actual_start = isset($actualStart) ? date_format(date_create($actualStart), "d-m-Y") : NULL;
+
+ // $actualEnd = $this->getFirstLastDateActivity($objRow->id, "end");
+ // $objRow->actual_end = isset($actualEnd) ? date_format(date_create($actualEnd), "d-m-Y") : NULL;
+ }
+ $finalData[] = $objRow;
+ $finalData = array_merge($finalData, $dataChildren);
+ }
+ return $finalData;
+ }
+
private function getChildren($gantt_id, $parent_id)
{
$finalData = [];
@@ -139,7 +268,7 @@ class ActivityController extends Controller
$objRow->type = "task";
$objRow->actual_start = isset($objRow->actual_start) ? date_format(date_create($objRow->actual_start), "Y-m-d") : NULL;
$objRow->actual_end = isset($objRow->actual_end) ? date_format(date_create($objRow->actual_end), "Y-m-d") : NULL;
- if(isset($objRow->actual_start)){
+ if (isset($objRow->actual_start)) {
$objRow->auto_scheduling = false;
}
} else {
@@ -156,66 +285,67 @@ class ActivityController extends Controller
return $finalData;
}
- public function getActivityFirst($parentId){
+ public function getActivityFirst($parentId)
+ {
$activity = Activity::where('parent_id', $parentId)->orderByRaw('actual_start ASC')->first();
if (!isset($activity)) {
return null;
}
- if($activity->type_activity == "task"){
+ if ($activity->type_activity == "task") {
// Log::info("activity ", [$activity]);
return $activity->actual_start;
- }else{
+ } else {
return $this->getActivityFirst($activity->id);
}
-
}
- public function getFirstLastDateActivity($id, $params){
- if($params == "start"){
+ public function getFirstLastDateActivity($id, $params)
+ {
+ if ($params == "start") {
$data = Activity::select('id', 'parent_id', 'name', 'actual_start')->where('parent_id', $id)->get();
- }else{
+ } else {
$data = Activity::select('id', 'parent_id', 'name', 'actual_end')->where('parent_id', $id)->get();
}
- $parent = Activity::findOrFail($id);
- $dataFinal=[];
+ $parent = Activity::findOrFail($id);
+ $dataFinal = [];
foreach ($data as $val) {
$activity = $this->getchildActivityForActual($val->id, $params);
$dataFinal[] = $val;
$dataFinal = array_merge($dataFinal, $activity);
-
}
- if($params == "start"){
- $actualStartValues = array_column(array_filter($dataFinal, function($item) {
+ if ($params == "start") {
+ $actualStartValues = array_column(array_filter($dataFinal, function ($item) {
return isset($item['actual_start']);
}), 'actual_start');
$returnActualStartOrEnd = count($actualStartValues) > 0 ? min($actualStartValues) : null;
- if (isset($parent)) {
- $parent->actual_start = $returnActualStartOrEnd;
- $parent->save();
- }
- }else{
- $actualEndValues = array_column(array_filter($dataFinal, function($item) {
+ if (isset($parent)) {
+ $parent->actual_start = $returnActualStartOrEnd;
+ $parent->save();
+ }
+ } else {
+ $actualEndValues = array_column(array_filter($dataFinal, function ($item) {
return isset($item['actual_end']);
}), 'actual_end');
- $returnActualStartOrEnd = count($actualEndValues) == count($dataFinal) ? max($actualEndValues) : null;
- if (isset($parent)) {
- $parent->actual_end = $returnActualStartOrEnd;
- $parent->save();
- }
+ $returnActualStartOrEnd = count($actualEndValues) == count($dataFinal) && count($actualEndValues) > 0 ? max($actualEndValues) : null;
+ if (isset($parent)) {
+ $parent->actual_end = $returnActualStartOrEnd;
+ $parent->save();
+ }
}
// return json_encode(["min"=>$minActualStart, "max"=>$maxActualStart]);
return $returnActualStartOrEnd;
}
- public function getchildActivityForActual($parent, $params){
- if($params == "start"){
+ public function getchildActivityForActual($parent, $params)
+ {
+ if ($params == "start") {
$activity = Activity::select('id', 'actual_start')->where('parent_id', $parent)->get();
- }else{
+ } else {
$activity = Activity::select('id', 'actual_end')->where('parent_id', $parent)->get();
}
$temp = [];
- foreach($activity as $val1){
+ foreach ($activity as $val1) {
$getChild = $this->getchildActivityForActual($val1->id, $params);
$temp[] = $val1;
$temp = array_merge($temp, $getChild);
@@ -223,18 +353,18 @@ class ActivityController extends Controller
return $temp;
}
- public function getActivityLast($parentId){
+ public function getActivityLast($parentId)
+ {
$activity = Activity::where('parent_id', $parentId)->orderByRaw('actual_end DESC')->first();
if (!isset($activity)) {
return null;
}
- if($activity->type_activity == "task"){
+ if ($activity->type_activity == "task") {
// Log::info("activity ", [$activity]);
return $activity->actual_end;
- }else{
+ } else {
return $this->getActivityLast($activity->id);
}
-
}
private function cloneTemplate($id, $proyek_id, $hierarchy_ftth_id = null)
@@ -422,53 +552,54 @@ class ActivityController extends Controller
return response()->json(['status' => 'success', 'message' => 'Activity Updated!', 'code' => 200], 200);
}
- public function updateSchedule($ganttId){
- if (empty($ganttId) || !is_int((int) $ganttId))
+ public function updateSchedule($ganttId)
+ {
+ if (empty($ganttId) || !is_int((int) $ganttId))
return response()->json(['status' => 'failed', 'message' => 'id is required!', 'code' => 400], 400);
- $activities = Activity::where('version_gantt_id', $ganttId)->get();
+ $activities = Activity::where('version_gantt_id', $ganttId)->get();
if (!$activities)
return response()->json(['status' => 'failed', 'message' => 'Activities not found!', 'code' => 404], 404);
$duration = 0;
- foreach ($activities as $key => $activity) {
- $assignMaterial = AssignMaterial::where('activity_id', $activity->id)->first();
+ foreach ($activities as $key => $activity) {
+ $assignMaterial = AssignMaterial::where('activity_id', $activity->id)->first();
if (isset($assignMaterial)) {
$statusActivity = $assignMaterial->status_activity;
} else {
$statusActivity = '';
}
- if (isset($activity->planned_start) && isset($activity->planned_end) && $statusActivity != "done") {
- // todo check report for no report / progress == 0
- $today = new DateTime();
- $endDate = new DateTime($activity->end_date);
- $startDate = new DateTime($activity->start_date);
- $plannedStart = new DateTime($activity->planned_start);
- $plannedEnd = new DateTime($activity->planned_end);
- $duration = MasterFunctionsHelper::countDays($ganttId, $plannedStart, $plannedEnd);
- if ($today >= $endDate) {
- $endDate = $today;
- $bobotPlanning = (int) $activity->bobot_planning;
- $rerataBobot = $duration > 0 ? $bobotPlanning / $duration : 0;
- $bobotActual = (int) $activity->persentase_progress/100 * $bobotPlanning;
- $sisaBobot = $bobotPlanning - $bobotActual;
- $sisaHari = $rerataBobot > 0 ? $sisaBobot / $rerataBobot : 0;
- $endDate->modify("+".ceil($sisaHari)." Days");
- $actualDuration = MasterFunctionsHelper::countDays($ganttId, $startDate, $endDate);
- $activity->duration = $actualDuration;
- $activity->end_date = $endDate;
- $activity->save();
- }
- }
- }
+ if (isset($activity->planned_start) && isset($activity->planned_end) && $statusActivity != "done") {
+ // todo check report for no report / progress == 0
+ $today = new DateTime();
+ $endDate = new DateTime($activity->end_date);
+ $startDate = new DateTime($activity->start_date);
+ $plannedStart = new DateTime($activity->planned_start);
+ $plannedEnd = new DateTime($activity->planned_end);
+ $duration = MasterFunctionsHelper::countDays($ganttId, $plannedStart, $plannedEnd);
+ if ($today >= $endDate) {
+ $endDate = $today;
+ $bobotPlanning = (int) $activity->bobot_planning;
+ $rerataBobot = $duration > 0 ? $bobotPlanning / $duration : 0;
+ $bobotActual = (int) $activity->persentase_progress / 100 * $bobotPlanning;
+ $sisaBobot = $bobotPlanning - $bobotActual;
+ $sisaHari = $rerataBobot > 0 ? $sisaBobot / $rerataBobot : 0;
+ $endDate->modify("+" . ceil($sisaHari) . " Days");
+ $actualDuration = MasterFunctionsHelper::countDays($ganttId, $startDate, $endDate);
+ $activity->duration = $actualDuration;
+ $activity->end_date = $endDate;
+ $activity->save();
+ }
+ }
+ }
return response()->json(['status' => 'success', 'message' => 'Activities Updated!', 'code' => 200], 200);
- }
+ }
public function batchUpdate(Request $request, $ganttId)
{
$entities = $request->all();
if (empty($ganttId) || !is_int((int) $ganttId))
return response()->json(['status' => 'failed', 'message' => 'id is required!', 'code' => 400], 400);
- $activity = Activity::where('version_gantt_id',$ganttId)->get();
+ $activity = Activity::where('version_gantt_id', $ganttId)->get();
$link = Link::where('version_gantt_id', $ganttId)->get();
if (!$activity)
return response()->json(['status' => 'failed', 'message' => 'Activity not found!', 'code' => 404], 404);
@@ -479,6 +610,7 @@ class ActivityController extends Controller
$activityToUpdate = $activity->firstWhere('id', $entity['data']['id']);
$entity['data']['name'] = $entity['data']['text'];
$entity['data']['persentase_progress'] = $entity['data']['progress'] * 100;
+ $entity['data']['type_activity'] = $entity['data']['type'] ?? 'task';
if (isset($entity['data']['rencana_biaya'])) {
$entity['data']['rencana_biaya'] = str_replace(",", ".", $entity['data']['rencana_biaya']);
}
@@ -499,27 +631,47 @@ class ActivityController extends Controller
public function delete($id)
{
- if (!$data = Activity::find($id))
+ DB::beginTransaction();
+ $activity_id = (int)$id;
+ $data = Activity::query()
+ ->from('m_activity as ma')
+ ->select('mp.company_id')
+ ->join('m_proyek as mp','ma.proyek_id','mp.id')
+ ->where('ma.id', $activity_id);
+ $cloneQuery = clone $data;
+ if (!$data->exists()) {
+ DB::rollBack();
return response()->json(['status' => 'failed', 'action' => 'error', 'message' => 'Data not found!', 'code' => 404], 404);
- $this->deleteRelative($id);
- if (!$data->delete())
- return response()->json(['status' => 'failed', 'action' => 'error', 'message' => 'data activity failed deleted!', 'code' => 500], 500);
+ }
- return response()->json(['status' => 'success', "action" => "deleted", 'message' => 'data activity successfully deleted!', 'code' => 200], 200);
+ $this->deleteRelative($activity_id, $cloneQuery->first()->company_id);
+
+ if (!$data->delete()) {
+ DB::rollBack();
+ return response()->json(['status' => 'failed', 'action' => 'error', 'message' => 'Data activity failed deleted!', 'code' => 500], 500);
+ }
+ DB::commit();
+ return response()->json(['status' => 'success', "action" => "deleted", 'message' => 'Data activity successfully deleted!', 'code' => 200], 200);
}
- private function deleteRelative($activity_id)
+ private function deleteRelative($activity_id, $company_id)
{
- UserToActivity::where('activity_id', $activity_id)->delete();
- AssignMaterial::where('activity_id', $activity_id)->delete();
- $dataAd = ActivityDokumen::where("activity_id", $activity_id)->get();
- foreach ($dataAd as $ad) {
- if(file_exists($this->pathActivityDocument.$ad->file)){
- unlink($this->pathActivityDocument.$ad->file);
- }
- }
- ActivityDokumen::where("activity_id", $activity_id)->delete();
- }
+ DB::transaction(function() use($activity_id, $company_id) {
+ UserToActivity::where('activity_id', $activity_id)->delete();
+ AssignMaterial::where('activity_id', $activity_id)->delete();
+ $dataAd = ActivityDokumen::where("activity_id", $activity_id)->get();
+ $company = Company::find($company_id);
+ if($company) {
+ $destinationPath = $this->setCustomeDirectoryUpload($company['company_name']);
+ foreach ($dataAd as $ad) {
+ if (file_exists($destinationPath['pathActivityDocument'] . $ad->file)) {
+ unlink($destinationPath['pathActivityDocument'] . $ad->file);
+ }
+ }
+ ActivityDokumen::where("activity_id", $activity_id)->delete();
+ }
+ });
+ }
public function getUpdate($id)
{
@@ -541,27 +693,28 @@ class ActivityController extends Controller
return response()->json(['status' => 'success', 'code' => 200, 'data' => $dataGet, 'totalRecord' => $totalRecord], 200);
}
- public function searchAnalysisPrep(Request $request)
+ public function searchAnalysisPrep(Request $request)
{
$data = $request->all();
- $dataGet = DB::table('m_activity')
- ->select('m_activity.name')
- ->where('m_activity.proyek_id', $data['columns'][0]['value'])
- ->where('m_activity.type_activity', 'task')
- // ->where('m_activity.persentase_progress', '>', 0)
- ->groupByRaw('m_activity.name')
- ->get();
- return response()->json(['status' => 'success', 'code' => 200, 'data' => $dataGet ], 200);
+ $dataGet = DB::table('m_activity')
+ ->select('m_activity.name')
+ ->where('m_activity.proyek_id', $data['columns'][0]['value'])
+ ->where('m_activity.type_activity', 'task')
+ // ->where('m_activity.persentase_progress', '>', 0)
+ ->groupByRaw('m_activity.name')
+ ->get();
+ return response()->json(['status' => 'success', 'code' => 200, 'data' => $dataGet], 200);
}
- public function searchAnalysis(Request $request)
+ public function searchAnalysis(Request $request)
{
$dataBuilder = $this->setUpPayload($request->all(), 'm_activity');
$builder = $dataBuilder['builder'];
- $dataGet = $builder->select(
+ $dataGet = $builder->select(
'selfTable.name',
'persentase_progress',
'selfTable.start_date',
+ 'selfTable.id',
'selfTable.end_date',
'selfTable.planned_start',
'selfTable.planned_end',
@@ -571,9 +724,10 @@ class ActivityController extends Controller
'm_version_gantt.name_version',
DB::raw('user_names.user_name as user_name'),
DB::raw('SUM(report_activity_material.qty) as qty'),
- 'assign_material_to_activity.qty_planning',
+ // DB::raw('SUM(assign_material_to_activity.qty_planning) as qty_planning'),
'assign_material_to_activity.id as join_third_id'
)
+ ->addSelect(DB::raw('(SELECT SUM(assign_material_to_activity.qty_planning) FROM assign_material_to_activity WHERE assign_material_to_activity.activity_id = report_activity_material.activity_id) as qty_planning'))
->join('m_version_gantt', 'm_version_gantt.id', '=', 'selfTable.version_gantt_id')
->leftJoin('assign_hr_to_activity', 'assign_hr_to_activity.activity_id', '=', 'selfTable.id')
->leftJoin('report_activity_material', 'report_activity_material.activity_id', '=', 'selfTable.id')
@@ -584,15 +738,14 @@ class ActivityController extends Controller
GROUP BY activity_id) as user_names'), function ($join) {
$join->on('user_names.activity_id', '=', 'selfTable.id');
})
+ ->where('assign_material_to_activity.id', '=', DB::raw('report_activity_material.assign_material_id'))
->groupBy('selfTable.id')
- ->groupBy('selfTable.name')
- ->groupBy('selfTable.persentase_progress')
->groupBy('m_version_gantt.name_version')
- ->groupBy('assign_material_to_activity.qty_planning')
->groupBy('assign_material_to_activity.id')
->groupBy('user_names.user_name')
+ ->groupBy('report_activity_material.activity_id')
->get();
- return response()->json(['status' => 'success', 'code' => 200, 'data' => $dataGet ], 200);
+ return response()->json(['status' => 'success', 'code' => 200, 'data' => $dataGet], 200);
}
// before upload file
public function importOld(Request $request)
@@ -651,8 +804,7 @@ class ActivityController extends Controller
$data['activities'][$key]['weight'] = $parentWeight / $siblingsCount;
}
- }
- ;
+ };
}
$projectStart = Project::select('mulai_proyek')->where('id', $projectId)->first();
foreach ($data['activities'] as $i => $activity_row) {
@@ -991,13 +1143,29 @@ class ActivityController extends Controller
public function uploadTmpImport(Request $request)
{
+ DB::beginTransaction();
if ($request->hasFile('dokumen')) {
$document = $request->file('dokumen');
$gantt_id = $request->gantt_id;
- $name = $document->getClientOriginalName();
+ $timeNow = Carbon::now();
+
+ $originalFilename = $document->getClientOriginalName();
+ $extension = pathinfo($originalFilename, PATHINFO_EXTENSION);
+ $filename = pathinfo($originalFilename, PATHINFO_FILENAME);
+ $name = $filename . '_' . $timeNow->format('d-m-y-His') . '.' . $extension;
+
+ // Limited Storage
+ $company = Company::where('company_name', $request->company_name)->first();
+ if($company) {
+ $destinationPath = $this->setCustomeDirectoryUpload($company['company_name']);
+ $getLimitStorage = $this->setLimitsStorage($company, $document, $destinationPath['pathTmpImport'], $destinationPath);
+ }
+ if (isset($getLimitStorage)) {
+ if($getLimitStorage === false) {
+ DB::rollBack();
+ return response()->json(['status' => 'failed', 'message' => 'Limited storage maximum!', 'code' => 500], 500);
+ }
- $result = $document->move($this->pathTmpImport, $name);
- if ($result) {
$data = [
'gantt_id' => (int) $gantt_id,
'file' => $name,
@@ -1006,15 +1174,18 @@ class ActivityController extends Controller
$result = TmpImport::create($data);
- if (!$result) {
- unlink($this->pathTmpImport . $name);
+ if (!$document->move($destinationPath['pathTmpImport'], $name) && $result) {
+ unlink($destinationPath['pathTmpImport'].$name);
+ DB::rollBack();
return response()->json(['status' => 'failed', 'message' => 'Upload failed!', 'code' => 500], 500);
}
+ DB::commit();
return response()->json(['status' => 'success', 'message' => 'Upload successful!', 'code' => 200], 200);
-
}
+ DB::rollBack();
return response()->json(['status' => 'failed', 'message' => 'Upload failed!', 'code' => 500], 500);
}
+ DB::rollBack();
return response()->json(['status' => 'failed', 'message' => 'File is required!', 'code' => 400], 400);
}
@@ -1030,4 +1201,9 @@ class ActivityController extends Controller
}
return response()->json(['status' => 'success', 'data' => $request, 'message' => 'Update successful!', 'code' => 200], 200);
}
+
+ // public function recalculateProject($by, $id){
+ // // query get activity
+ // $cekActivity =
+ // }
}
diff --git a/app/Http/Controllers/ActivityDokumenController.php b/app/Http/Controllers/ActivityDokumenController.php
index 999e860..4b3eaee 100644
--- a/app/Http/Controllers/ActivityDokumenController.php
+++ b/app/Http/Controllers/ActivityDokumenController.php
@@ -2,6 +2,7 @@
namespace App\Http\Controllers;
+use App\Models\Company;
use Illuminate\Http\Request;
use App\Models\ActivityDokumen;
@@ -16,50 +17,53 @@ class ActivityDokumenController extends Controller
return response()->json(['status'=>'success','data'=>$dataDokumen,'code'=>200], 200);
}
- public function delete($id)
+ public function delete($id, $company_id)
{
if(empty($id) || !is_int((int)$id))
return response()->json(['status'=>'failed','message'=>'Id is required!','code'=>400], 400);
$document = ActivityDokumen::find($id);
- if(!$document)
- return response()->json(['status'=>'failed','message'=>'Data not found!','code'=> 404], 404);
-
- if(file_exists($this->pathActivityDocument.$document->file))
- unlink($this->pathActivityDocument.$document->file);
-
+ if(!$document) {
+ return response()->json(['status'=>'failed','message'=>'Data not found!','code'=> 404], 404);
+ }
+ $company = Company::find($company_id);
+ if($company) {
+ $destinationPath = $this->setCustomeDirectoryUpload($company['company_name']);
+ if(file_exists($destinationPath['pathActivityDocument'].$document->file)){
+ unlink($destinationPath['pathActivityDocument'].$document->file);
+ }
+ }
$document->delete();
return response()->json(['status'=>'success','message'=>'Dokumen deleted successfully!','code'=>200], 200);
}
public function uploadProjectDokumen(Request $request)
{
- if(!$request->hasFile('dokumen'))
- return response()->json(['status'=>'failed','message'=>'file is required!','code'=>400], 400);
-
+ if(!$request->hasFile('dokumen')) {
+ return response()->json(['status'=>'failed','message'=>'file is required!','code'=>400], 400);
+ }
$activity_id = $request->activity_id;
$document = $request->file('dokumen');
$name = $document->getClientOriginalName();
-
- $result = $document->move($this->pathActivityDocument, $name);
-
- if(!$result)
+ $company = Company::find($request->company_id);
+ if($company) {
+ $destinationPath = $this->setCustomeDirectoryUpload($company['company_name']);
+ $result = $document->move($destinationPath['pathActivityDocument'], $name);
+ }
+ if(!$result || !$company) {
return response()->json(['status'=>'failed','message'=>'Upload failed!','code'=> 500], 500);
-
+ }
$data = [
'activity_id' => (int)$activity_id,
'file' => $name,
'description' => $request->description
];
-
$result = ActivityDokumen::create($data);
-
- if(!$result){
- unlink($this->pathActivityDocument.$name);
+ if(!$result || !$company) {
+ unlink($destinationPath['pathActivityDocument'].$name);
return response()->json(['status'=>'failed','message'=>'Upload failed!','code'=> 500], 500);
}
-
return response()->json(['status'=>'success','message'=>'Upload success!','code'=>200], 200);
}
@@ -75,21 +79,23 @@ class ActivityDokumenController extends Controller
return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200);
}
- public function downloadDokumen($id)
+ public function downloadDokumen($id, $company_id)
{
- if(empty($id) || !is_int((int)$id))
- return response()->json(['status'=>'failed','message'=>'Id is required!','code'=>400], 400);
-
+ if(empty($id) || !is_int((int)$id)) {
+ return response()->json(['status'=>'failed','message'=>'Id is required!','code'=>400], 400);
+ }
$document = ActivityDokumen::find($id);
-
- if(!$document)
- return response()->json(['status'=>'failed','message'=>'Data not found!','code'=>400], 400);
-
- if(file_exists($this->pathActivityDocument.$document->file)){
- $pathToFile = $this->pathActivityDocument.$document->file;
- return response()->download($pathToFile);
- }
-
+ $company = Company::find($company_id);
+ if(!$document || !$company) {
+ return response()->json(['status'=>'failed','message'=>'Data not found!','code'=>400], 400);
+ }
+ if($company) {
+ $destinationPath = $this->setCustomeDirectoryUpload($company['company_name']);
+ if(file_exists($destinationPath['pathActivityDocument'].$document->file)) {
+ $pathToFile = $destinationPath['pathActivityDocument'].$document->file;
+ return response()->download($pathToFile);
+ }
+ }
return response()->json(['status'=>'failed','message'=>'Data not found!','code'=>400], 400);
}
}
diff --git a/app/Http/Controllers/AssignMaterialController.php b/app/Http/Controllers/AssignMaterialController.php
index 3d78384..7a5e9d8 100644
--- a/app/Http/Controllers/AssignMaterialController.php
+++ b/app/Http/Controllers/AssignMaterialController.php
@@ -7,17 +7,20 @@ use App\Models\AssignMaterial;
use App\Models\RequestMaterial;
use App\Models\Activity;
use App\Models\ReportActivityMaterial;
-use Datatables;
+use Illuminate\Support\Facades\DB;
+use Yajra\Datatables\Datatables;
class AssignMaterialController extends Controller
{
- private function sanitizeDecimal($number) {
- $number = str_replace(".","",$number);
- $number = str_replace(",",".",$number);
+ private function sanitizeDecimal($number)
+ {
+ $number = str_replace(".", "", $number);
+ $number = str_replace(",", ".", $number);
return $number;
}
- public function add(Request $request){
+ public function add(Request $request)
+ {
$this->validate($request, [
'activity_id' => 'required',
'material_id' => 'required',
@@ -28,8 +31,8 @@ class AssignMaterialController extends Controller
$checkStock = RequestMaterial::where("id", $request->material_id)->first();
$currentStock = $checkStock->qty;
- if((int)$currentStock < (int)$request->qty_planning){
- return response()->json(['status'=>'failed','message'=>'Stock is not enough!','code'=> 500]);
+ if ((int)$currentStock < (int)$request->qty_planning) {
+ return response()->json(['status' => 'failed', 'message' => 'Stock is not enough!', 'code' => 500]);
}
$start_date = $activity->start_date;
@@ -42,56 +45,62 @@ class AssignMaterialController extends Controller
$data['budget'] = $checkStock->price;
$data['qty_planning'] = $this->sanitizeDecimal($data['qty_planning']);
- if ($planDate >= $startDate) {
+ if ($planDate >= $startDate) {
$result = AssignMaterial::create($data);
- return response()->json(['status'=>'success','message'=>'Data added!', 'code'=>200], 200);
- }else{
- return response()->json(['status'=>'failed','message'=>'Failed to add data!','code'=> 400], 400);
+ if($result) {
+ return response()->json(['status' => 'success', 'message' => 'Data added!', 'code' => 200], 200);
+ } else {
+ return response()->json(['status' => 'failed', 'message' => 'Failed to add data!', 'code' => 400], 400);
+ }
+ } else {
+ return response()->json(['status' => 'failed', 'message' => 'Failed to add data!', 'code' => 400], 400);
}
}
- public function update(Request $request, $id){
- if(empty($id) || !is_int((int)$id))
- return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
+ public function update(Request $request, $id)
+ {
+ if (empty($id) || !is_int((int)$id))
+ return response()->json(['status' => 'failed', 'message' => 'id is required!', 'code' => 400], 400);
$data = AssignMaterial::find($id);
- if(!$data)
- return response()->json(['status'=>'failed','message'=>'Data not found!','code'=> 404], 404);
+ if (!$data)
+ return response()->json(['status' => 'failed', 'message' => 'Data not found!', 'code' => 404], 404);
$result = $data->update($request->all());
- if($result)
- return response()->json(['status'=>'success','message'=> 'Data updated!','code'=> 200], 200);
+ if ($result)
+ return response()->json(['status' => 'success', 'message' => 'Data updated!', 'code' => 200], 200);
- return response()->json(['status'=>'failed','message'=>'Failed to update!','code'=> 500], 500);
+ return response()->json(['status' => 'failed', 'message' => 'Failed to update!', 'code' => 500], 500);
}
public function delete($id)
{
$data = AssignMaterial::where('id', $id)->first();
- $reports = ReportActivityMaterial::where('assign_material_id', $data->id)->get();
- if (isset($reports)) {
+ $reports = ReportActivityMaterial::where('assign_material_id', $data->id)->get();
+ if (isset($reports)) {
foreach ($reports as $report) {
$report->delete();
}
- }
+ }
- if($data->delete())
- return response()->json(['status'=>'success','message'=>'Data deleted!','code'=> 200], 200);
+ if ($data->delete())
+ return response()->json(['status' => 'success', 'message' => 'Data deleted!', 'code' => 200], 200);
- return response()->json(['status'=>'failed','message'=>'Failed to delete!','code'=> 500], 500);
+ return response()->json(['status' => 'failed', 'message' => 'Failed to delete!', 'code' => 500], 500);
}
- public function edit($id){
- if(empty($id) || !is_int((int)$id))
- return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
+ public function edit($id)
+ {
+ if (empty($id) || !is_int((int)$id))
+ return response()->json(['status' => 'failed', 'message' => 'id is required!', 'code' => 400], 400);
$result = AssignMaterial::find($id);
- if($result)
- return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200);
+ if ($result)
+ return response()->json(['status' => 'success', 'code' => 200, 'data' => $result], 200);
- return response()->json(['status'=>'failed','message'=>'Data not found!','code'=> 404], 404);
+ return response()->json(['status' => 'failed', 'message' => 'Data not found!', 'code' => 404], 404);
}
public function search(Request $request)
@@ -102,7 +111,7 @@ class AssignMaterialController extends Controller
$countBuilder = $dataBuilder['count'];
$dataGet = $builder->get();
$totalRecord = $countBuilder->count();
- return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200);
+ return response()->json(['status' => 'success', 'code' => 200, 'data' => $dataGet, 'totalRecord' => $totalRecord], 200);
}
public function list()
@@ -110,18 +119,21 @@ class AssignMaterialController extends Controller
$data = AssignMaterial::all();
$countData = $data->count();
- if($data)
- return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200);
+ if ($data)
+ return response()->json(['status' => 'success', 'code' => 200, 'data' => $data, 'totalRecord' => $countData], 200);
- return response()->json(['status'=>'failed','message'=>'Failed to get the data!','code'=> 500], 500);
+ return response()->json(['status' => 'failed', 'message' => 'Failed to get the data!', 'code' => 500], 500);
}
- public function datatables(Request $request){
+ public function datatables(Request $request)
+ {
$id_activity = $request->query('idact');
$type = $request->query('type') ?? "material";
$data = AssignMaterial::select(
- "assign_material_to_activity.*","m.description as material_name", "m.uom as uom"
- )
+ "assign_material_to_activity.*",
+ "m.description as material_name",
+ "m.uom as uom"
+ )
->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id")
->where('assign_material_to_activity.activity_id', $id_activity)
->where('assign_material_to_activity.type', $type)
@@ -129,93 +141,100 @@ class AssignMaterialController extends Controller
->get();
return Datatables::of($data)
->addIndexColumn()
- ->addColumn('action', function($row){
- $actionBtn = '';
+ ->addColumn('action', function ($row) {
+ $actionBtn = '';
return $actionBtn;
})
->rawColumns(['action'])->make(true);
}
- public function datatablesForReportActivity(Request $request){
+ public function datatablesForReportActivity(Request $request)
+ {
$id_activity = $request->query('idact');
- $data =
- AssignMaterial::select(
- AssignMaterial::raw('SUM(qty_planning) as qty_planning'),
- "m.description as material_name",
- "assign_material_to_activity.activity_id",
- "assign_material_to_activity.type"
- // "assign_material_to_activity.material_id",
- )
- ->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id")
- ->groupBy("m.description")
+ $query = AssignMaterial::select(
+ DB::raw('(SELECT SUM(assign_material_to_activity.qty_planning) FROM assign_material_to_activity WHERE assign_material_to_activity.activity_id = ram.activity_id) as qty_planning'),
+ DB::raw('SUM(ram.qty) as qty_sum'),
+ "m.description as material_name",
+ "assign_material_to_activity.activity_id"
+ )
+ ->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id");
+ if (!AssignMaterial::join("report_activity_material as ram", "ram.assign_material_id", "=", "assign_material_to_activity.id")->where("assign_material_to_activity.activity_id", $id_activity)->exists()) {
+ $query->leftJoin("report_activity_material as ram", "ram.assign_material_id", "=", "assign_material_to_activity.id");
+ } else {
+ $query->join("report_activity_material as ram", "ram.assign_material_id", "=", "assign_material_to_activity.id");
+ }
+ $data = $query->groupBy("m.description")
+ ->groupBy("ram.activity_id")
->groupBy("assign_material_to_activity.activity_id")
- ->groupBy("assign_material_to_activity.type")
- ->where("assign_material_to_activity.activity_id", $id_activity)->get();
+ ->where("assign_material_to_activity.activity_id", $id_activity)
+ ->get();
return Datatables::of($data)
->addIndexColumn()
- ->addColumn('qty_sum', function($row){
- $val_qty_act = AssignMaterial::select(ReportActivityMaterial::raw('SUM(ram.qty) as qty_sum'),"m.description as material_name1")
- ->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id")
- ->join("report_activity_material as ram", "ram.assign_material_id", "=", "assign_material_to_activity.id")
- ->groupBy("m.description")
- ->where("m.description", strval($row->material_name))
- ->where("ram.activity_id", $row->activity_id)->first();
- return $val_qty_act ? $val_qty_act->qty_sum : '-';
- })
- ->addColumn('status_activity', function($row){
+ // ->addColumn('qty_planning', function($row){
+ // $val_qty_act = AssignMaterial::select(ReportActivityMaterial::raw('SUM(ram.qty) as qty_sum'),"m.description as material_name1","m.id")
+ // ->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id")
+ // ->join("report_activity_material as ram", "ram.assign_material_id", "=", "assign_material_to_activity.id")
+ // ->groupBy("m.description")
+ // ->groupBy("m.id")
+ // ->where("m.description", strval($row->material_name))
+ // ->where("ram.activity_id", $row->activity_id)->first();
+ // return $val_qty_act ? $val_qty_act->qty_sum : '-';
+ // })
+ ->addColumn('status_activity', function ($row) {
$val_status = AssignMaterial::select("status_activity")
->join('m_req_material as m', 'm.id', '=', 'assign_material_to_activity.material_id')
->where('m.description', '=', $row->material_name)
->where("assign_material_to_activity.activity_id", $row->activity_id)->first();
return $val_status ? $val_status->status_activity : null;
})
- ->addColumn('start_activity', function($row){
+ ->addColumn('start_activity', function ($row) {
$val_start = AssignMaterial::select("start_activity")
->join('m_req_material as m', 'm.id', '=', 'assign_material_to_activity.material_id')
->where('m.description', '=', $row->material_name)
->where("assign_material_to_activity.activity_id", $row->activity_id)->first();
return $val_start ? $val_start->start_activity : null;
})
- ->addColumn('finish_activity', function($row){
+ ->addColumn('finish_activity', function ($row) {
$val_finish = AssignMaterial::select("finish_activity")
->join('m_req_material as m', 'm.id', '=', 'assign_material_to_activity.material_id')
->where('m.description', '=', $row->material_name)
->where("assign_material_to_activity.activity_id", $row->activity_id)->first();
return $val_finish ? $val_finish->finish_activity : null;
})
- ->addColumn('uom', function($row){
+ ->addColumn('uom', function ($row) {
$val_uom = RequestMaterial::select("uom")
->where('description', '=', $row->material_name)->first();
return $val_uom ? $val_uom->uom : null;
})
- ->addColumn('assign_material_id', function($row){
- $assignMaterial =AssignMaterial::select('assign_material_to_activity.id')->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id")
- ->where('activity_id', $row->activity_id)->where('m.description', $row->material_name)->first();
+ ->addColumn('assign_material_id', function ($row) {
+ $assignMaterial = AssignMaterial::select('assign_material_to_activity.id')->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id")
+ ->where('activity_id', $row->activity_id)->where('m.description', $row->material_name)->first();
return $assignMaterial ? $assignMaterial->id : null;
})
- ->addColumn('action', function($row){
+ ->addColumn('action', function ($row) {
$dataPlan = AssignMaterial::select('assign_material_to_activity.id')->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id")
->where('activity_id', $row->activity_id)->where('m.description', $row->material_name)->first();
- $actionBtn = '';
- $actionBtn .= '';
+ $actionBtn = '';
+ $actionBtn .= '';
return $actionBtn;
})
->rawColumns(['action'])->make(true);
}
- public function ForReportActivityByMaterial(Request $request){
+ public function ForReportActivityByMaterial(Request $request)
+ {
$id_activity = $request->idact;
- $data = AssignMaterial::select("assign_material_to_activity.*","m.description as material_name", "m.uom as uom")
+ $data = AssignMaterial::select("assign_material_to_activity.*", "m.description as material_name", "m.uom as uom")
->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id")
->where('assign_material_to_activity.activity_id', $id_activity)->get();
foreach ($data as $key) {
$val_qty_sum = ReportActivityMaterial::where('assign_material_id', '=', $key->id)->sum("qty");
}
$countData = $data->count();
- if($data){
- return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200);
- }else{
- return response()->json(['status'=>'failed','message'=>'failed get Assign material, please try again later!','code'=>400], 400);
+ if ($data) {
+ return response()->json(['status' => 'success', 'code' => 200, 'data' => $data, 'totalRecord' => $countData], 200);
+ } else {
+ return response()->json(['status' => 'failed', 'message' => 'failed get Assign material, please try again later!', 'code' => 400], 400);
}
}
}
diff --git a/app/Http/Controllers/AssignToolsController.php b/app/Http/Controllers/AssignToolsController.php
index 4e2b2c6..4185991 100644
--- a/app/Http/Controllers/AssignToolsController.php
+++ b/app/Http/Controllers/AssignToolsController.php
@@ -1,160 +1,159 @@
-validate($request, [
- 'activity_id' => 'required',
- 'tools_id' => 'required',
- 'qty_planning' => 'required',
- ]);
-
- $checkStock = ToolsResource::where("id", $request->tools_id)->first();
- $currentStock = $checkStock->qty;
- if((int)$currentStock < (int)$request->qty_planning){
- return response()->json(['status'=>'failed','message'=>'Not enough stock in warehouse!','code'=>400]);
- die();
- }
-
-
- $data = $request->all();
-
- $data['created_by'] = $this->currentName;
-
- $result = AssignTools::create($data);
- if($result){
- $checkStock = ToolsResource::find($request->tools_id);
- $newStock = (int)$checkStock->qty - (int)$request->qty_planning;
- $dataUpdate = array(
- "qty"=>$newStock,
- "updated_by"=>$this->currentName
- );
- $checkStock->update($dataUpdate);
- return response()->json(['status'=>'success','message'=>'Assign tools success!','code'=>200]);
- }else{
- return response()->json(['status'=>'failed','message'=>'Assign tools failed','code'=>400]);
- }
- }
-
- private function updateFromAdd($data){
- $assignTools = AssignTools::where("activity_id", $data->activity_id)->where("tools_id", $data->tools_id)->first();
-
- $newQty = (int)$assignTools->qty_planning + (int)$data->qty_planning;
- $dataUpdate = array(
- "qty_planning"=>$newQty,
- "updated_by"=>$this->currentName
- );
-
- $dataWillUpdate = AssignMaterial::where("activity_id", $data->activity_id)->where("tools_id", $data->tools_id);
-
- return $dataWillUpdate->update($dataUpdate);
- }
-
- public function update(Request $request, $id){
-
- if(!$id || (int) $id < 0 || $id==""){
- return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
- }
- $data = AssignTools::find($id);
- if($data){
- $result = $data->update($request->all());
- }else{
- return response()->json(['status'=>'failed','message'=>'Data Assign tools not found!','code'=>400], 400);
- die();
- }
-
- if($result){
- return response()->json(['status'=>'success','message'=>'Assign tools successfully updated!','code'=>200], 200);
- }else{
- return response()->json(['status'=>'failed','message'=>'Assign tools failed updated!','code'=>400], 400);
- }
- }
-
- public function delete($id)
- {
- $data = AssignTools::find($id);
-
- if($data){
- $id = $data->tools_id;
- $stock = $data->qty_planning;
- $toolsResource = ToolsResource::find($id);
- if($toolsResource){
- $oldStock = $toolsResource->qty;
- $newStock = $oldStock + $stock;
- $dataUpdate = array(
- "qty"=>$newStock,
- "updated_by"=>$this->currentName
- );
- $toolsResource->update($dataUpdate);
- }
-
- $delete = $data->delete();
- }else{
- return response()->json(['status'=>'failed','message'=>'Data Assign tools not found!','code'=>400], 400);
- die();
- }
-
-
- if($delete){
- return response()->json(['status'=>'success','message'=>'Assign tools successfully deleted!','code'=>200], 200);
- }else{
- return response()->json(['status'=>'failed','message'=>'Assign tools failed deleted!','code'=>400], 400);
- }
- }
-
- public function edit($id){
- if(!$id || (int) $id < 0 || $id==""){
- return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
- die();
- }
-
- $result = AssignTools::find($id);
-
- if($result){
- return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200);
- }else{
- return response()->json(['status'=>'failed','message'=>'failed get data Assign tools, please try again later!','code'=>400], 400);
- }
- }
-
- public function search(Request $request)
- {
- $payload = $request->all();
- $dataBuilder = $this->setUpPayload($payload, 'assign_tools_to_activity');
- $builder = $dataBuilder['builder'];
- $countBuilder = $dataBuilder['count'];
- $dataGet = $builder->get();
- $totalRecord = $countBuilder->count();
- return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200);
- }
-
- public function list()
- {
- $data = AssignTools::all();
- $countData = $data->count();
-
- if($data){
- return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200);
- }else{
- return response()->json(['status'=>'failed','message'=>'failed get Assign tools, please try again later!','code'=>400], 400);
- }
- }
-
- public function datatables(Request $request){
- $id_activity = $request->query('idact');
- $data = AssignTools::select("assign_tools_to_activity.*","m.name as tools_name","m.uom as uom")->join("m_tools_resource as m", "m.id", "=", "assign_tools_to_activity.tools_id")->where('assign_tools_to_activity.activity_id', $id_activity)->get();
- return Datatables::of($data)
- ->addIndexColumn()
- ->addColumn('action', function($row){
- $actionBtn = '';
- return $actionBtn;
- })
- ->rawColumns(['action'])->make(true);
- }
-}
+validate($request, [
+ 'activity_id' => 'required',
+ 'tools_id' => 'required',
+ 'qty_planning' => 'required',
+ ]);
+
+ $checkStock = ToolsResource::where("id", $request->tools_id)->first();
+ $currentStock = $checkStock->qty;
+ if((int)$currentStock < (int)$request->qty_planning){
+ return response()->json(['status'=>'failed','message'=>'Not enough stock in warehouse!','code'=>400]);
+ die();
+ }
+
+
+ $data = $request->all();
+
+ $data['created_by'] = $this->currentName;
+
+ $result = AssignTools::create($data);
+ if($result){
+ $checkStock = ToolsResource::find($request->tools_id);
+ $newStock = (int)$checkStock->qty - (int)$request->qty_planning;
+ $dataUpdate = array(
+ "qty"=>$newStock,
+ "updated_by"=>$this->currentName
+ );
+ $checkStock->update($dataUpdate);
+ return response()->json(['status'=>'success','message'=>'Assign tools success!','code'=>200]);
+ }else{
+ return response()->json(['status'=>'failed','message'=>'Assign tools failed','code'=>400]);
+ }
+ }
+
+ private function updateFromAdd($data){
+ $assignTools = AssignTools::where("activity_id", $data->activity_id)->where("tools_id", $data->tools_id)->first();
+
+ $newQty = (int)$assignTools->qty_planning + (int)$data->qty_planning;
+ $dataUpdate = array(
+ "qty_planning"=>$newQty,
+ "updated_by"=>$this->currentName
+ );
+
+ $dataWillUpdate = AssignMaterial::where("activity_id", $data->activity_id)->where("tools_id", $data->tools_id);
+
+ return $dataWillUpdate->update($dataUpdate);
+ }
+
+ public function update(Request $request, $id){
+
+ if(!$id || (int) $id < 0 || $id==""){
+ return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
+ }
+ $data = AssignTools::find($id);
+ if($data){
+ $result = $data->update($request->all());
+ }else{
+ return response()->json(['status'=>'failed','message'=>'Data Assign tools not found!','code'=>400], 400);
+ die();
+ }
+
+ if($result){
+ return response()->json(['status'=>'success','message'=>'Assign tools successfully updated!','code'=>200], 200);
+ }else{
+ return response()->json(['status'=>'failed','message'=>'Assign tools failed updated!','code'=>400], 400);
+ }
+ }
+
+ public function delete($id)
+ {
+ $data = AssignTools::find($id);
+
+ if($data){
+ $id = $data->tools_id;
+ $stock = $data->qty_planning;
+ $toolsResource = ToolsResource::find($id);
+ if($toolsResource){
+ $oldStock = $toolsResource->qty;
+ $newStock = $oldStock + $stock;
+ $dataUpdate = array(
+ "qty"=>$newStock,
+ "updated_by"=>$this->currentName
+ );
+ $toolsResource->update($dataUpdate);
+ }
+
+ $delete = $data->delete();
+ }else{
+ return response()->json(['status'=>'failed','message'=>'Data Assign tools not found!','code'=>400], 400);
+ die();
+ }
+
+
+ if($delete){
+ return response()->json(['status'=>'success','message'=>'Assign tools successfully deleted!','code'=>200], 200);
+ }else{
+ return response()->json(['status'=>'failed','message'=>'Assign tools failed deleted!','code'=>400], 400);
+ }
+ }
+
+ public function edit($id){
+ if(!$id || (int) $id < 0 || $id==""){
+ return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
+ die();
+ }
+
+ $result = AssignTools::find($id);
+
+ if($result){
+ return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200);
+ }else{
+ return response()->json(['status'=>'failed','message'=>'failed get data Assign tools, please try again later!','code'=>400], 400);
+ }
+ }
+
+ public function search(Request $request)
+ {
+ $payload = $request->all();
+ $dataBuilder = $this->setUpPayload($payload, 'assign_tools_to_activity');
+ $builder = $dataBuilder['builder'];
+ $countBuilder = $dataBuilder['count'];
+ $dataGet = $builder->get();
+ $totalRecord = $countBuilder->count();
+ return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200);
+ }
+
+ public function list()
+ {
+ $data = AssignTools::all();
+ $countData = $data->count();
+
+ if($data){
+ return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200);
+ }else{
+ return response()->json(['status'=>'failed','message'=>'failed get Assign tools, please try again later!','code'=>400], 400);
+ }
+ }
+
+ public function datatables(Request $request){
+ $id_activity = $request->query('idact');
+ $data = AssignTools::select("assign_tools_to_activity.*","m.name as tools_name","m.uom as uom")->join("m_tools_resource as m", "m.id", "=", "assign_tools_to_activity.tools_id")->where('assign_tools_to_activity.activity_id', $id_activity)->get();
+ return Datatables::of($data)
+ ->addIndexColumn()
+ ->addColumn('action', function($row){
+ $actionBtn = '';
+ return $actionBtn;
+ })
+ ->rawColumns(['action'])->make(true);
+ }
+}
diff --git a/app/Http/Controllers/AuthController.php b/app/Http/Controllers/AuthController.php
index 37ae48f..292670a 100644
--- a/app/Http/Controllers/AuthController.php
+++ b/app/Http/Controllers/AuthController.php
@@ -1,97 +1,204 @@
-middleware('auth:api', ['except' => ['login']]);
- }
-
- public function login(Request $request)
- {
- $username = $request->username;
- $password = $request->password;
- $remember = $request->remember;
- $is_mobile = $request->is_mobile;
-
- if (empty($username) || empty($password))
- return response()->json(['status' => 'error', 'message' => 'You must fill all the fields'], 400);
-
- $usernameCheck = false;
- $passwordCheck = false;
-
- if (User::where('username', $username)->exists())
- $usernameCheck = true;
-
- if (User::where('password', md5($password))->exists())
- $passwordCheck = true;
-
- if ($usernameCheck & $passwordCheck) {
- $user = User::where('username', $username)->where('password', md5($password))->first();
- if ($is_mobile) {
- $fcm_token = $request->fcm_token;
-
- if (!$fcm_token || $fcm_token == "")
- return response()->json(['status' => 'error', 'message' => 'FCM Token is required'], 400);
-
- $dataUpdateFcm = array(
- "fcm_token" => $fcm_token
- );
-
- $hr = User::find($user->id);
-
- if ($hr)
- $hr->update($dataUpdateFcm);
- }
-
- $dataRole = Role::find($user->role_id);
- $dataHierarchy = $this->getDataHierarchy($user->divisi_id, $user->id);
-
- if ($dataRole)
- $user->role = $dataRole;
-
- if ($dataHierarchy)
- $user->hierarchy = $dataHierarchy;
-
- if (!$token = Auth::login($user))
- return response()->json(['error' => 'Unauthorized'], 401);
-
- $ttl = 60;
- if ($remember)
- $ttl = 10080;
-
- // todo : change existing md5 hashed function to laravel's originally bcrypt
- /* $token = auth()->setTTL($ttl)->attempt(['username' => $username, 'password' => Hash::make($password)]); */
- /* dd(response()->json(['code'=>'200', 'token' => $token, 'ttl' => $ttl])); */
-
- return response()->json([
- 'code' => 200,
- 'data' => array(
- 'data_user' => $user,
- 'access_token' => $token,
- 'token_type' => 'bearer',
- 'expires_in' => auth()->factory()->getTTL() * $ttl,
- ),
- ]);
- } else {
- if (!$usernameCheck && !$passwordCheck)
- return response()->json(['code' => 201, 'message' => "username and password doesn't match"], 201);
- if (!$passwordCheck)
- return response()->json(['code' => 201, 'message' => "password doesn't match"], 201);
- if (!$usernameCheck)
- return response()->json(['code' => 201, 'message' => "username doesn't match"], 201);
- }
- }
-}
+middleware('auth:api', ['except' => ['login','sendEmail']]);
+ }
+
+ public function login(Request $request)
+ {
+ $username = $request->username;
+ $password = $request->password;
+ $remember = $request->remember;
+ $is_mobile = $request->is_mobile;
+ $usernameCheck = false;
+ $passwordCheck = false;
+
+ if (empty($username) || empty($password)) {
+ return response()->json(['status' => 'error', 'message' => 'You must fill all the fields'], 400);
+ }
+
+ $userQuery = User::query()
+ ->where('username',$username);
+
+ if ($userQuery->exists()) {
+ $usernameCheck = true;
+ $passwordValue = $userQuery->first()->password;
+ if($passwordValue === md5($password)) {
+ $passwordCheck = true;
+ }
+ }
+
+ if ($usernameCheck && $passwordCheck) {
+ $user = User::where([['username', $username],['password', md5($password)]])->first();
+ $checkExpiredOspro = $this->setExpiredTimeOspro($user['company_id']);
+ if($checkExpiredOspro === false && $user['company_id'] != null) {
+ return response()->json(['status' => 'error', 'message' => 'Expired! Please update license!'], 201);
+ }
+ if ($is_mobile) {
+ $fcm_token = $request->fcm_token;
+
+ if (!$fcm_token || $fcm_token == "") {
+ return response()->json(['status' => 'error', 'message' => 'FCM Token is required'], 400);
+ }
+
+ $dataUpdateFcm = array(
+ "fcm_token" => $fcm_token
+ );
+
+ $hr = User::find($user->id);
+
+ if ($hr) {
+ $hr->update($dataUpdateFcm);
+ }
+ }
+
+ $dataRole = Role::find($user->role_id);
+ $dataHierarchy = $this->getDataHierarchy($user->divisi_id, $user->id);
+ $configApp = Company::where('id', $user->company_id)->first();
+ if ($configApp) {
+ $logoLogin = json_decode($configApp->logo_login, true);
+ $favicon = json_decode($configApp->favicon_image, true);
+ $logoHeader = json_decode($configApp->logo_header, true);
+ $configApp->logo_login = $logoLogin;
+ $configApp->favicon_image = $favicon;
+ $configApp->logo_header = $logoHeader;
+ }
+
+ if ($configApp) {
+ $user->configApp = $configApp;
+ }
+
+ if ($dataRole) {
+ $user->role = $dataRole;
+ }
+
+ if ($dataHierarchy) {
+ $user->hierarchy = $dataHierarchy;
+ }
+
+ if (!$token = Auth::login($user)) {
+ return response()->json(['error' => 'Unauthorized'], 401);
+ }
+
+ $ttl = 60;
+ if ($remember) {
+ $ttl = 10080;
+ }
+
+ // todo : change existing md5 hashed function to laravel's originally bcrypt
+ /* $token = auth()->setTTL($ttl)->attempt(['username' => $username, 'password' => Hash::make($password)]); */
+ /* dd(response()->json(['code'=>'200', 'token' => $token, 'ttl' => $ttl])); */
+
+ return response()->json([
+ 'code' => 200,
+ 'data' => array(
+ 'data_user' => $user,
+ 'access_token' => $token,
+ 'token_type' => 'bearer',
+ 'expires_in' => auth()->factory()->getTTL() * $ttl,
+ ),
+ ]);
+ } else {
+ if (!$usernameCheck || !$passwordCheck) {
+ return response()->json(['code' => 201, 'message' => "Username or password doesn't match"], 201);
+ } else {
+ return response()->json(['code' => 500, 'message' => "Server error"], 500);
+ }
+ }
+ }
+
+
+ public function sendEmail(Request $request)
+ {
+ if (empty($request->password)) {
+ $hashed = Str::random(15);
+ } else {
+ $hashed = $request->password;
+ }
+
+ $email = $request->email;
+ $user = User::select('email', 'name', 'username')->where('email', $email)->first();
+
+ if (!$user || empty($email)) {
+ return response()->json(['status' => 'error', 'message' => 'e-mail not found'], 400);
+ } else {
+ if($request->username) {
+ $username = $request->username;
+ $name = $request->username;
+ } else {
+ $username = $user->username;
+ $name = $user->name;
+ }
+ $this->reqHttpCurl($email, $hashed, $username, $name);
+ if(empty($request->password)) {
+ if (User::where('email', $email)->update(['password' => md5($hashed)])) {
+ return response()->json(['status' => 'success', 'code' => 200, 'message' => 'Password already sent to mail'], 200);
+ }
+ } else {
+ return response()->json(['status' => 'success', 'code' => 200, 'message' => 'Password already sent to mail'], 200);
+ }
+ }
+ }
+
+ private function reqHttpCurl($email, $password, $username, $name)
+ {
+ $postData = [
+ "to" => $email,
+ "name" => $name,
+ "username" => $username,
+ "password" => $password,
+ "from" => "app.integrasia@integrasiautama.com",
+ "alias_from" => "OSPRO",
+ "subject" => "Registration OSPRO",
+ "body" => "registration-ospro"
+ ];
+
+ $curl = curl_init();
+
+ curl_setopt_array($curl, array(
+ CURLOPT_URL => URL_EMAIL, // your preferred url
+ CURLOPT_RETURNTRANSFER => true,
+ CURLOPT_ENCODING => "",
+ CURLOPT_MAXREDIRS => 10,
+ CURLOPT_TIMEOUT => 30000,
+ CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
+ CURLOPT_CUSTOMREQUEST => "POST",
+ CURLOPT_POSTFIELDS => json_encode($postData),
+ CURLOPT_HTTPHEADER => array(
+ // Set here requred headers
+ "accept: */*",
+ "accept-language: en-US,en;q=0.8",
+ "content-type: application/json",
+ ),
+ ));
+
+ $response = curl_exec($curl);
+ $err = curl_error($curl);
+
+ curl_close($curl);
+
+ if ($err) {
+ echo "cURL Error #:" . $err;
+ } else {
+ print_r(json_decode($response));
+ }
+ }
+}
diff --git a/app/Http/Controllers/CompanyController.php b/app/Http/Controllers/CompanyController.php
index 7e8938d..70280bf 100644
--- a/app/Http/Controllers/CompanyController.php
+++ b/app/Http/Controllers/CompanyController.php
@@ -2,28 +2,38 @@
namespace App\Http\Controllers;
-use App\Models\Company;
+use App\Models\{User, RoleMenu, Role, ProductTransaction, MenuCompany, Company};
use Illuminate\Http\Request;
+use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\File;
+use Carbon\Carbon;
class CompanyController extends Controller
{
public function add(Request $request)
{
$this->validate($request, [
- 'name' => 'required',
- 'description' => 'required'
+ 'company_name' => 'required',
+ 'registration_no' => 'required',
+ 'template_id' => 'required',
+ 'is_active' => 'required',
+ 'type_paket' => 'required|in:Free,Basic,Enterprise',
+ 'base_url' => 'required'
]);
$data = $request->all();
$data['created_by'] = $this->currentName;
-
+ if(isset($data['base_url']) && $data['base_url'] != NULL) {
+ $data['base_url'] = json_encode($data['base_url'], true);
+ }
$result = Company::create($data);
+ $addTransaction = $this->addTransaction($result['id'],$data['type_paket']);
- if ($result) {
- return response()->json(['status' => 'success', 'message' => 'add Company successfully!', 'code' => 200], 200);
+ if ($result && $addTransaction) {
+ return response()->json(['status' => 'success','data' => $result, 'message' => 'Add Company successfully!', 'code' => 200], 200);
} else {
- return response()->json(['status' => 'failed', 'message' => 'add data Company failed!', 'code' => 400], 400);
+ return response()->json(['status' => 'failed', 'message' => 'Add data Company failed!', 'code' => 400], 400);
}
}
@@ -51,15 +61,18 @@ class CompanyController extends Controller
$data = Company::find($id);
+ if(isset($data['base_url']) && $data['base_url'] != NULL) {
+ $data->update(['base_url'=>null]);
+ $data['base_url'] = json_encode($data['base_url'], true);
+ }
if ($data) {
$result = $data->update($request->all());
+ $updateTransaction = $this->updateTransaction($id,$request->type_paket);
} else {
return response()->json(['status' => 'failed', 'message' => 'data Company not found!', 'code' => 400], 400);
die();
}
-
-
- if ($result) {
+ if ($result && $updateTransaction) {
return response()->json(['status' => 'success', 'message' => 'data Company successfully updated!', 'code' => 200], 200);
} else {
return response()->json(['status' => 'failed', 'message' => 'data Company failed updated!', 'code' => 400], 400);
@@ -68,20 +81,67 @@ class CompanyController extends Controller
public function delete($id)
{
- $data = Company::find($id);
-
+ DB::beginTransaction();
+ $data = Company::find((int)$id);
if ($data) {
- $delete = $data->delete();
+ $this->deleteRelative($data);
+ if ($data->delete()) {
+ DB::commit();
+ return response()->json(['status' => 'success', 'message' => 'Data Company successfully deleted!', 'code' => 200], 200);
+ } else {
+ DB::rollBack();
+ return response()->json(['status' => 'failed', 'message' => 'Data Company failed deleted!', 'code' => 400], 400);
+ }
} else {
- return response()->json(['status' => 'failed', 'message' => 'data Company not found!', 'code' => 400], 400);
+ DB::rollBack();
+ return response()->json(['status' => 'failed', 'message' => 'Data Company not found!', 'code' => 400], 400);
die();
}
+ }
+
+ private function deleteRelative($data)
+ {
+ $directory = 'assets/' . $data['company_name'];
+ if (is_dir($directory)) {
+ File::deleteDirectory($directory);
+ }
+ MenuCompany::where('company_id', $data['id'])->delete();
+ User::where('company_id', $data['id'])->delete();
+ $role = Role::where('company_id', $data['id'])->first();
+ if ($role) {
+ RoleMenu::where('role_id', $role->id)->delete();
+ $role->delete();
+ }
+ ProductTransaction::where('company_id', $data['id'])->delete();
+ }
- if ($delete) {
- return response()->json(['status' => 'success', 'message' => 'data Company successfully deleted!', 'code' => 200], 200);
+ protected function addTransaction($id_company, $type_paket)
+ {
+ $currentDate = Carbon::now();
+ $finalDate = $currentDate->copy()->addDays(30);
+ $formData = array(
+ 'company_id' => (int)$id_company,
+ 'type_paket' => $type_paket,
+ 'exp_ospro' => $finalDate,
+ 'amount' => $type_paket === 'Free' ? 0 : 250000
+ );
+ $result = ProductTransaction::create($formData);
+ if($result) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ protected function updateTransaction($id_company, $type_paket)
+ {
+ $result = ProductTransaction::where('company_id', (int)$id_company)->first();
+ $result->update(['type_paket' => $type_paket]);
+ if($result) {
+ return true;
} else {
- return response()->json(['status' => 'failed', 'message' => 'data Company failed deleted!', 'code' => 400], 400);
+ return false;
}
}
diff --git a/app/Http/Controllers/ContactSalesController.php b/app/Http/Controllers/ContactSalesController.php
new file mode 100644
index 0000000..bfe4521
--- /dev/null
+++ b/app/Http/Controllers/ContactSalesController.php
@@ -0,0 +1,115 @@
+validate($request, [
+ 'name' => 'required',
+ 'role' => 'required',
+ 'email' => 'required',
+ 'number_phone' => 'required',
+ 'status' => 'required',
+ ]);
+
+ $data = $request->all();
+
+ $data['created_by'] = '@System';
+ $data['status'] = 'New Request';
+
+ $result = ContactSales::create($data);
+
+ if ($result) {
+ return response()->json(['status' => 'success', 'data' => $result, 'message' => 'Your message has been successfully received by our Sales team! Someone from our team will be in touch with you shortly.', 'code' => 200], 200);
+ } else {
+ return response()->json(['status' => 'failed', 'message' => 'Your message has been failed!', 'code' => 400], 400);
+ }
+ }
+
+ public function edit($id)
+ {
+ if (!$id || (int) $id < 0 || $id == "") {
+ return response()->json(['status' => 'failed', 'message' => 'id is required!', 'code' => 400], 400);
+ die();
+ }
+
+ $result = ContactSales::find($id);
+
+ if ($result) {
+ return response()->json(['status' => 'success', 'code' => 200, 'data' => $result], 200);
+ } else {
+ return response()->json(['status' => 'failed', 'message' => 'failed get data Contact Sales, please try again later!', 'code' => 400], 400);
+ }
+ }
+
+ public function update(Request $request, $id)
+ {
+ if (!$id || (int) $id < 0 || $id == "") {
+ return response()->json(['status' => 'failed', 'message' => 'id is required!', 'code' => 400], 400);
+ }
+
+ $data = ContactSales::find($id);
+
+
+ if ($data) {
+ $result = $data->update($request->all());
+ } else {
+ return response()->json(['status' => 'failed', 'message' => 'data Contact Sales not found!', 'code' => 400], 400);
+ die();
+ }
+
+
+ if ($result) {
+ return response()->json(['status' => 'success', 'message' => 'data Contact Sales successfully updated!', 'code' => 200], 200);
+ } else {
+ return response()->json(['status' => 'failed', 'message' => 'data Contact Sales failed updated!', 'code' => 400], 400);
+ }
+ }
+
+ public function delete($id)
+ {
+ $data = ContactSales::find($id);
+
+ if ($data) {
+ $delete = $data->delete();
+ } else {
+ return response()->json(['status' => 'failed', 'message' => 'data Contact Sales not found!', 'code' => 400], 400);
+ die();
+ }
+
+
+ if ($delete) {
+ return response()->json(['status' => 'success', 'message' => 'data Contact Sales successfully deleted!', 'code' => 200], 200);
+ } else {
+ return response()->json(['status' => 'failed', 'message' => 'data Contact Sales failed deleted!', 'code' => 400], 400);
+ }
+ }
+
+ public function search(Request $request)
+ {
+ $payload = $request->all();
+ $dataBuilder = $this->setUpPayload($payload, 'm_contact_sales');
+ $builder = $dataBuilder['builder'];
+ $countBuilder = $dataBuilder['count'];
+ $dataGet = $builder->get();
+ $totalRecord = $countBuilder->count();
+ return response()->json(['status' => 'success', 'code' => 200, 'data' => $dataGet, 'totalRecord' => $totalRecord], 200);
+ }
+
+ public function list()
+ {
+ $data = ContactSales::all();
+ $countData = $data->count();
+
+ if ($data) {
+ return response()->json(['status' => 'success', 'code' => 200, 'data' => $data, 'totalRecord' => $countData], 200);
+ } else {
+ return response()->json(['status' => 'failed', 'message' => 'failed get list Contact Sales, please try again later!', 'code' => 400], 400);
+ }
+ }
+}
diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php
index 64c9b0d..510f0d1 100644
--- a/app/Http/Controllers/Controller.php
+++ b/app/Http/Controllers/Controller.php
@@ -2,16 +2,22 @@
namespace App\Http\Controllers;
-use Illuminate\Support\Facades\DB;
-use Illuminate\Support\Facades\Http;
-use App\Models\UserToActivity;
-use App\Models\Activity;
-use App\Models\AssignMaterial;
use App\Models\User;
use App\Models\Divisi;
-use Laravel\Lumen\Routing\Controller as BaseController;
-
+use App\Models\Activity;
+use App\Models\AssignMaterial;
+use App\Models\Company;
use App\Models\ReportK3Detail;
+use App\Models\UserToActivity;
+use App\Models\ProductTransaction;
+use App\Models\Project;
+use Illuminate\Support\Facades\DB;
+use Carbon\Carbon;
+use Illuminate\Support\Facades\Http;
+use Laravel\Lumen\Routing\Controller as BaseController;
+use RecursiveIteratorIterator;
+use RecursiveDirectoryIterator;
+use Exception;
class Controller extends BaseController
{
@@ -33,12 +39,161 @@ class Controller extends BaseController
$this->currentDate = date("Y-m-d H:i:s");
$this->currentName = auth()->user() ? auth()->user()->name : "system";
$this->currentId = auth()->user() ? auth()->user()->id : 0;
- $this->companyId = auth()->user() ? auth()->user()->company_id : 0;
$this->pathImage = config('assets.image');
$this->pathDocument = config('assets.project');
$this->pathActivityDocument = config('assets.activity');
}
+ protected function setCustomeDirectoryUpload($company_name)
+ {
+ $current_date = date('Y-m-d');
+ [$year, $month] = explode('-', $current_date);
+ $yearMonth = $year.'-'.$month;
+
+ $pathImage = 'assets/' . $company_name .'/'. $yearMonth . '/image/';
+ $pathDocument = 'assets/' . $company_name .'/'. $yearMonth . '/file/project/';
+ $pathTmpImport = 'assets/' . $company_name .'/'. $yearMonth . '/file/tmpimport/';
+ $pathActivityDocument = 'assets/' . $company_name .'/'. $yearMonth . '/file/activity/';
+
+ return [
+ 'pathImage' => $pathImage,
+ 'pathDocument' => $pathDocument,
+ 'pathTmpImport' => $pathTmpImport,
+ 'pathActivityDocument' => $pathActivityDocument
+ ];
+ }
+
+ public function storage($company_name)
+ {
+ $directory = 'assets/' . urldecode($company_name);
+ if (!is_dir($directory)) {
+ return "Directory not found";
+ }
+ $size = 0;
+ try {
+ foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory)) as $file) {
+ $size += $file->getSize();
+ }
+ } catch (Exception $e) {
+ return "Error while calculating size: " . $e->getMessage();
+ }
+ return round($size / 1048576, 2);
+ }
+
+ public function storageAllCompany()
+ {
+ $companies = Company::get();
+ $formData = [];
+ foreach($companies as $data) {
+ $size = 0;
+ $directory = 'assets/' . urldecode($data['company_name']);
+ if (is_dir($directory)) {
+ foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory)) as $file) {
+ $size += $file->getSize();
+ }
+ }
+ $formData[] = [
+ 'company_name' => $data['company_name'],
+ 'size' => round($size / 1048576, 2),
+ 'exp_ospro' => ProductTransaction::query()->where('company_id', $data['id'])->value('exp_ospro'),
+ 'project_total' => Project::query()->where('company_id',$data['id'])->count()
+ ];
+ }
+
+ return $formData;
+ }
+
+ public function setExpiredTimeOspro($company_id)
+ {
+ $currentDate = Carbon::now();
+ $countCreate = false;
+ $transaction = ProductTransaction::query()
+ ->where('company_id', $company_id)->first();
+ if(!empty($transaction)) {
+ $dateExpired = $transaction['exp_ospro'];
+ if ($currentDate->gt(Carbon::parse($dateExpired))) {
+ $countCreate = false;
+ } else {
+ $countCreate = true;
+ }
+ return $countCreate;
+ } else {
+ return $countCreate = true;
+ }
+ }
+
+ protected function setLimitsStorage($company, $dokumen, $initPath, $destinatePath)
+ {
+ $countCreate = false;
+ DB::transaction(function() use($company, $dokumen, $initPath, $destinatePath, &$countCreate) {
+ $totalSize = 0;
+ $sizeFile = $dokumen->getSize();
+ // Path
+ $folderPath = $destinatePath['pathDocument'];
+ $folderPathImage = $destinatePath['pathImage'];
+ $folderPathTmpImport = $destinatePath['pathTmpImport'];
+ $folderPathActivityDocument = $destinatePath['pathActivityDocument'];
+ // Create Directory
+ if (!file_exists($initPath)) {
+ mkdir($initPath, 0777, true);
+ }
+ // Scanning & Existing Folder
+ if (file_exists($folderPathImage)) {
+ $files = scandir($folderPathImage);
+ foreach ($files as $file) {
+ if (is_file($folderPathImage . '/' . $file)) {
+ $totalSize += filesize($folderPathImage . '/' . $file);
+ }
+ }
+ }
+ if (file_exists($folderPath)) {
+ $filesImage = scandir($folderPath);
+ foreach ($filesImage as $file) {
+ if (is_file($folderPath . '/' . $file)) {
+ $totalSize += filesize($folderPath . '/' . $file);
+ }
+ }
+ }
+ if (file_exists($folderPathTmpImport)) {
+ $filesTmpImport = scandir($folderPathTmpImport);
+ foreach ($filesTmpImport as $file) {
+ if (is_file($folderPathTmpImport . '/' . $file)) {
+ $totalSize += filesize($folderPathTmpImport . '/' . $file);
+ }
+ }
+ }
+ if (file_exists($folderPathActivityDocument)) {
+ $filesActivityDocument = scandir($folderPathActivityDocument);
+ foreach ($filesActivityDocument as $file) {
+ if (is_file($folderPathActivityDocument . '/' . $file)) {
+ $totalSize += filesize($folderPathActivityDocument . '/' . $file);
+ }
+ }
+ }
+ // Logic
+ $totalSize += $sizeFile;
+ $transaction = ProductTransaction::query()
+ ->where('company_id', $company['id']);
+ $cloneQueryTransaction = clone $transaction;
+ if ($transaction->where([['type_paket', 'Basic'], ['amount', '!=', null]])->exists()) {
+ $maximumSize = 500 * 1024 * 1024;
+ $countCreate = true;
+ } elseif ($cloneQueryTransaction->where([['type_paket', 'Free'], ['amount', 0]])->exists()) {
+ $maximumSize = 50 * 1024 * 1024;
+ $countCreate = true;
+ } else {
+ $countCreate = true;
+ }
+
+ if ($countCreate && isset($maximumSize)) { // kondisi $maximumSize sementara karena blm ada paket enterprise
+ if (floatval($totalSize) > floatval($maximumSize)) {
+ $countCreate = false;
+ }
+ }
+ });
+ return $countCreate;
+ }
+
protected function setUpPayload($condition, $tableSelf)
{
$alias = "selfTable";
@@ -184,6 +339,10 @@ class Controller extends BaseController
$query = $query->whereIn($tableColumn . "." . $column, $value);
} else if ($operator == "notin") {
$query = $query->whereNotIn($tableColumn . "." . $column, $value);
+ } else if ($operator == "isnull") {
+ $query = $query->WhereNull($tableColumn . "." . $column);
+ } else if ($operator == "notnull") {
+ $query = $query->WhereNotNull($tableColumn . "." . $column);
} else {
$query = $query->where($tableColumn . "." . $column, $operator, $value);
}
@@ -281,6 +440,28 @@ class Controller extends BaseController
return $totalCost;
}
+ protected function paramsMethodGet($query, $countData, $request)
+ {
+ $start = $request->start;
+ $length = $request->length == '-1' ? $countData : $request->length;
+ $orderBy = $request->orderby;
+ $asc = $request->asc == 'false' ? 'desc' : 'asc';
+ $where = $request->column;
+ $logicOp = $request->logic;
+ $valColumn = str_replace("\\", "", "$request->value");
+
+ if ($logicOp == 'like' || $logicOp == 'ilike') {
+ $valColumnFilter = '%' . $valColumn . '%';
+ } else {
+ $valColumnFilter = $valColumn;
+ }
+ $data = $query->where($where, $logicOp, $valColumnFilter)
+ ->orderBy($orderBy, $asc)
+ ->offset($start)->limit($length)->get();
+
+ return $data;
+ }
+
protected function getLoc($lat, $lng)
{
// $response = Http::get(config('api.nominatim') . "/reverse?lat=".$lat."&lon=".$lng."&format=json");
diff --git a/app/Http/Controllers/DashboardBoDController.php b/app/Http/Controllers/DashboardBoDController.php
index bde25a9..fa18015 100644
--- a/app/Http/Controllers/DashboardBoDController.php
+++ b/app/Http/Controllers/DashboardBoDController.php
@@ -2,15 +2,19 @@
namespace App\Http\Controllers;
-use App\Helpers\MasterFunctionsHelper;
+use App\Models\User;
use App\Models\Divisi;
use App\Models\Project;
use App\Models\ProjectPhase;
-use App\Models\User;
+use App\Models\ProjectExpenditure;
use App\Models\UserToVersionGantt;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
+use App\Models\ProjectScheduleHealth;
+use App\Helpers\MasterFunctionsHelper;
+use App\Models\ProjectFinancialHealth;
+use App\Models\ProjectInvoice;
class DashboardBoDController extends Controller
{
@@ -22,30 +26,51 @@ class DashboardBoDController extends Controller
}
- // to do
- public function getCompanyCashFlow($year = '%')
+
+ public function getCompanyCashFlow($company_id, $all_project, $hierarchy, $role_name)
{
- $year = $this->interpolateYear($year);
$totalExpenditure = $totalInvoice = $totalPaidInvoice = 0;
- // we can't use eloquent's sum() method because someone decided to use varchar as datatype in rencana_biaya field
- $totalBudgets = Project::select(DB::raw('SUM(CAST("rencana_biaya" AS DOUBLE PRECISION))'))
- ->where('mulai_proyek', 'like', $year)
- ->pluck('sum')
- ->first();
+ $totalBudgets = null;
+ $role = urldecode($role_name);
+ if ($role === "Super Admin") {
+ $totalBudgets = Project::sum(DB::raw('CAST("rencana_biaya" AS DOUBLE PRECISION)'));
+ } elseif (!empty($all_project)) {
+ $totalBudgets = Project::where('company_id', $company_id)
+ ->sum(DB::raw('CAST("rencana_biaya" AS DOUBLE PRECISION)'));
+ } else {
+ $totalBudgets = Project::where('created_by_id', $hierarchy)
+ ->sum(DB::raw('CAST("rencana_biaya" AS DOUBLE PRECISION)'));
+ }
+
+ $projects = null;
+
+ if ($role === "Super Admin") {
+ $projects = Project::get();
+ } elseif (!empty($all_project)) {
+ $projects = Project::where('company_id', $company_id)
+ ->get();
+ } else {
+ $projects = Project::where('created_by_id', $hierarchy)
+ ->get();
+ }
- $projects = Project::where('mulai_proyek', 'like', $year)
- ->get();
foreach ($projects as $project) {
$project->expenses = 0;
-
$resp = null;
if ($project->kode_sortname != "") {
- $cost = 0;
- $cost = substr($cost, 0, strpos($cost, "."));
- $totalExpenditure += (int) $cost;
- $totalInvoice += 0;
- $totalPaidInvoice += 0;
+
+ // $resp = $this->getInvoiceIntegration($project->kode_sortname);
+ // $cost = $resp->data->total_cost ?? 0;
+ // $cost = substr($cost, 0, strpos($cost, "."));
+ $cost = 0;
+ $totalExpenditure = 0;
+ $totalInvoice = 0;
+ $totalPaidInvoice = 0;
+
+ // $totalExpenditure += (int) $cost;
+ // $totalInvoice += $resp->data->total_invoice_amount ?? 0;
+ // $totalPaidInvoice += $resp->data->total_invoice_paid_amount ?? 0;
}
}
@@ -59,11 +84,145 @@ class DashboardBoDController extends Controller
], 200);
}
- public function getInvoiceOutstanding($year = '%')
+ public function getDetailExpenditureColor($role_name, $company_id)
{
- $year = $this->interpolateYear($year);
- $projects = Project::where('mulai_proyek', 'like', $year)
- ->get();
+ $role = urldecode($role_name);
+ $query = null;
+ if ($role === 'Super Admin') {
+ $query = ProjectExpenditure::get();
+ } else {
+ $query = ProjectExpenditure::where('company_id', $company_id)->get();
+ }
+
+ $data = [];
+ foreach ($query as $value) {
+ if ($value['name'] === 'Total Budget') {
+ $data['total_budget'] = $value['color'];
+ }
+ if ($value['name'] === 'Expenditure') {
+ $data['total_expenditure'] = $value['color'];
+ }
+ if ($value['name'] === 'Invoice') {
+ $data['total_invoice'] = $value['color'];
+ }
+ if ($value['name'] === 'Cash In') {
+ $data['total_paid_invoice'] = $value['color'];
+ }
+ }
+ return response()->json([
+ 'data' => [
+ 'total_budget' => $data['total_budget'] ?? '',
+ 'total_expenditure' => $data['total_expenditure'] ?? '',
+ 'total_invoice' => $data['total_invoice'] ?? '',
+ 'total_paid_invoice' => $data['total_paid_invoice'] ?? '',
+ ]
+ ], 200);
+ }
+
+ public function getDetailFinancialHealthColor($role_name, $company_id)
+ {
+ $role = urldecode($role_name);
+ $query = null;
+ if ($role === 'Super Admin') {
+ $query = ProjectFinancialHealth::get();
+ } else {
+ $query = ProjectFinancialHealth::where('company_id', $company_id)->get();
+ }
+
+
+ $data = [];
+ foreach ($query as $value) {
+ if ($value['name'] === 'Cost Overrun') {
+ $data['overrun'] = $value['color'];
+ }
+ if ($value['name'] === 'Early Warning') {
+ $data['warning'] = $value['color'];
+ }
+ if ($value['name'] === 'On Budget') {
+ $data['on-budget'] = $value['color'];
+ }
+ }
+ return response()->json([
+ 'data' => [
+ 'overrun' => $data['overrun'] ?? '',
+ 'warning' => $data['warning'] ?? '',
+ 'on-budget' => $data['on-budget'] ?? '',
+ ]
+ ], 200);
+ }
+
+ public function getDetailScheduleHealthColor($role_name, $company_id)
+ {
+ $role = urldecode($role_name);
+ $query = null;
+ if ($role === 'Super Admin') {
+ $query = ProjectScheduleHealth::get();
+ } else {
+ $query = ProjectScheduleHealth::where('company_id', $company_id)->get();
+ }
+
+ $data = [];
+ foreach ($query as $value) {
+ if ($value['name'] === 'Behind Schedule') {
+ $data['behind-schedule'] = $value['color'];
+ }
+ if ($value['name'] === 'Early Warning') {
+ $data['warning'] = $value['color'];
+ }
+ if ($value['name'] === 'On Schedule') {
+ $data['on-schedule'] = $value['color'];
+ }
+ }
+ return response()->json([
+ 'data' => [
+ 'behind-schedule' => $data['behind-schedule'] ?? '',
+ 'warning' => $data['warning'] ?? '',
+ 'on-schedule' => $data['on-schedule'] ?? '',
+ ]
+ ], 200);
+ }
+
+ public function getDetailInvoiceColor($role_name, $company_id)
+ {
+ $role = urldecode($role_name);
+ $query = null;
+ if ($role === 'Super Admin') {
+ $query = ProjectInvoice::get();
+ } else {
+ $query = ProjectInvoice::where('company_id', $company_id)->get();
+ }
+ $data = [];
+ foreach ($query as $value) {
+ if ($value['name'] === 'Invoiced') {
+ $data['invoiced'] = $value['color'];
+ }
+ if ($value['name'] === 'Cash In') {
+ $data['paid'] = $value['color'];
+ }
+ }
+ return response()->json([
+ 'data' => [
+ 'invoiced' => $data['invoiced'] ?? '',
+ 'paid' => $data['paid'] ?? ''
+ ]
+ ], 200);
+ }
+
+ // integrasi
+ public function getInvoiceOutstanding($role_name, $company_id, $all_project, $hierarchy)
+ {
+ $role = urldecode($role_name);
+ $projects = null;
+ if ($role === 'Super Admin') {
+ $projects = Project::get();
+ } elseif (!empty($all_project)) {
+ $projects = Project::where('company_id', $company_id)
+ ->get();
+ } else {
+ $projects = Project::where('created_by_id', $hierarchy)
+ ->get();
+ }
+
$return = [];
foreach ($projects as $project) {
if ($project->kode_sortname != "") {
@@ -81,17 +240,33 @@ class DashboardBoDController extends Controller
], 200);
}
- public function getTotalProjectPerScheduleHealth($year = '%')
+ public function getTotalProjectPerScheduleHealth($role_name, $company_id, $all_project, $hierarchy)
{
- $year = $this->interpolateYear($year);
+ $role = urldecode($role_name);
+ $replaceHierarchy = preg_replace('/[\[\]]/', '', $hierarchy);
$return = [
'behind-schedule' => 0,
'warning' => 0,
'on-schedule' => 0,
];
+ $divisi = Divisi::query()
+ ->where('company_id', $company_id)
+ ->pluck('id');
+
+ $projects = null;
+ if ($role === 'Super Admin') {
+ $projects = Project::get();
+ } elseif ($all_project == 'true') {
+ $projects = Project::whereIn('divisi_id', $divisi)
+ ->where('company_id', $company_id)
+ ->get();
+ } else {
+ $projects = Project::whereIn('divisi_id', $divisi)
+ ->where('created_by_id', $replaceHierarchy)
+ ->get();
+ }
- $projects = Project::where('mulai_proyek', 'like', $year)->get();
foreach ($projects as $index => $project) {
$project->scurve = MasterFunctionsHelper::getSCurve($project->id);
$selisihProgress = 0;
@@ -106,7 +281,7 @@ class DashboardBoDController extends Controller
}
$selisihProgress = $planningProgress - $actualProgress;
try {
- if ($selisihProgress > 0 && $selisihProgress <= 5) {
+ if ($selisihProgress > 0 && $selisihProgress <= 20) {
$return['warning'] += 1;
$projects[$index]->status = 'warning';
} elseif ($selisihProgress == 0) {
@@ -124,17 +299,24 @@ class DashboardBoDController extends Controller
return response()->json(['data' => $return, 'q' => $projects], 200);
}
- public function getTotalProjectScheduleHealthPerDivision($year = '%')
+ public function getTotalProjectScheduleHealthPerDivision($role_name, $company_id)
{
- $year = $this->interpolateYear($year);
+ $role = urldecode($role_name);
+ $divisions = null;
+ if ($role === 'Super Admin') {
+ $divisions = Divisi::whereNull('parent')
+ ->get();
+ } else {
+ $divisions = Divisi::whereNull('parent')
+ ->where('company_id', $company_id)
+ ->get();
+ }
- $divisions = Divisi::whereNull('parent')->get();
foreach ($divisions as $index => $division) {
-
$scheduleData = new Collection();
$behindSchedule = $warning = $onSchedule = 0;
- $projects = Project::where('mulai_proyek', 'like', $year)->where('divisi_id', $division->id)->get();
+ $projects = Project::where('divisi_id', $division->id)->get();
foreach ($projects as $project) {
$project->scurve = MasterFunctionsHelper::getSCurve($project->id);
$selisihProgress = 0;
@@ -169,51 +351,103 @@ class DashboardBoDController extends Controller
], 200);
}
- public function getTotalProjectPerBudgetHealth($year = '%')
+ public function getTotalProjectPerBudgetHealth($role_name, $company_id, $all_project, $hierarchy)
{
- $year = $this->interpolateYear($year);
- return response()->json([
+ $role = urldecode($role_name);
+ $replaceHierarchy = preg_replace('/[\[\]]/', '', $hierarchy);
+
+ $response = [
'data' => [
- 'overrun' => Project::where('mulai_proyek', 'like', $year)->where('budget_health', 'overrun')->count(),
- 'warning' => Project::where('mulai_proyek', 'like', $year)->where('budget_health', 'warning')->count(),
- 'on-budget' => Project::where('mulai_proyek', 'like', $year)->where('budget_health', 'on-budget')->count(),
+ 'overrun' => 0,
+ 'warning' => 0,
+ 'on-budget' => 0,
]
- ], 200);
+ ];
+ $divisi = Divisi::query()
+ ->where('company_id', $company_id)
+ ->pluck('id');
+
+ // arr overrun
+ if ($role === 'Super Admin') {
+ $response['data']['overrun'] = Project::where('budget_health', 'overrun')
+ ->count();
+ } elseif ($all_project == 'true') {
+ $response['data']['overrun'] = Project::whereIn('divisi_id', $divisi)
+ ->where([['budget_health', 'overrun'], ['company_id', $company_id]])
+ ->count();
+ } else {
+ $response['data']['overrun'] = Project::whereIn('divisi_id', $divisi)
+ ->where([['budget_health', 'overrun'], ['created_by_id', $replaceHierarchy]])
+ ->count();
+ }
+ // arr warning
+ if ($role === 'Super Admin') {
+ $response['data']['warning'] = Project::where('budget_health', 'warning')
+ ->count();
+ } elseif ($all_project == 'true') {
+ $response['data']['warning'] = Project::whereIn('divisi_id', $divisi)
+ ->where([['budget_health', 'warning'], ['company_id', $company_id]])
+ ->count();
+ } else {
+ $response['data']['warning'] = Project::whereIn('divisi_id', $divisi)
+ ->where([['budget_health', 'warning'], ['created_by_id', $replaceHierarchy]])
+ ->count();
+ }
+ // arr on-budget
+ if ($role === 'Super Admin') {
+ $response['data']['on-budget'] = Project::where('budget_health', 'on-budget')
+ ->count();
+ } elseif ($all_project == 'true') {
+ $response['data']['on-budget'] = Project::whereIn('divisi_id', $divisi)
+ ->where([['company_id', $company_id], ['budget_health', 'on-budget']])
+ ->count();
+ } else {
+ $response['data']['on-budget'] = Project::whereIn('divisi_id', $divisi)
+ ->where([['budget_health', 'on-budget'], ['created_by_id', $replaceHierarchy]])
+ ->count();
+ }
+ return response()->json($response, 200);
}
- private function countTotalProjectByBudgetHealthInDivision($divisi, $year, $health)
+ private function countTotalProjectByBudgetHealthInDivision($divisi, $health)
{
- return Project::where('divisi_id', $divisi)
- ->where('mulai_proyek', 'like', $year)
- /* ->orWhere('akhir_proyek', 'like', $year) */
- ->where('budget_health', $health)
- ->count();
+ $project = Project::where([['divisi_id', $divisi], ['budget_health', $health]])->count();
+ return $project;
}
- public function getTotalProjectBudgetHealthPerDivision($year = '%')
+ public function getTotalProjectBudgetHealthPerDivision($role_name, $company_id)
{
- $year = $this->interpolateYear($year);
- $divisions = Divisi::select('id', 'name')
- ->with('children')
- ->whereNull('parent')
- ->get();
+ $role = urldecode($role_name);
+ $divisions = null;
+ if ($role === 'Super Admin') {
+ $divisions = Divisi::select('id', 'name')
+ ->with('children')
+ ->whereNull('parent')
+ ->get();
+ } else {
+ $divisions = Divisi::select('id', 'name')
+ ->with('children')
+ ->whereNull('parent')
+ ->where('company_id', $company_id)
+ ->get();
+ }
+
+
// to do : count in more than 1 level child
foreach ($divisions as $division) {
$budgetData = new Collection();
- $budgetData->prepend($this->countTotalProjectByBudgetHealthInDivision($division->id, $year, 'overrun'), 'overrun');
- $budgetData->prepend($this->countTotalProjectByBudgetHealthInDivision($division->id, $year, 'warning'), 'warning');
- $budgetData->prepend($this->countTotalProjectByBudgetHealthInDivision($division->id, $year, 'on-budget'), 'on-budget');
+ $budgetData->prepend($this->countTotalProjectByBudgetHealthInDivision($division->id, 'overrun'), 'overrun');
+ $budgetData->prepend($this->countTotalProjectByBudgetHealthInDivision($division->id, 'warning'), 'warning');
+ $budgetData->prepend($this->countTotalProjectByBudgetHealthInDivision($division->id, 'on-budget'), 'on-budget');
foreach ($division->children as $d) {
- $budgetData['overrun'] += $this->countTotalProjectByBudgetHealthInDivision($d->id, $year, 'overrun');
- $budgetData['warning'] += $this->countTotalProjectByBudgetHealthInDivision($d->id, $year, 'warning');
- $budgetData['on-budget'] += $this->countTotalProjectByBudgetHealthInDivision($d->id, $year, 'on-budget');
+ $budgetData['overrun'] += $this->countTotalProjectByBudgetHealthInDivision($d->id, 'overrun');
+ $budgetData['warning'] += $this->countTotalProjectByBudgetHealthInDivision($d->id, 'warning');
+ $budgetData['on-budget'] += $this->countTotalProjectByBudgetHealthInDivision($d->id, 'on-budget');
}
unset($division->children);
$division->budgetData = $budgetData;
}
- foreach ($divisions as $division) {
- }
return response()->json([
'data' => [
$divisions
@@ -221,15 +455,31 @@ class DashboardBoDController extends Controller
], 200);
}
- public function getTotalProjectPerPhase($year = '%')
+ public function getTotalProjectPerPhase($role_name, $company_id, $all_project, $hierarchy)
{
- $year = $this->interpolateYear($year);
- $projectPhases = ProjectPhase::orderBy('order')->get();
+ $role = urldecode($role_name);
+ $projectPhases = null;
+ if ($role === 'Super Admin') {
+ $projectPhases = ProjectPhase::orderBy('order')->get();
+ } else {
+ $projectPhases = ProjectPhase::where('company_id', $company_id)->orderBy('order')->get();
+ }
+
+
foreach ($projectPhases as $phase) {
- $phase->totalProject = Project::where('phase_id', $phase->id)
- ->where('mulai_proyek', 'like', $year)
- /* ->orWhere('akhir_proyek', 'like', $year) */
- ->count();
+
+ if ($role === 'Super Admin') {
+ $phase->totalProject = Project::where('phase_id', $phase->id)
+ ->count();
+ } elseif ($all_project) {
+ $phase->totalProject = Project::where('phase_id', $phase->id)
+ ->where('company_id', $company_id)
+ ->count();
+ } else {
+ $phase->totalProject = Project::where('phase_id', $phase->id)
+ ->where('created_by_id', $hierarchy)
+ ->count();
+ }
}
return response()->json([
'data' => [
@@ -238,27 +488,37 @@ class DashboardBoDController extends Controller
], 200);
}
- private function countTotalProjectInDivision($id, $year)
+ private function countTotalProjectInDivision($id)
{
return Project::where('divisi_id', $id)
- ->where('mulai_proyek', 'like', $year)
->count();
}
- public function getTotalProjectPerDivision($year = '%')
+ public function getTotalProjectPerDivision($role_name, $company_id)
{
- $year = $this->interpolateYear($year);
+ $role = urldecode($role_name);
+ $divisions = null;
+ if ($role === 'Super Admin') {
+ $divisions = Divisi::select('id', 'name', 'parent', 'color')
+ ->with('children')
+ ->whereNull('parent')
+ ->get();
+ } else {
+ $divisions = Divisi::select('id', 'name', 'parent', 'color')
+ ->with('children')
+ ->whereNull('parent')
+ ->where('company_id', $company_id)
+ ->get();
+ }
+
+
- $divisions = Divisi::select('id', 'name', 'parent', 'color')
- ->with('children')
- ->whereNull('parent')
- ->get();
// to do : count in more than 1 level child
foreach ($divisions as $v) {
- $v->total = $this->countTotalProjectInDivision($v->id, $year);
+ $v->total = $this->countTotalProjectInDivision($v->id);
foreach ($v->children as $d) {
- $v->total += $this->countTotalProjectInDivision($d->id, $year);
+ $v->total += $this->countTotalProjectInDivision($d->id);
}
unset($v->children);
}
@@ -268,30 +528,35 @@ class DashboardBoDController extends Controller
], 200);
}
- private function countTotalProjectValueInDivision($id, $year)
+ private function countTotalProjectValueInDivision($id)
{
return Project::select(DB::raw('SUM(CAST("rencana_biaya" AS DOUBLE PRECISION))'))
- ->where('mulai_proyek', 'like', $year)
- /* ->orWhere('akhir_proyek', 'like', $year) */
->where('divisi_id', $id)
->pluck('sum')
->first();
}
- public function getTotalProjectValuePerDivision($year = '%')
+ public function getTotalProjectValuePerDivision($role_name, $company_id)
{
- $year = $this->interpolateYear($year);
+ $role = urldecode($role_name);
+ if ($role === 'Super Admin') {
+ $divisions = Divisi::select('id', 'name', 'color')
+ ->with('children')
+ ->whereNull('parent')
+ ->get();
+ } else {
+ $divisions = Divisi::select('id', 'name', 'color')
+ ->with('children')
+ ->whereNull('parent')
+ ->where('company_id', $company_id)
+ ->get();
+ }
- $divisions = Divisi::select('id', 'name', 'color')
- ->with('children')
- ->whereNull('parent')
- ->get();
- // to do : count in more than 1 level child
foreach ($divisions as $v) {
- $v->total = $this->countTotalProjectValueInDivision($v->id, $year);
+ $v->total = $this->countTotalProjectValueInDivision($v->id);
foreach ($v->children as $d) {
- $v->total += $this->countTotalProjectValueInDivision($d->id, $year);
+ $v->total += $this->countTotalProjectValueInDivision($d->id);
}
unset($v->children);
}
@@ -302,13 +567,22 @@ class DashboardBoDController extends Controller
}
- public function getDetailExpenditure($year = '%')
+ public function getDetailExpenditure($year = '%', $company_id, $all_project, $hierarchy)
{
$year = $this->interpolateYear($year);
- $projects = Project::where('mulai_proyek', 'like', $year)
- /* ->orWhere('akhir_proyek', 'like', $year) */
- ->orderBy('id', 'desc')
- ->get();
+ $projects = null;
+ if ($all_project) {
+ $projects = Project::where('mulai_proyek', 'like', $year)
+ ->where('company_id', $company_id)
+ ->orderBy('id', 'desc')
+ ->get();
+ } else {
+ $projects = Project::where('mulai_proyek', 'like', $year)
+ ->where('created_by_id', $hierarchy)
+ ->orderBy('id', 'desc')
+ ->get();
+ }
+
foreach ($projects as $project) {
$lastGantt = MasterFunctionsHelper::getLatestGantt($project->id);
diff --git a/app/Http/Controllers/DemoController.php b/app/Http/Controllers/DemoController.php
new file mode 100644
index 0000000..3e44c29
--- /dev/null
+++ b/app/Http/Controllers/DemoController.php
@@ -0,0 +1,116 @@
+validate($request, [
+ 'name' => 'required',
+ 'role' => 'required',
+ 'email' => 'required',
+ 'number_phone' => 'required',
+ 'status' => 'required',
+ 'message' => 'required'
+ ]);
+
+ $data = $request->all();
+
+ $data['created_by'] = '@System';
+ $data['status'] = 'New Request';
+
+ $result = Demo::create($data);
+
+ if ($result) {
+ return response()->json(['status' => 'success', 'data' => $result, 'message' => 'Request Demo successfully!', 'code' => 200], 200);
+ } else {
+ return response()->json(['status' => 'failed', 'message' => 'Request Demo failed!', 'code' => 400], 400);
+ }
+ }
+
+ public function edit($id)
+ {
+ if (!$id || (int) $id < 0 || $id == "") {
+ return response()->json(['status' => 'failed', 'message' => 'id is required!', 'code' => 400], 400);
+ die();
+ }
+
+ $result = Demo::find($id);
+
+ if ($result) {
+ return response()->json(['status' => 'success', 'code' => 200, 'data' => $result], 200);
+ } else {
+ return response()->json(['status' => 'failed', 'message' => 'failed get data Demo, please try again later!', 'code' => 400], 400);
+ }
+ }
+
+ public function update(Request $request, $id)
+ {
+ if (!$id || (int) $id < 0 || $id == "") {
+ return response()->json(['status' => 'failed', 'message' => 'id is required!', 'code' => 400], 400);
+ }
+
+ $data = Demo::find($id);
+
+
+ if ($data) {
+ $result = $data->update($request->all());
+ } else {
+ return response()->json(['status' => 'failed', 'message' => 'data Demo not found!', 'code' => 400], 400);
+ die();
+ }
+
+
+ if ($result) {
+ return response()->json(['status' => 'success', 'message' => 'data Demo successfully updated!', 'code' => 200], 200);
+ } else {
+ return response()->json(['status' => 'failed', 'message' => 'data Demo failed updated!', 'code' => 400], 400);
+ }
+ }
+
+ public function delete($id)
+ {
+ $data = Demo::find($id);
+
+ if ($data) {
+ $delete = $data->delete();
+ } else {
+ return response()->json(['status' => 'failed', 'message' => 'data Demo not found!', 'code' => 400], 400);
+ die();
+ }
+
+
+ if ($delete) {
+ return response()->json(['status' => 'success', 'message' => 'data Demo successfully deleted!', 'code' => 200], 200);
+ } else {
+ return response()->json(['status' => 'failed', 'message' => 'data Demo failed deleted!', 'code' => 400], 400);
+ }
+ }
+
+ public function search(Request $request)
+ {
+ $payload = $request->all();
+ $dataBuilder = $this->setUpPayload($payload, 'm_demo');
+ $builder = $dataBuilder['builder'];
+ $countBuilder = $dataBuilder['count'];
+ $dataGet = $builder->get();
+ $totalRecord = $countBuilder->count();
+ return response()->json(['status' => 'success', 'code' => 200, 'data' => $dataGet, 'totalRecord' => $totalRecord], 200);
+ }
+
+ public function list()
+ {
+ $data = Demo::all();
+ $countData = $data->count();
+
+ if ($data) {
+ return response()->json(['status' => 'success', 'code' => 200, 'data' => $data, 'totalRecord' => $countData], 200);
+ } else {
+ return response()->json(['status' => 'failed', 'message' => 'failed get list Demo, please try again later!', 'code' => 400], 400);
+ }
+ }
+}
diff --git a/app/Http/Controllers/DivisiController.php b/app/Http/Controllers/DivisiController.php
index 2d056aa..540dd40 100644
--- a/app/Http/Controllers/DivisiController.php
+++ b/app/Http/Controllers/DivisiController.php
@@ -4,25 +4,28 @@ namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Divisi;
+use Illuminate\Support\Facades\Log;
class DivisiController extends Controller
{
- private function getAllChildren($divisi, $depth = 0, $array = []) {
+ private function getAllChildren($divisi, $depth = 0, $array = [])
+ {
$divisi->depth = $depth;
array_push($array, $divisi);
- foreach($divisi->children as $child){
+ foreach ($divisi->children as $child) {
$array = $this->getAllChildren($child, $depth + 1, $array);
}
return $array;
}
- public function add(Request $request){
+ public function add(Request $request)
+ {
$this->validate($request, [
- 'name' => 'string|required|unique:m_divisi,name',
+ 'name' => 'string|required|unique:m_divisi,name,NULL,id,company_id,' . $request->input('company_id'),
'description' => 'nullable|string',
'parent' => 'nullable|integer',
- 'color'=>'nullable|string|max:10'
+ 'color' => 'nullable|string|max:10'
]);
$data = $request->all();
@@ -30,15 +33,16 @@ class DivisiController extends Controller
$result = Divisi::create($data);
- if(!$result)
- return response()->json(['status'=>'failed','message'=>'Failed to add data','code'=> 500]);
+ if (!$result)
+ return response()->json(['status' => 'failed', 'message' => 'Failed to add data', 'code' => 500]);
- return response()->json(['status'=>'success','message'=>'Data created!','code'=>200]);
+ return response()->json(['status' => 'success', 'message' => 'Data created!', 'code' => 200]);
}
- public function update(Request $request, $id){
- if(empty($id) || !is_int((int)$id))
- return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
+ public function update(Request $request, $id)
+ {
+ if (empty($id) || !is_int((int)$id))
+ return response()->json(['status' => 'failed', 'message' => 'id is required!', 'code' => 400], 400);
$this->validate($request, [
'name' => 'string|required',
@@ -47,68 +51,75 @@ class DivisiController extends Controller
]);
$data = Divisi::find($id);
- $request->name !== $data['name'] ? $this->validate($request,['name'=>'unique:m_divisi,name']) : '';
+ $request->name !== $data['name'] ? $this->validate($request, ['name' => 'unique:m_divisi,name']) : '';
- if(!$data)
- return response()->json(['status'=>'failed','message'=> 'Data not found!','code'=> 404], 404);
+ if (!$data)
+ return response()->json(['status' => 'failed', 'message' => 'Data not found!', 'code' => 404], 404);
$result = $data->update($request->all());
- if(!$result)
- return response()->json(['status'=>'failed','message'=> 'Update failed!','code'=> 500], 500);
+ if (!$result)
+ return response()->json(['status' => 'failed', 'message' => 'Update failed!', 'code' => 500], 500);
- return response()->json(['status'=>'success','message'=>'Data added!','code'=>200], 200);
+ return response()->json(['status' => 'success', 'message' => 'Data added!', 'code' => 200], 200);
}
public function delete($id)
{
- if(empty($id) || !is_int((int)$id))
- return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
+ if (empty($id) || !is_int((int)$id))
+ return response()->json(['status' => 'failed', 'message' => 'id is required!', 'code' => 400], 400);
$data = Divisi::find($id);
- if(!$data)
- return response()->json(['status'=>'failed','message'=> 'Data not found!','code'=> 404], 404);
+ if (!$data)
+ return response()->json(['status' => 'failed', 'message' => 'Data not found!', 'code' => 404], 404);
$delete = $data->delete();
- if(!$delete)
- return response()->json(['status'=>'failed','message'=> 'Delete failed!','code'=> 500], 500);
+ if (!$delete)
+ return response()->json(['status' => 'failed', 'message' => 'Delete failed!', 'code' => 500], 500);
- return response()->json(['status'=>'success','message'=> 'Data deleted!','code'=> 200], 200);
+ return response()->json(['status' => 'success', 'message' => 'Data deleted!', 'code' => 200], 200);
}
public function search(Request $request)
- {
- $payload = $request->all();
- $dataBuilder = $this->setUpPayload($payload, 'm_divisi');
- $builder = $dataBuilder['builder'];
- $countBuilder = $dataBuilder['count'];
- $dataGet = $builder->get();
- $totalRecord = $countBuilder->count();
- return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200);
- //return $this->list();
- // cant use builder for this case
+ {
+ $companyId = $request->input('columns.0.value');
+ $parentDivisi = Divisi::whereNull('parent')
+ ->where('company_id', $companyId)
+ ->with('children')
+ ->get();
+ $divisions = [];
+ foreach ($parentDivisi as $objRow) {
+ $objRow->children = $this->getAllChildren($objRow);
+ // $objRow->key = rand(1, 1000);
+ $divisions[] = $objRow;
+ }
+ $countData = count($divisions);
+ if ($countData == 0)
+ return response()->json(['status' => 'failed', 'message' => 'Data not found!', 'code' => 404], 404);
+
+ return response()->json(['status' => 'success', 'code' => 200, 'data' => $divisions, 'totalRecord' => $countData], 200);
}
public function list()
{
$parentMenus = Divisi::whereNull('parent')->with('children')->get();
$divisions = [];
- foreach($parentMenus as $menu){
+ foreach ($parentMenus as $menu) {
$childs = $this->getAllChildren($menu);
- foreach($childs as $d){
+ foreach ($childs as $d) {
$d->displayName = ' ' . $d->name;
- for($i=0; $i < $d->depth; $i++){
- $d->displayName = '--' . $d->displayName ;
+ for ($i = 0; $i < $d->depth; $i++) {
+ $d->displayName = '--' . $d->displayName;
}
array_push($divisions, $d);
}
}
$countData = count($divisions);
- if($countData == 0)
- return response()->json(['status'=>'failed','message'=>'Data not found!','code'=> 404], 404);
+ if ($countData == 0)
+ return response()->json(['status' => 'failed', 'message' => 'Data not found!', 'code' => 404], 404);
- return response()->json(['status'=>'success','code'=>200,'data'=> $divisions, 'totalRecord'=> $countData], 200);
+ return response()->json(['status' => 'success', 'code' => 200, 'data' => $divisions, 'totalRecord' => $countData], 200);
}
}
diff --git a/app/Http/Controllers/FolderDocumentProyekController.php b/app/Http/Controllers/FolderDocumentProyekController.php
index ed51469..ea46b8c 100644
--- a/app/Http/Controllers/FolderDocumentProyekController.php
+++ b/app/Http/Controllers/FolderDocumentProyekController.php
@@ -1,131 +1,143 @@
-validate($request, [
- 'name_folder' => 'required',
- 'proyek_id' => 'required'
- ]);
- $data = $request->all();
- $data['created_by'] = $this->currentName;
-
- $result = FolderDocumentProyek::create($data);
- if($result){
- return response()->json(['status'=>'success','message'=>'Folder Document Proyek successfull created','code'=>200]);
- }else{
- return response()->json(['status'=>'failed','message'=>'Folder Document Proyek failed created','code'=>400]);
- }
- }
-
- public function update(Request $request, $id){
-
- if(!$id || (int) $id < 0 || $id==""){
- return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
- }
- $data = FolderDocumentProyek::find($id);
- if($data){
- $result = $data->update($request->all());
- }else{
- return response()->json(['status'=>'failed','message'=>'Data Folder Document Proyek not found!','code'=>400], 400);
- die();
- }
-
- if($result){
- return response()->json(['status'=>'success','message'=>'Folder Document Proyek successfully updated!','code'=>200], 200);
- }else{
- return response()->json(['status'=>'failed','message'=>'Folder Document Proyek failed updated!','code'=>400], 400);
- }
- }
-
- public function delete($id)
- {
- $data = FolderDocumentProyek::find($id);
-
- if($data){
- $delete = $data->delete();
- }else{
- return response()->json(['status'=>'failed','message'=>'data Folder Document Proyek not found!','code'=>400], 400);
- die();
- }
-
-
- if($delete){
- return response()->json(['status'=>'success','message'=>'Folder Document Proyek successfully deleted!','code'=>200], 200);
- }else{
- return response()->json(['status'=>'failed','message'=>'Folder Document Proyek failed deleted!','code'=>400], 400);
- }
- }
-
- public function search(Request $request)
- {
- $payload = $request->all();
- $dataBuilder = $this->setUpPayload($payload, 'm_FolderDocumentProyek');
- $builder = $dataBuilder['builder'];
- $countBuilder = $dataBuilder['count'];
- $dataGet = $builder->get();
- $totalRecord = $countBuilder->count();
- return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200);
- }
-
- public function list()
- {
- $data = FolderDocumentProyek::all();
- $countData = $data->count();
-
- if($data){
- return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200);
- }else{
- return response()->json(['status'=>'failed','message'=>'failed get list tools request, please try again later!','code'=>400], 400);
- }
- }
- public function getTree($id)
- {
- $data = FolderDocumentProyek::where('proyek_id', $id)->whereNull('parent_id')->orderByRaw('id ASC')->get();
- $dataFile = DokumenProject::where('type_dokumen', 'project-document-out-folder')->where('ref_id', $id)->orderByRaw('id ASC')->get();
- $finalData = [];
- foreach($data as $objRow){
- $objRow->children = $this->getChildren($id, $objRow->id);
- $objRow->key = rand(1, 1000);
- $objRow->isDir = true;
- $finalData[] = $objRow;
- }
-
- foreach($dataFile as $objRowFile) {
- $objRowFile->key = rand(1, 1000);
- $objRowFile->isDir = false;
- $objRowFile->proyek_id = $id;
- $finalData[] = $objRowFile;
- }
-
- return response()->json(['status'=>'success','data'=>$finalData,'code'=>200], 200);
- }
-
- private function getChildren($proyek_id, $parent_id)
- {
- $finalData = [];
- $data = FolderDocumentProyek::where('proyek_id', $proyek_id)->where('parent_id', $parent_id)->orderByRaw('id ASC')->get();
- $dataFile = DokumenProject::where('type_dokumen', 'project-document-in-folder')->where('ref_id', $parent_id)->orderByRaw('id ASC')->get();
- foreach($data as $objRow){
- $objRow->key = rand(1, 1000);
- $objRow->children = $this->getChildren($proyek_id, $objRow->id);
- $objRow->isDir = true;
- $finalData[] = $objRow;
- }
-
- foreach($dataFile as $objRowFile) {
- $objRowFile->key = rand(1, 1000);
- $objRowFile->isDir = false;
- $objRowFile->proyek_id = $proyek_id;
- $finalData[] = $objRowFile;
- }
-
- return $finalData;
- }
-}
+validate($request, [
+ 'name_folder' => 'required',
+ 'proyek_id' => 'required'
+ ]);
+ $data = $request->all();
+ $data['created_by'] = $this->currentName;
+
+ $result = FolderDocumentProyek::create($data);
+ if($result){
+ return response()->json(['status'=>'success','message'=>'Folder Document Proyek successfull created','code'=>200]);
+ }else{
+ return response()->json(['status'=>'failed','message'=>'Folder Document Proyek failed created','code'=>400]);
+ }
+ }
+
+ public function update(Request $request, $id){
+
+ if(!$id || (int) $id < 0 || $id==""){
+ return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
+ }
+ $data = FolderDocumentProyek::find($id);
+ if($data){
+ $result = $data->update($request->all());
+ }else{
+ return response()->json(['status'=>'failed','message'=>'Data Folder Document Proyek not found!','code'=>400], 400);
+ die();
+ }
+
+ if($result){
+ return response()->json(['status'=>'success','message'=>'Folder Document Proyek successfully updated!','code'=>200], 200);
+ }else{
+ return response()->json(['status'=>'failed','message'=>'Folder Document Proyek failed updated!','code'=>400], 400);
+ }
+ }
+
+ public function delete($id, $company_id)
+ {
+ DB::beginTransaction();
+ $data = FolderDocumentProyek::find($id);
+ $company = Company::find($company_id);
+ if($data && $company) {
+ $destinationPath = $this->setCustomeDirectoryUpload($company['company_name']);
+ $dir = $destinationPath['pathDocument'];
+ $dataFile = DokumenProject::where([['type_dokumen', 'project-document-in-folder'],['ref_id', $data['id']]])->orderByRaw('id ASC')->get();
+ if (is_dir($dir)) {
+ foreach ($dataFile as $file) {
+ unlink($dir.$file['file']);
+ }
+ }
+ if($data->delete()) {
+ DB::commit();
+ return response()->json(['status'=>'success','message'=>'Folder Document Proyek successfully deleted!','code'=>200], 200);
+ } else {
+ DB::rollBack();
+ return response()->json(['status'=>'failed','message'=>'Folder Document Proyek failed deleted!','code'=>400], 400);
+ }
+ } else {
+ DB::rollBack();
+ return response()->json(['status'=>'failed','message'=>'Data Folder Document Proyek not found!','code'=>400], 400);
+ }
+ }
+
+ public function search(Request $request)
+ {
+ $payload = $request->all();
+ $dataBuilder = $this->setUpPayload($payload, 'm_FolderDocumentProyek');
+ $builder = $dataBuilder['builder'];
+ $countBuilder = $dataBuilder['count'];
+ $dataGet = $builder->get();
+ $totalRecord = $countBuilder->count();
+ return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200);
+ }
+
+ public function list()
+ {
+ $data = FolderDocumentProyek::all();
+ $countData = $data->count();
+
+ if($data){
+ return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200);
+ }else{
+ return response()->json(['status'=>'failed','message'=>'failed get list tools request, please try again later!','code'=>400], 400);
+ }
+ }
+
+ public function getTree($id)
+ {
+ $data = FolderDocumentProyek::where('proyek_id', $id)->whereNull('parent_id')->orderByRaw('id ASC')->get();
+ $dataFile = DokumenProject::where('type_dokumen', 'project-document-out-folder')->where('ref_id', $id)->orderByRaw('id ASC')->get();
+ $finalData = [];
+ foreach($data as $objRow){
+ $objRow->children = $this->getChildren($id, $objRow->id);
+ $objRow->key = rand(1, 1000);
+ $objRow->isDir = true;
+ $finalData[] = $objRow;
+ }
+
+ foreach($dataFile as $objRowFile) {
+ $objRowFile->key = rand(1, 1000);
+ $objRowFile->isDir = false;
+ $objRowFile->proyek_id = (int)$id;
+ $finalData[] = $objRowFile;
+ }
+
+ return response()->json(['status'=>'success','data'=>$finalData,'code'=>200], 200);
+ }
+
+ private function getChildren($proyek_id, $parent_id)
+ {
+ $finalData = [];
+ $data = FolderDocumentProyek::where('proyek_id', $proyek_id)->where('parent_id', $parent_id)->orderByRaw('id ASC')->get();
+ $dataFile = DokumenProject::where('type_dokumen', 'project-document-in-folder')->where('ref_id', $parent_id)->orderByRaw('id ASC')->get();
+ foreach($data as $objRow){
+ $objRow->key = rand(1, 1000);
+ $objRow->children = $this->getChildren($proyek_id, $objRow->id);
+ $objRow->isDir = true;
+ $finalData[] = $objRow;
+ }
+
+ foreach($dataFile as $objRowFile) {
+ $objRowFile->key = rand(1, 1000);
+ $objRowFile->isDir = false;
+ $objRowFile->proyek_id = (int)$proyek_id;
+ $finalData[] = $objRowFile;
+ }
+
+ return $finalData;
+ }
+}
diff --git a/app/Http/Controllers/HierarchyFtthController.php b/app/Http/Controllers/HierarchyFtthController.php
index 3b3f64f..bcf27ad 100644
--- a/app/Http/Controllers/HierarchyFtthController.php
+++ b/app/Http/Controllers/HierarchyFtthController.php
@@ -6,6 +6,7 @@ use Illuminate\Http\Request;
use App\Models\HierarchyFtth;
use App\Models\VersionGantt;
use Illuminate\Support\Facades\Log;
+use Illuminate\Support\Facades\Artisan;
class HierarchyFtthController extends Controller
{
@@ -102,36 +103,41 @@ class HierarchyFtthController extends Controller
}
}
- public function countProgress($project_id) {
- $ftthIds = VersionGantt::select('hierarchy_ftth_id')
- ->where('proyek_id', $project_id)
- ->groupBy('hierarchy_ftth_id')
- ->get();
- if($ftthIds){
- foreach ($ftthIds as $ftthId) {
- $gantts = VersionGantt::where('hierarchy_ftth_id', $ftthId->hierarchy_ftth_id)->sum('progress');
- $bobot_planning = VersionGantt::where('hierarchy_ftth_id', $ftthId->hierarchy_ftth_id)->sum('bobot');
- $ganttCount = VersionGantt::where('hierarchy_ftth_id', $ftthId->hierarchy_ftth_id)->count();
-
- $ftth = HierarchyFtth::find($ftthId->hierarchy_ftth_id);
- if($ftth){
- $round = $gantts/$ganttCount;
- $round_bobot = $bobot_planning/$ganttCount;
- $ftth->progress = round($round, 2);
- $ftth->bobot_planning = round($round_bobot, 2);
- try {
- $ftth->save();
- } catch (\Exception $e) {
- // Log the error or handle it in some other way
- Log::error($e->getMessage());
- }
+ public function countProgress($hierarchy_id) {
+ // $ftthIds = VersionGantt::select('hierarchy_ftth_id')
+ // ->where('proyek_id', $project_id)
+ // ->groupBy('hierarchy_ftth_id')
+ // ->get();
+ // if($ftthIds){
+ // foreach ($ftthIds as $ftthId) {
+ // $gantts = VersionGantt::where('hierarchy_ftth_id', $ftthId->hierarchy_ftth_id)->sum('progress');
+ // $bobot_planning = VersionGantt::where('hierarchy_ftth_id', $ftthId->hierarchy_ftth_id)->sum('bobot');
+ // $ganttCount = VersionGantt::where('hierarchy_ftth_id', $ftthId->hierarchy_ftth_id)->count();
- if($ftth->parent_id){
- $this->countParent($ftth);
- }
- }
- }
- }
+ // $ftth = HierarchyFtth::find($ftthId->hierarchy_ftth_id);
+ // if($ftth){
+ // $round = $gantts/$ganttCount;
+ // $round_bobot = $bobot_planning/$ganttCount;
+ // $ftth->progress = round($round, 2);
+ // $ftth->bobot_planning = round($round_bobot, 2);
+ // try {
+ // $ftth->save();
+ // } catch (\Exception $e) {
+ // // Log the error or handle it in some other way
+ // Log::error($e->getMessage());
+ // }
+
+ // if($ftth->parent_id){
+ // $this->countParent($ftth);
+ // }
+ // }
+ // }
+ // }
+
+ // calculate ke curva berdasarkan site
+ Artisan::call('calculate:progressgantt', [
+ 'hierarchy_id' => $hierarchy_id
+ ]);
}
public function countParent($ftth){
@@ -179,7 +185,6 @@ class HierarchyFtthController extends Controller
public function getTreeByProject($project_id)
{
- $this->countProgress(intval($project_id));
$data = HierarchyFtth::where('project_id', $project_id)->whereNull('parent_id')->orderByRaw('id ASC')->get();
$finalData = [];
foreach($data as $objRow){
@@ -204,7 +209,13 @@ class HierarchyFtthController extends Controller
return response()->json(['status'=>'success','data'=>$finalData,'code'=>200], 200);
}
-
+ public function countProgressTree($hierarchy_id)
+ {
+ Artisan::call('calculate:progressgantt', [
+ 'hierarchy_id' => $hierarchy_id
+ ]);
+ return response()->json(['status'=>'success','code'=>200], 200);
+ }
private function getChildren($project_id, $parent_id)
{
$finalData = [];
diff --git a/app/Http/Controllers/HolidayController.php b/app/Http/Controllers/HolidayController.php
index c64fee8..000a925 100644
--- a/app/Http/Controllers/HolidayController.php
+++ b/app/Http/Controllers/HolidayController.php
@@ -1,140 +1,140 @@
-validate($request, [
- 'proyek_id' => 'required',
- 'version_gantt_id' => 'required',
- 'date' => 'required'
- ]);
-
- $data = $request->all();
- $duration = $request->duration;
- if(!$duration){
- $data['duration'] = 1;
- }
- $data['created_by'] = $this->currentName;
-
- $result = Holiday::create($data);
-
- if($result){
- return response()->json(['status'=>'success','message'=>'add holiday successfully!','code'=>200], 200);
- }else{
- return response()->json(['status'=>'failed','message'=>'add holiday failed!','code'=>400], 400);
- }
- }
-
- public function edit($id){
- if(!$id || (int) $id < 0 || $id==""){
- return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
- die();
- }
-
- $result = Holiday::find($id);
-
- if($result){
- return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200);
- }else{
- return response()->json(['status'=>'failed','message'=>'failed get data holiday, please try again later!','code'=>400], 400);
- }
- }
-
- public function update(Request $request, $id)
- {
- if(!$id || (int) $id < 0 || $id==""){
- return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
- }
-
- $data = Holiday::find($id);
-
- if($data){
- $result = $data->update($request->all());
- }else{
- return response()->json(['status'=>'failed','message'=>'data holiday not found!','code'=>400], 400);
- die();
- }
-
-
- if($result){
- return response()->json(['status'=>'success','message'=>'data holiday successfully updated!','code'=>200], 200);
- }else{
- return response()->json(['status'=>'failed','message'=>'data holiday failed updated!','code'=>400], 400);
- }
- }
-
- public function delete($id)
- {
- $data = Holiday::find($id);
-
- if($data){
- $deletedData = $data;
- $delete = $data->delete();
- }else{
- return response()->json(['status'=>'failed','message'=>'data holiday not found!','code'=>400], 400);
- die();
- }
-
-
- if($delete){
- return response()->json(['status'=>'success', 'data'=>$deletedData,'message'=>'data holiday successfully deleted!','code'=>200], 200);
- }else{
- return response()->json(['status'=>'failed','message'=>'data holiday failed deleted!','code'=>400], 400);
- }
- }
-
- public function search(Request $request)
- {
- $payload = $request->all();
- $dataBuilder = $this->setUpPayload($payload, 'm_holidays');
- $builder = $dataBuilder['builder'];
- $countBuilder = $dataBuilder['count'];
- $dataGet = $builder->get();
- $totalRecord = $countBuilder->count();
- return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200);
- }
-
- public function list()
- {
- $data = Holiday::all();
- $countData = $data->count();
-
- if($data){
- return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200);
- }else{
- return response()->json(['status'=>'failed','message'=>'failed get list holiday, please try again later!','code'=>400], 400);
- }
- }
-
- public function datatables(Request $request){
- $proyek_id = $request->query('proyek_id');
- $gantt_id = $request->query('gantt_id');
-
- $data = Holiday::where('proyek_id', $proyek_id)->where('version_gantt_id', $gantt_id)->get();
-
- return Datatables::of($data)
- ->editColumn('date', function($row) {
- $date = date_create($row->date);
- $dateFormat = date_format($date,"d-m-Y");
- return $dateFormat;
- })
- ->editColumn('duration', function($row) {
- $day = (int)$row->duration > 1 ? "days" : "day";
- return $row->duration." ".$day;
- })
- ->addIndexColumn()
- ->addColumn('action', function($row){
- $actionBtn = '';
- return $actionBtn;
- })
-
- ->rawColumns(['action'])->make(true);
- }
-}
+validate($request, [
+ 'proyek_id' => 'required',
+ 'version_gantt_id' => 'required',
+ 'date' => 'required'
+ ]);
+
+ $data = $request->all();
+ $duration = $request->duration;
+ if(!$duration){
+ $data['duration'] = 1;
+ }
+ $data['created_by'] = $this->currentName;
+
+ $result = Holiday::create($data);
+
+ if($result){
+ return response()->json(['status'=>'success','message'=>'add holiday successfully!','code'=>200], 200);
+ }else{
+ return response()->json(['status'=>'failed','message'=>'add holiday failed!','code'=>400], 400);
+ }
+ }
+
+ public function edit($id){
+ if(!$id || (int) $id < 0 || $id==""){
+ return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
+ die();
+ }
+
+ $result = Holiday::find($id);
+
+ if($result){
+ return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200);
+ }else{
+ return response()->json(['status'=>'failed','message'=>'failed get data holiday, please try again later!','code'=>400], 400);
+ }
+ }
+
+ public function update(Request $request, $id)
+ {
+ if(!$id || (int) $id < 0 || $id==""){
+ return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
+ }
+
+ $data = Holiday::find($id);
+
+ if($data){
+ $result = $data->update($request->all());
+ }else{
+ return response()->json(['status'=>'failed','message'=>'data holiday not found!','code'=>400], 400);
+ die();
+ }
+
+
+ if($result){
+ return response()->json(['status'=>'success','message'=>'data holiday successfully updated!','code'=>200], 200);
+ }else{
+ return response()->json(['status'=>'failed','message'=>'data holiday failed updated!','code'=>400], 400);
+ }
+ }
+
+ public function delete($id)
+ {
+ $data = Holiday::find($id);
+
+ if($data){
+ $deletedData = $data;
+ $delete = $data->delete();
+ }else{
+ return response()->json(['status'=>'failed','message'=>'data holiday not found!','code'=>400], 400);
+ die();
+ }
+
+
+ if($delete){
+ return response()->json(['status'=>'success', 'data'=>$deletedData,'message'=>'data holiday successfully deleted!','code'=>200], 200);
+ }else{
+ return response()->json(['status'=>'failed','message'=>'data holiday failed deleted!','code'=>400], 400);
+ }
+ }
+
+ public function search(Request $request)
+ {
+ $payload = $request->all();
+ $dataBuilder = $this->setUpPayload($payload, 'm_holidays');
+ $builder = $dataBuilder['builder'];
+ $countBuilder = $dataBuilder['count'];
+ $dataGet = $builder->get();
+ $totalRecord = $countBuilder->count();
+ return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200);
+ }
+
+ public function list()
+ {
+ $data = Holiday::all();
+ $countData = $data->count();
+
+ if($data){
+ return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200);
+ }else{
+ return response()->json(['status'=>'failed','message'=>'failed get list holiday, please try again later!','code'=>400], 400);
+ }
+ }
+
+ public function datatables(Request $request){
+ $proyek_id = $request->query('proyek_id');
+ $gantt_id = $request->query('gantt_id');
+
+ $data = Holiday::where('proyek_id', $proyek_id)->where('version_gantt_id', $gantt_id)->get();
+
+ return Datatables::of($data)
+ ->editColumn('date', function($row) {
+ $date = date_create($row->date);
+ $dateFormat = date_format($date,"d-m-Y");
+ return $dateFormat;
+ })
+ ->editColumn('duration', function($row) {
+ $day = (int)$row->duration > 1 ? "days" : "day";
+ return $row->duration." ".$day;
+ })
+ ->addIndexColumn()
+ ->addColumn('action', function($row){
+ $actionBtn = '';
+ return $actionBtn;
+ })
+
+ ->rawColumns(['action'])->make(true);
+ }
+}
diff --git a/app/Http/Controllers/HumanResourceController.php b/app/Http/Controllers/HumanResourceController.php
index be26a1c..9e61237 100644
--- a/app/Http/Controllers/HumanResourceController.php
+++ b/app/Http/Controllers/HumanResourceController.php
@@ -3,20 +3,82 @@
namespace App\Http\Controllers;
use Illuminate\Http\Request;
-use App\Models\HumanResource;
-use App\Models\UserToActivity;
-use App\Models\UserToProyek;
+use App\Models\{HumanResource,ProductTransaction,UserToActivity,UserToProyek,User};
use Illuminate\Support\Facades\Artisan;
+const URL_EMAIL = 'https://notifapp.odm-iu.com/service-mail/notif_mail.php';
+
class HumanResourceController extends Controller
{
public function add(Request $request)
{
+ $messages = [
+ 'ktp_number.unique' => 'Nomor KTP/ID Card tidak boleh sama',
+ 'username.unique' => 'Username tidak boleh sama',
+ 'required' => 'Data tidak boleh kosong'
+ ];
+
+ $this->validate($request, [
+ 'name' => 'required|string',
+ 'ktp_number' => 'required|string|unique:m_users,ktp_number',
+ 'employee_type' => 'required|in:employee,subcon,freelance',
+ 'company_id' => 'required|integer',
+ 'username' => 'string|unique:m_users,username',
+ 'email' => 'string|unique:m_users,email'
+ ], $messages);
+
+ $data = $request->all();
+ !$request->is_customer ? $this->validate($request,['role_id' => 'required','divisi_id' => 'required'], $messages) : '';
+
+ if (isset($request->password) && $request->password != "") {
+ $data['password'] = md5($request->password);
+ }
+
+ $transaction = ProductTransaction::query()
+ ->where('company_id', (int) $request->company_id);
+ $cloneQueryTransaction = clone $transaction;
+
+ $countCreate = false;
+ $projectResult = HumanResource::query()
+ ->selectRaw('count(*) as total_hr')
+ ->where('company_id', (int) $request->company_id)
+ ->first();
+ if($transaction->where([['type_paket','Basic'],['amount','!=',null]])->exists()) {
+ if($projectResult['total_hr'] < 50) {
+ $countCreate = true;
+ }
+ } elseif ($cloneQueryTransaction->where([['type_paket','Free'],['amount',0]])->exists()) {
+ if($projectResult['total_hr'] < 1) {
+ $countCreate = true;
+ }
+ } else {
+ $countCreate = true;
+ }
+
+ if($countCreate) {
+ $result = HumanResource::create($data);
+ } else {
+ return response()->json(['status' => 'failed', 'message' => 'Limited to create human resource!', 'code' => 500], 500);
+ }
+
+ if ($result) {
+ return response()->json(['status' => 'success', 'message' => 'Human Resource Pool successfull created', 'code' => 200]);
+ } else {
+ return response()->json(['status' => 'failed', 'message' => 'Human Resource Pool failed created', 'code' => 400]);
+ }
+ }
+
+ public function add_user(Request $request)
+ {
+
$this->validate($request, [
'role_id' => 'required',
'name' => 'required',
- 'ktp_number' => 'required|numeric|unique:m_users,ktp_number',
- 'employee_type' => 'required'
+ 'ktp_number' => 'required|string|unique:m_users,ktp_number',
+ 'employee_type' => 'required',
+ 'company_id' => 'required',
+ 'username' => 'required',
+ 'email' => 'required|unique:m_users,email|email'
]);
$data = $request->all();
@@ -28,6 +90,7 @@ class HumanResourceController extends Controller
$result = HumanResource::create($data);
if ($result) {
+ $this->sendEmail($request->email, $request->password);
return response()->json(['status' => 'success', 'message' => 'Human Resource Pool successfull created', 'code' => 200]);
} else {
return response()->json(['status' => 'failed', 'message' => 'Human Resource Pool failed created', 'code' => 400]);
@@ -52,35 +115,75 @@ class HumanResourceController extends Controller
public function update(Request $request, $id)
{
+ $messages = [
+ 'ktp_number.unique' => 'Nomor KTP/ID Card tidak boleh sama',
+ 'username.unique' => 'Username tidak boleh sama',
+ 'required' => 'Data tidak boleh kosong'
+ ];
+
+ $request->validate($request, [
+ 'name' => 'required|string',
+ 'ktp_number' => 'required|string|unique:m_users,ktp_number,'.$id . ',id',
+ 'employee_type' => 'required|in:employee,subcon,freelance',
+ 'company_id' => 'required|integer',
+ 'username' => 'unique:m_users,username,'.$id . ',id',
+ 'email' => 'string|unique:m_users,email,'.$id . ',id'
+ ], $messages);
+
+ !$request->is_customer ? $this->validate($request,['role_id'=>'required', 'divisi_id'=>'required'], $messages) : '';
+ $request->password ? $this->validate($request,['password'=>'required|min:8']) : '';
+
+ $data = $request->all();
if (!$id || (int) $id < 0 || $id == "") {
- return response()->json(['status' => 'failed', 'message' => 'id is required!', 'code' => 400], 400);
+ return response()->json(['status' => 'failed', 'message' => 'Id is required!', 'code' => 400], 400);
}
- $humanresource = HumanResource::find($id);
- $request->ktp_number !== $humanresource['ktp_number'] ? $this->validate($request,['ktp_number'=>'unique:m_users,ktp_number|numeric']) : '';
- $request->email !== $humanresource['email'] ? $this->validate($request,['email'=>'unique:m_users,email|email']) : '';
- $request->password ? $this->validate($request,['password'=>'required|min:8']) : '';
+ $humanresource = HumanResource::find($id);
+ if(empty($humanresource)) {
+ return response()->json(['status' => 'failed', 'message' => 'Data Human Resource not found!', 'code' => 400], 400);
+ }
- $data = $request->all();
+ if($request->company_id && isset($request->password) && isset($request->username)) {
+ $transaction = ProductTransaction::query()
+ ->where('company_id', $request->company_id);
+ $cloneQueryTransaction = clone $transaction;
+ $countCreate = false;
+ $projectResult = HumanResource::query()
+ ->selectRaw('count(*) as total_hr')
+ ->where([
+ ['company_id', $request->company_id],
+ ['username', '!=', null],
+ ['password', '!=', null]
+ ])
+ ->first();
+ if($transaction->where([['type_paket','Basic'],['amount','!=',null]])->exists()) {
+ if($projectResult['total_hr'] < 10) {
+ $countCreate = true;
+ }
+ } elseif ($cloneQueryTransaction->where([['type_paket','Free'],['amount',0]])->exists()) {
+ if($projectResult['total_hr'] < 1) {
+ $countCreate = true;
+ }
+ } else {
+ $countCreate = true;
+ }
+ } else {
+ $countCreate = true;
+ }
if (isset($request->password) && $request->password != "") {
$data['password'] = md5($request->password);
}
- if (isset($data['username']) && HumanResource::where('username', $data['username'])->where('id', '<>', $id)->exists()) {
- return response()->json(['status' => 'failed', 'message' => 'Username already exists!', 'code' => 400], 400);
- }
-
- if ($humanresource) {
+ if ($countCreate) {
$result = $humanresource->update($data);
- } else {
- return response()->json(['status' => 'failed', 'message' => 'data Human Resource Pool not found!', 'code' => 400], 400);
- die();
+ } else {
+ return response()->json(['status' => 'failed', 'message' => 'Limited to create human resource!', 'code' => 500], 500);
}
if ($result) {
- return response()->json(['status' => 'success', 'message' => 'Human Resource Pool successfully updated!', 'code' => 200], 200);
+ return response()->json(['status' => 'success', 'data' => $result, 'message' => 'Human Resource Pool successfully updated!', 'code' => 200], 200);
} else {
return response()->json(['status' => 'failed', 'message' => 'Human Resource Pool failed updated!', 'code' => 400], 400);
}
@@ -94,7 +197,6 @@ class HumanResourceController extends Controller
$delete = $data->delete();
} else {
return response()->json(['status' => 'failed', 'message' => 'data Human Resource Pool not found!', 'code' => 400], 400);
- die();
}
@@ -118,7 +220,7 @@ class HumanResourceController extends Controller
public function list()
{
- $data = HumanResource::select('id', 'name', 'role_id')->get();
+ $data = HumanResource::select('id', 'name', 'role_id','company_id')->get();
$countData = $data->count();
if ($data) {
@@ -196,4 +298,60 @@ class HumanResourceController extends Controller
{
Artisan::call('sync:integration-human-resources');
}
+
+ public function sendEmail($email, $password)
+ {
+ $user = User::select('email', 'name', 'username')->where('email', $email)->first();
+ if (!$user) {
+ return response()->json(['status' => 'error', 'message' => 'e-mail not found '], 400);
+ } else {
+ $this->reqHttpCurl($email, $password, $user->username, $user->name);
+ return response()->json(['status' => 'error', 'code'=>400, 'message' => 'e-mail not found '], 400);
+ }
+ }
+
+ private function reqHttpCurl($email, $password, $username, $name)
+ {
+ $postData = [
+ "to" => $email,
+ "name" => $name,
+ "username" => $username,
+ "password" => $password,
+ "from" => "app.integrasia@integrasiautama.com",
+ "alias_from" => "OSPRO",
+ "subject" => "Registration OSPRO",
+ "body" => "registration-ospro"
+ ];
+
+ $curl = curl_init();
+
+ curl_setopt_array($curl, array(
+ CURLOPT_URL => URL_EMAIL,
+ CURLOPT_RETURNTRANSFER => true,
+ CURLOPT_ENCODING => "",
+ CURLOPT_MAXREDIRS => 10,
+ CURLOPT_TIMEOUT => 30000,
+ CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
+ CURLOPT_CUSTOMREQUEST => "POST",
+ CURLOPT_POSTFIELDS => json_encode($postData),
+ CURLOPT_HTTPHEADER => array(
+ // Set here requred headers
+ "accept: */*",
+ "accept-language: en-US,en;q=0.8",
+ "content-type: application/json",
+ ),
+ ));
+
+ $response = curl_exec($curl);
+ $err = curl_error($curl);
+
+ curl_close($curl);
+
+ if ($err) {
+ echo "cURL Error #:" . $err;
+ } else {
+ print_r(json_decode($response));
+ }
+
+ }
}
diff --git a/app/Http/Controllers/ImageController.php b/app/Http/Controllers/ImageController.php
index 6ecb88c..1e3c194 100644
--- a/app/Http/Controllers/ImageController.php
+++ b/app/Http/Controllers/ImageController.php
@@ -1,121 +1,292 @@
-hasFile('files')){
-
- $this->validate($request, [
- 'ref_id' => 'required',
- 'category' => 'required'
- ]);
-
- $ref_id = $request->ref_id;
- $dokumen = $request->file('files');
- $extension = $dokumen->extension();
- $name = $ref_id.date("YmdHis").".".$extension;
-
- $resultMove = $dokumen->move($this->pathImage, $name);
-
- if($resultMove){
- $data = [
- 'ref_id' => (int)$ref_id,
- 'image' => $name,
- 'category' => $request->category
- ];
-
- $result = Image::create($data);
-
- if($result){
- return response()->json(['status'=>'success', "name_image"=>$name,'message'=>'image upload is successfully!','code'=>200], 200);
- }else{
- unlink($this->pathImage.$name);
- return response()->json(['status'=>'failed','message'=>'image upload is failed!','code'=>400], 400);
- }
-
- }else{
- return response()->json(['status'=>'failed','message'=>'image upload is failed!','code'=>400], 400);
- }
- }else{
- return response()->json(['status'=>'failed','message'=>'image is required!','code'=>400], 400);
- }
- }
-
- public function delete($id)
- {
- $data = Image::find($id);
-
- if($data){
- unlink($this->pathImage.$data->image);
- $delete = $data->delete();
- }else{
- return response()->json(['status'=>'failed','message'=>'data image not found!','code'=>400], 400);
- die();
- }
-
-
- if($delete){
- return response()->json(['status'=>'success','message'=>'data image successfully deleted!','code'=>200], 200);
- }else{
- return response()->json(['status'=>'failed','message'=>'data image failed deleted!','code'=>400], 400);
- }
- }
-
- public function search(Request $request)
- {
- $payload = $request->all();
- $dataBuilder = $this->setUpPayload($payload, 'm_image');
- $builder = $dataBuilder['builder'];
- $countBuilder = $dataBuilder['count'];
- $dataGet = $builder->get();
- $totalRecord = $countBuilder->count();
- return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200);
- }
-
- public function deleteByRef($id, $category)
- {
- $data = Image::where("ref_id", $id)->where("category", $category)->first();
-
- if($data){
- unlink($this->pathImage.$data->image);
- $delete = $data->delete();
- }else{
- return response()->json(['status'=>'failed','message'=>'data image not found!','code'=>400], 400);
- die();
- }
-
-
- if($delete){
- return response()->json(['status'=>'success','message'=>'data image successfully deleted!','code'=>200], 200);
- }else{
- return response()->json(['status'=>'failed','message'=>'data image failed deleted!','code'=>400], 400);
- }
- }
-
- public function getByRefId($id, $category)
- {
- if(!$id || (int) $id < 0 || $id==""){
- return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
- die();
- }
-
- if(!$category || $category==""){
- return response()->json(['status'=>'failed','message'=>'category is required!','code'=>400], 400);
- die();
- }
-
- $result = Image::where("ref_id", $id)->where("category", $category)->first();
-
- if($result){
- return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200);
- }else{
- return response()->json(['status'=>'failed','message'=>'failed get data image, please try again later!','code'=>400], 400);
- }
- }
-}
+hasFile('files')){
+
+ $this->validate($request, [
+ 'ref_id' => 'required',
+ 'category' => 'required'
+ ]);
+
+ $ref_id = $request->ref_id;
+ $dokumen = $request->file('files');
+ $extension = $dokumen->extension();
+ $category = $request->category;
+ $name = $ref_id.date("YmdHis").".".$extension;
+ // Limited Storage
+ $company = Company::where('company_name', $request->company_name)->first();
+ if($company) {
+ $destinationPath = $this->setCustomeDirectoryUpload($company['company_name']);
+ $getLimitStorage = $this->setLimitsStorage($company, $dokumen, $destinationPath['pathImage'], $destinationPath);
+ }
+ if(isset($getLimitStorage)) {
+ if($getLimitStorage === false) {
+ DB::rollBack();
+ return response()->json(['status' => 'failed', 'message' => 'Limited storage maximum!', 'code' => 500], 500);
+ }
+ $data = [
+ 'ref_id' => (int)$ref_id,
+ 'image' => $name,
+ 'category' => $category
+ ];
+
+ $result = Image::create($data);
+
+ $company = Company::find((int)$ref_id);
+ if($company && $category === 'company_logo_login') {
+ $dataArray = json_decode($company['logo_login'], true);
+ if(isset($dataArray['slider'])) {
+ $jsonImageSlider['login'] = $name;
+ $jsonImageSlider['slider'] = $dataArray['slider'];
+ } else {
+ $jsonImageSlider['login'] = $name;
+ }
+ $company->update([
+ 'logo_login' => $jsonImageSlider
+ ]);
+ }
+
+ if($company && $category === 'company_logo_header') {
+ $company->update([
+ 'logo_header' => array('content' => $name)
+ ]);
+ }
+
+ if($company && $category === 'company_favicon') {
+ $company->update([
+ 'favicon_image' => array('content' => $name)
+ ]);
+ }
+ if($dokumen->move($destinationPath['pathImage'], $name) && $result) {
+ DB::commit();
+ return response()->json(['status' => 'success', "name_image" => $name,'message' => 'image upload is successfully!','code' => 200], 200);
+ } else {
+ DB::rollBack();
+ unlink($destinationPath['pathImage'].$name);
+ return response()->json(['status' => 'failed','message' => 'image upload is failed!' ,'code' => 400], 400);
+ }
+
+ } else {
+ DB::rollBack();
+ return response()->json(['status'=>'failed','message'=>'image upload is failed!','code'=>400], 400);
+ }
+ } else {
+ DB::rollBack();
+ return response()->json(['status'=>'failed','message'=>'image is required!','code'=>400], 400);
+ }
+ }
+
+ public function uploadMultipleImage(Request $request) {
+ $this->validate($request, [
+ 'ref_id' => 'required',
+ 'category' => 'required',
+ 'files.*' => 'required|file|mimes:jpeg,png,jpg,gif|max:2048',
+ ]);
+
+ if ($request->hasFile('files')) {
+ $ref_id = $request->ref_id;
+ $category = $request->category;
+ $dokumen = $request->file('files');
+ $successCount = 0;
+ $imageSlider = [];
+ // Limited Storage
+ $company = Company::where('company_name', $request->company_name)->first();
+ if($company) {
+ $totalSize = 0;
+ $sizeFile = 0;
+ foreach ($dokumen as $file) {
+ $sizeFile += $file->getSize();
+ }
+ $destinationPath = $this->setCustomeDirectoryUpload($company['company_name']);
+ $folderPath = $destinationPath['pathImage'];
+
+ if (!file_exists($folderPath)) {
+ mkdir($folderPath, 0777, true);
+ }
+
+ $files = scandir($folderPath);
+
+ foreach ($files as $file) {
+ if (is_file($folderPath . '/' . $file)) {
+ $totalSize += filesize($folderPath . '/' . $file);
+ }
+ }
+ $totalSize += $sizeFile;
+ $transaction = ProductTransaction::query()
+ ->where('company_id', $company['id']);
+ $cloneQueryTransaction = clone $transaction;
+
+ $countCreate = false;
+ if($transaction->where([['type_paket','Basic'], ['amount','!=',null]])->exists()) {
+ $maximumSize = 500 * 1024 * 1024;
+ $countCreate = true;
+ } elseif ($cloneQueryTransaction->where([['type_paket','Free'], ['amount', 0]])->exists()) {
+ $maximumSize = 50 * 1024 * 1024;
+ $countCreate = true;
+ }
+ if($countCreate) {
+ if ($totalSize > $maximumSize) {
+ return response()->json(['status'=>'failed','message'=>'Limited storage maximum!','code'=> 500], 500);
+ }
+ }
+ }
+ foreach ($dokumen as $file) {
+ $extension = $file->extension();
+ $name = $ref_id.date("YmdHis").$successCount.".".$extension;
+
+ $resultMove = $file->move($folderPath, $name);
+
+ if ($resultMove) {
+ $data = [
+ 'ref_id' => (int) $ref_id,
+ 'image' => $name,
+ 'category' => $category
+ ];
+ $imageSlider[] = [
+ 'content' => $name
+ ];
+ $result = Image::create($data);
+ if ($result) {
+ $successCount++;
+ } else {
+ unlink($folderPath . $name);
+ }
+ }
+ }
+ $company = Company::find((int)$ref_id);
+ if($company && $category === 'company_slider_login') {
+ $dataArray = json_decode($company['logo_login'], true);
+ if(isset($dataArray['login'])) {
+ $jsonImageSlider['login'] = $dataArray['login'];
+ $jsonImageSlider['slider'] = $imageSlider;
+ } else {
+ $jsonImageSlider['slider'] = $imageSlider;
+ }
+ $company->update([
+ 'logo_login' => $jsonImageSlider
+ ]);
+ }
+ if ($successCount > 0 && $company) {
+ return response()->json(['status' => 'success', 'message' => "$successCount images uploaded successfully!", 'code' => 200], 200);
+ } else {
+ return response()->json(['status' => 'failed', 'message' => 'No images uploaded successfully!', 'code' => 400], 400);
+ }
+ } else {
+ return response()->json(['status' => 'failed', 'message' => 'Image is required!', 'code' => 400], 400);
+ }
+ }
+
+
+
+ public function delete($id)
+ {
+ $data = Image::find($id);
+
+ if($data){
+ unlink($this->pathImage.$data->image);
+ $delete = $data->delete();
+ }else{
+ return response()->json(['status'=>'failed','message'=>'data image not found!','code'=>400], 400);
+ die();
+ }
+ if($delete){
+ return response()->json(['status'=>'success','message'=>'data image successfully deleted!','code'=>200], 200);
+ }else{
+ return response()->json(['status'=>'failed','message'=>'data image failed deleted!','code'=>400], 400);
+ }
+ }
+
+ public function search(Request $request)
+ {
+ $payload = $request->all();
+ $dataBuilder = $this->setUpPayload($payload, 'm_image');
+ $builder = $dataBuilder['builder'];
+ $countBuilder = $dataBuilder['count'];
+ $dataGet = $builder->get();
+ $totalRecord = $countBuilder->count();
+ return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200);
+ }
+
+ public function deleteByRef($id, $category, $company_id)
+ {
+ $data = Image::where("ref_id", (int)$id)->where("category", $category)->first();
+ $company = Company::find($company_id);
+ if($data && $company){
+ $destinationPath = $this->setCustomeDirectoryUpload($company['company_name']);
+ unlink($destinationPath['pathImage'].$data->image);
+ $delete = $data->delete();
+ }else{
+ return response()->json(['status'=>'failed','message'=>'data image not found!','code'=>400], 400);
+ die();
+ }
+
+
+ if($delete){
+ return response()->json(['status'=>'success','message'=>'data image successfully deleted!','code'=>200], 200);
+ }else{
+ return response()->json(['status'=>'failed','message'=>'data image failed deleted!','code'=>400], 400);
+ }
+ }
+
+ public function deleteByRefMultiple($id, $category, $company_id)
+ {
+ $successCount = 0;
+ $data = Image::where([
+ ["ref_id", intval($id)],
+ ["category", $category]
+ ])->get();
+ $company = Company::find($company_id);
+ if($data->isNotEmpty() && $company) {
+ $destinationPath = $this->setCustomeDirectoryUpload($company['company_name']);
+ foreach($data as $img) {
+ unlink($destinationPath['pathImage'].$img->image);
+ $delete = $img->delete();
+ if($delete){
+ $successCount++;
+ }
+ }
+ } else {
+ return response()->json(['status'=>'failed','message'=>'data image not found!','code'=>400], 400);
+ die();
+ }
+
+ if($successCount > 0) {
+ return response()->json(['status'=>'success','message'=>'data image successfully deleted!','code'=>200], 200);
+ } else {
+ return response()->json(['status'=>'failed','message'=>'data image failed deleted!','code'=>400], 400);
+ }
+ }
+
+ public function getByRefId($id, $category)
+ {
+ if(!$id || (int) $id < 0 || $id==""){
+ return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
+ die();
+ }
+
+ if(!$category || $category==""){
+ return response()->json(['status'=>'failed','message'=>'category is required!','code'=>400], 400);
+ die();
+ }
+
+ $result = Image::where("ref_id", $id)->where("category", $category)->first();
+
+ if($result){
+ return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200);
+ }else{
+ return response()->json(['status'=>'failed','message'=>'failed get data image, please try again later!','code'=>400], 400);
+ }
+ }
+}
diff --git a/app/Http/Controllers/KanbanBoardController.php b/app/Http/Controllers/KanbanBoardController.php
new file mode 100644
index 0000000..fe8504e
--- /dev/null
+++ b/app/Http/Controllers/KanbanBoardController.php
@@ -0,0 +1,115 @@
+validate($request, [
+ 'name_board' => 'required',
+ 'header_color' => 'required',
+ 'body_color' => 'required',
+ 'proyek_id' => 'required',
+ 'version_gantt_id' => 'required',
+ 'status_progress' => 'required'
+ ]);
+ $data = $request->all();
+ $data['created_by'] = $this->currentName;
+ $statusCount = KanbanBoard::where('version_gantt_id', $request->version_gantt_id)
+ ->where('status_progress', $request->status_progress)
+ ->get()
+ ->count();
+
+ if ($statusCount < 1 || $request->status_progress == 'none') {
+ $result = KanbanBoard::create($data);
+ } else {
+ return response()->json(['status'=>'failed','message'=>'Board kanban failed created','code'=>400], 400);
+ }
+
+ if($result){
+ return response()->json(['status'=>'success','message'=>'Board kanban successfull created','code'=>200], 200);
+ }else{
+ return response()->json(['status'=>'failed','message'=>'Board kanban failed created','code'=>400], 400);
+ }
+ }
+
+ public function update(Request $request, $id){
+
+ if(!$id || (int) $id < 0 || $id==""){
+ return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
+ }
+ $data = KanbanBoard::find($id);
+ if($data){
+ $result = $data->update($request->all());
+ }else{
+ return response()->json(['status'=>'failed','message'=>'Data Board kanban not found!','code'=>400], 400);
+ die();
+ }
+
+ if($result){
+ return response()->json(['status'=>'success','message'=>'Board kanban successfully updated!','code'=>200], 200);
+ }else{
+ return response()->json(['status'=>'failed','message'=>'Board kanban failed updated!','code'=>400], 400);
+ }
+ }
+
+ public function delete($id)
+ {
+ $data = KanbanBoard::find($id);
+
+ if($data){
+ $delete = $data->delete();
+ }else{
+ return response()->json(['status'=>'failed','message'=>'Data Board kanban not found!','code'=>400], 400);
+ die();
+ }
+
+
+ if($delete){
+ return response()->json(['status'=>'success','message'=>'Board kanban successfully deleted!','code'=>200], 200);
+ }else{
+ return response()->json(['status'=>'failed','message'=>'Board kanban failed deleted!','code'=>400], 400);
+ }
+ }
+
+ public function edit($id){
+ if(!$id || (int) $id < 0 || $id==""){
+ return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
+ die();
+ }
+
+ $result = KanbanBoard::find($id);
+
+ if($result){
+ return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200);
+ }else{
+ return response()->json(['status'=>'failed','message'=>'failed get data Board kanban, please try again later!','code'=>400], 400);
+ }
+ }
+
+ public function search(Request $request)
+ {
+ $payload = $request->all();
+ $dataBuilder = $this->setUpPayload($payload, 'kanban_board');
+ $builder = $dataBuilder['builder'];
+ $countBuilder = $dataBuilder['count'];
+ $dataGet = $builder->get();
+ $totalRecord = $countBuilder->count();
+ return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200);
+ }
+
+ public function list(Request $request)
+ {
+ $query = KanbanBoard::select("*");
+ $countData = $query->count();
+ $data = $this->paramsMethodGet($query, $countData, $request);
+
+ if($data)
+ return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>count($data)], 200);
+
+ return response()->json(['status'=>'failed','message'=>'failed get Board kanban, please try again later!','code'=>400], 400);
+ }
+}
diff --git a/app/Http/Controllers/KanbanCardController.php b/app/Http/Controllers/KanbanCardController.php
new file mode 100644
index 0000000..39f9146
--- /dev/null
+++ b/app/Http/Controllers/KanbanCardController.php
@@ -0,0 +1,258 @@
+where("type_activity", $type_activity)
+ ->get();
+ foreach ($dataActivity as $keyA) {
+ // $this->add($keyA->id, $gantt_id, $board_id);
+ $data = array(
+ 'activity_id' => $keyA->id,
+ 'kanban_board_id' => $board_id,
+ 'version_gantt_id' => $gantt_id,
+ 'created_by' => $this->currentName
+ );
+ switch ($status_progress) {
+ case 'open':
+ if ($keyA->persentase_progress == 0) {
+ $add = KanbanCard::create($data);
+ }
+ break;
+ case 'on-progress':
+ if ($keyA->persentase_progress > 0 && $keyA->persentase_progress < 100) {
+ $cardIds = DB::table('kanban_card as kc')
+ ->join('m_activity as ma', 'kc.activity_id', '=', 'ma.id')
+ ->where('kc.activity_id', '=', $keyA->id)
+ ->select('kc.id')
+ ->get();
+ foreach ($cardIds as $cardId) {
+ $this->delete($cardId->id);
+ }
+ $add = KanbanCard::create($data);
+ }
+ break;
+ case 'done':
+ if ($keyA->persentase_progress == 100) {
+ $cardIds = DB::table('kanban_card as kc')
+ ->join('m_activity as ma', 'kc.activity_id', '=', 'ma.id')
+ ->where('kc.activity_id', '=', $keyA->id)
+ ->select('kc.id')
+ ->get();
+ foreach ($cardIds as $cardId) {
+ $this->delete($cardId->id);
+ }
+ $add = KanbanCard::create($data);
+ }
+ break;
+ }
+ }
+ return "success";
+ }
+
+ public function update(Request $request, $id)
+ {
+
+ if (!$id || (int) $id < 0 || $id == "") {
+ return response()->json(['status' => 'failed', 'message' => 'id is required!', 'code' => 400], 400);
+ }
+ $data = KanbanCard::where("activity_id", $id);
+ if ($data) {
+ $result = $data->update($request->all());
+ } else {
+ return response()->json(['status' => 'failed', 'message' => 'Data Card kanban not found!', 'code' => 400], 400);
+ die();
+ }
+
+ $board = KanbanBoard::find($request->kanban_board_id);
+ $activity = Activity::find($id);
+ if ($board->status_progress == "done" && $activity) {
+ $activity->update(['persentase_progress' => 100]);
+ } else{
+ if($activity['persentase_progress'] != 95 && $activity['persentase_progress'] != 100){
+ $activity->update(['persentase_progress' => 0]);
+ }else{
+ $activity->update(['persentase_progress' => 95]);
+ }
+
+ }
+
+ if ($result) {
+ return response()->json(['status' => 'success', 'message' => 'Board kanban successfully updated!', 'code' => 200], 200);
+ } else {
+ return response()->json(['status' => 'failed', 'message' => 'Board kanban failed updated!', 'code' => 400], 400);
+ }
+ }
+
+ public function delete($id)
+ {
+ $data = KanbanCard::find($id);
+
+ if ($data) {
+ $delete = $data->delete();
+ } else {
+ return response()->json(['status' => 'failed', 'message' => 'Data Board kanban not found!', 'code' => 400], 400);
+ die();
+ }
+
+
+ if ($delete) {
+ return response()->json(['status' => 'success', 'message' => 'Board kanban successfully deleted!', 'code' => 200], 200);
+ } else {
+ return response()->json(['status' => 'failed', 'message' => 'Board kanban failed deleted!', 'code' => 400], 400);
+ }
+ }
+
+ public function edit($id)
+ {
+ if (!$id || (int) $id < 0 || $id == "") {
+ return response()->json(['status' => 'failed', 'message' => 'id is required!', 'code' => 400], 400);
+ die();
+ }
+
+ $result = KanbanCard::find($id);
+
+ if ($result) {
+ return response()->json(['status' => 'success', 'code' => 200, 'data' => $result], 200);
+ } else {
+ return response()->json(['status' => 'failed', 'message' => 'failed get data Board kanban, please try again later!', 'code' => 400], 400);
+ }
+ }
+
+ public function search(Request $request)
+ {
+ $payload = $request->all();
+ $dataBuilder = $this->setUpPayload($payload, 'kanban_board');
+ $builder = $dataBuilder['builder'];
+ $countBuilder = $dataBuilder['count'];
+ $dataGet = $builder->get();
+ $totalRecord = $countBuilder->count();
+ return response()->json(['status' => 'success', 'code' => 200, 'data' => $dataGet, 'totalRecord' => $totalRecord], 200);
+ }
+
+ public function getData($project_id, $gantt_id, $board_id, Request $request)
+ {
+ // cek ketika dia owner dari project maka
+ $SESSIONID = $request->session;
+ $status_progress = KanbanBoard::select("status_progress")->where('id', $board_id)->first();
+ if ($status_progress) {
+ if (DB::table('user_to_version_gantt')->where('user_id', $SESSIONID)->where('version_gantt_id', $gantt_id)->exists()) {
+ $dataCard = $this->getDataAll($project_id, $gantt_id, $board_id, $status_progress->status_progress, true);
+ } else {
+ $dataCard = $this->getDataContributor($project_id, $gantt_id, $board_id, $request, $status_progress->status_progress, true);
+ }
+ } else {
+ return response()->json(['status' => 'empty', 'message' => 'data board is empty, please you insert!', 'code' => 200], 200);
+ }
+
+ if ($dataCard && count($dataCard) > 0){
+ return response()->json(['status' => 'success', 'code' => 200, 'data' => $dataCard, "totalRecord" => count($dataCard)], 200);
+ }else{
+ return response()->json(['status' => 'empty', 'message' => 'data card is empty, please you insert!', 'code' => 200], 200);
+ }
+
+ }
+
+ private function getDataAll($project_id, $gantt_id, $board_id, $status_progress, $status)
+ {
+ $dataFinal = [];
+ if($status == true){
+ if ($status_progress != 'none') {
+ if (KanbanCard::where('kanban_board_id', $board_id)->where("version_gantt_id", $gantt_id)->count() == 0) {
+ $this->add($board_id, $gantt_id, 'task', $status_progress);
+ $this->getDataAll($project_id, $gantt_id, $board_id, $status_progress, false);
+ }
+ }
+ }
+
+ $dataCard = DB::table("kanban_card as kc")
+ ->select("ma.id as activity_id", "ma.name", "ma.start_date", "ma.end_date", "ma.persentase_bobot", "ma.jumlah_pekerjaan", "ma.bobot_planning", "ma.persentase_progress")
+ ->join("m_activity as ma", "ma.id", "=", "kc.activity_id")
+ ->where("kc.kanban_board_id", $board_id)
+ ->where("kc.version_gantt_id", $gantt_id)
+ ->orderBy('ma.sortorder')
+ ->get();
+
+ foreach ($dataCard as $keyCard) {
+ $query = DB::table("assign_hr_to_activity as ahta")
+ ->select("ahta.id", "mu.name", "mu.id as id_hr")
+ ->join("m_users as mu", "mu.id", "=", "ahta.user_id")
+ ->where("ahta.activity_id", $keyCard->activity_id)
+ ->get();
+
+ $dataArray = array(
+ "id" => $keyCard->activity_id,
+ "assign_hr" => $query,
+ "activity" => $keyCard->name,
+ "start_date" => $keyCard->start_date,
+ "end_date" => $keyCard->end_date,
+ "jumlah_pekerjaan" => $keyCard->jumlah_pekerjaan,
+ "bobot_planning" => $keyCard->bobot_planning,
+ "persentase_progress" => $keyCard->persentase_progress
+ );
+ $dataFinal[] = $dataArray;
+ }
+ // }
+ return $dataFinal;
+ }
+
+ private function getDataContributor($project_id, $gantt_id, $board_id, $request, $status_progress, $status)
+ {
+ $dataFinal = [];
+ if($status == true){
+ if ($status_progress != 'none') {
+ if (KanbanCard::where('kanban_board_id', $board_id)->where("version_gantt_id", $gantt_id)->count() == 0) {
+ $this->add($board_id, $gantt_id, 'task', $status_progress);
+ $this->getDataContributor($project_id, $gantt_id, $board_id, $request, $status_progress, false);
+ }
+ }
+ $dataUser = User::whereId($request->session)->first();
+ $dataCard = DB::table("kanban_card as kc")
+ ->select("ma.id as activity_id", "ma.name", "ma.start_date", "ma.end_date", "ma.persentase_bobot", "ma.jumlah_pekerjaan", "ma.bobot_planning", "ma.persentase_progress")
+ ->join("m_activity as ma", "ma.id", "=", "kc.activity_id")
+ ->where([
+ ["kc.created_by", $dataUser['name']],
+ ["kc.kanban_board_id", $board_id],
+ ["kc.version_gantt_id", $gantt_id]
+ ])
+ ->orderBy('ma.sortorder')
+ ->get();
+ foreach ($dataCard as $keyCard) {
+ $query = DB::table("assign_hr_to_activity as ahta")
+ ->select("ahta.id", "mu.name", "mu.id as id_hr")
+ ->join("m_users as mu", "mu.id", "=", "ahta.user_id")
+ ->where("ahta.activity_id", $keyCard->activity_id)
+ ->get();
+
+ $dataArray = array(
+ "id" => $keyCard->activity_id,
+ "assign_hr" => $query,
+ "activity" => $keyCard->name,
+ "start_date" => $keyCard->start_date,
+ "end_date" => $keyCard->end_date,
+ "jumlah_pekerjaan" => $keyCard->jumlah_pekerjaan,
+ "bobot_planning" => $keyCard->bobot_planning,
+ "persentase_progress" => $keyCard->persentase_progress,
+ "test" => $request->session
+ );
+ $dataFinal[] = $dataArray;
+ }
+ }
+
+ return $dataFinal;
+ }
+
+}
diff --git a/app/Http/Controllers/MenuCompanyController.php b/app/Http/Controllers/MenuCompanyController.php
index 2b79748..a4985d8 100644
--- a/app/Http/Controllers/MenuCompanyController.php
+++ b/app/Http/Controllers/MenuCompanyController.php
@@ -9,33 +9,15 @@ use Illuminate\Support\Facades\Log;
class MenuCompanyController extends Controller
{
- // public function add(Request $request)
- // {
- // $this->validate($request, [
- // 'icon' => 'required',
- // 'name' => 'string|required',
- // 'url' => 'required|unique:m_company_menu,url',
- // 'sequence' => 'required|integer',
- // ]);
-
- // $data = $request->all();
-
- // $data['created_by'] = $this->currentName;
-
- // $result = MenuCompany::create($data);
-
- // if ($result) {
- // return response()->json(['status' => 'success', 'message' => 'add data menu successfully!', 'code' => 200], 200);
- // } else {
- // return response()->json(['status' => 'failed', 'message' => 'add data menu failed!', 'code' => 400], 400);
- // }
- // }
-
public function addMultiple(Request $request)
{
$menus = $request->all();
- if (is_array($menus) && count($menus) > 0) {
+ $data = MenuCompany::where('company_id',$menus[0]['company_id']);
+ if($data){
+ $data->delete();
+ }
+ if (is_array($menus) && count($menus) > 0 && isset($menus)) {
$countRes = 0;
foreach ($menus as $menu) {
@@ -60,12 +42,17 @@ class MenuCompanyController extends Controller
}
if ($countRes > 0) {
- return response()->json(['status' => 'success', 'message' => 'add data menu successfully!', 'code' => 200]);
+ return response()->json(['status' => 'success', 'message' => 'Add data menu successfully!', 'code' => 200]);
} else {
- return response()->json(['status' => 'failed', 'message' => 'add data menu failed created!', 'code' => 400]);
+ return response()->json(['status' => 'failed', 'message' => 'Add data menu failed created!', 'code' => 500]);
}
} else {
- return response()->json(['status' => 'failed', 'message' => 'add data menu failed created!', 'code' => 400]);
+ if(isset($data))
+ {
+ return response()->json(['status' => 'success', 'message' => 'Add data menu successfully!', 'code' => 200]);
+ }else{
+ return response()->json(['status' => 'failed', 'message' => 'Add data menu failed created!', 'code' => 500]);
+ }
}
}
@@ -120,15 +107,15 @@ class MenuCompanyController extends Controller
if ($data) {
$delete = $data->delete();
} else {
- return response()->json(['status' => 'failed', 'message' => 'data menu not found!', 'code' => 400], 400);
+ return response()->json(['status' => 'failed', 'message' => 'Data menu not found!', 'code' => 400], 400);
die();
}
if ($delete) {
- return response()->json(['status' => 'success', 'message' => 'data menu successfully deleted!', 'code' => 200], 200);
+ return response()->json(['status' => 'success', 'message' => 'Data menu successfully deleted!', 'code' => 200], 200);
} else {
- return response()->json(['status' => 'failed', 'message' => 'data menu failed deleted!', 'code' => 400], 400);
+ return response()->json(['status' => 'failed', 'message' => 'Data menu failed deleted!', 'code' => 400], 400);
}
}
diff --git a/app/Http/Controllers/MenuController.php b/app/Http/Controllers/MenuController.php
index 6ff9324..2aa418e 100644
--- a/app/Http/Controllers/MenuController.php
+++ b/app/Http/Controllers/MenuController.php
@@ -23,32 +23,33 @@ class MenuController extends Controller
$result = Menu::create($data);
- if($result){
- return response()->json(['status'=>'success','message'=>'add data menu successfully!','code'=>200], 200);
- }else{
- return response()->json(['status'=>'failed','message'=>'add data menu failed!','code'=>400], 400);
+ if ($result) {
+ return response()->json(['status' => 'success', 'message' => 'add data menu successfully!', 'code' => 200], 200);
+ } else {
+ return response()->json(['status' => 'failed', 'message' => 'add data menu failed!', 'code' => 400], 400);
}
}
- public function edit($id){
- if(!$id || (int) $id < 0 || $id==""){
- return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
+ public function edit($id)
+ {
+ if (!$id || (int) $id < 0 || $id == "") {
+ return response()->json(['status' => 'failed', 'message' => 'id is required!', 'code' => 400], 400);
die();
}
$result = Menu::find($id);
- if($result){
- return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200);
- }else{
- return response()->json(['status'=>'failed','message'=>'failed get data menu, please try again later!','code'=>400], 400);
+ if ($result) {
+ return response()->json(['status' => 'success', 'code' => 200, 'data' => $result], 200);
+ } else {
+ return response()->json(['status' => 'failed', 'message' => 'failed get data menu, please try again later!', 'code' => 400], 400);
}
}
public function update(Request $request, $id)
{
- if(!$id || (int) $id < 0 || $id==""){
- return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
+ if (!$id || (int) $id < 0 || $id == "") {
+ return response()->json(['status' => 'failed', 'message' => 'id is required!', 'code' => 400], 400);
}
$this->validate($request, [
'icon' => 'required',
@@ -58,21 +59,21 @@ class MenuController extends Controller
]);
$data = Menu::find($id);
- $request->name !== $data['name'] ? $this->validate($request,['name'=>'unique:m_menu,name']) : '';
- $request->url !== $data['url'] ? $this->validate($request,['url'=>'unique:m_menu,url']) : '';
+ $request->name !== $data['name'] ? $this->validate($request, ['name' => 'unique:m_menu,name']) : '';
+ $request->url !== $data['url'] ? $this->validate($request, ['url' => 'unique:m_menu,url']) : '';
- if($data){
+ if ($data) {
$result = $data->update($request->all());
- }else{
- return response()->json(['status'=>'failed','message'=>'data menu not found!','code'=>400], 400);
+ } else {
+ return response()->json(['status' => 'failed', 'message' => 'data menu not found!', 'code' => 400], 400);
die();
}
- if($result){
- return response()->json(['status'=>'success','message'=>'data menu successfully updated!','code'=>200], 200);
- }else{
- return response()->json(['status'=>'failed','message'=>'data menu failed updated!','code'=>400], 400);
+ if ($result) {
+ return response()->json(['status' => 'success', 'message' => 'data menu successfully updated!', 'code' => 200], 200);
+ } else {
+ return response()->json(['status' => 'failed', 'message' => 'data menu failed updated!', 'code' => 400], 400);
}
}
@@ -80,18 +81,18 @@ class MenuController extends Controller
{
$data = Menu::find($id);
- if($data){
+ if ($data) {
$delete = $data->delete();
- }else{
- return response()->json(['status'=>'failed','message'=>'data menu not found!','code'=>400], 400);
+ } else {
+ return response()->json(['status' => 'failed', 'message' => 'data menu not found!', 'code' => 400], 400);
die();
}
- if($delete){
- return response()->json(['status'=>'success','message'=>'data menu successfully deleted!','code'=>200], 200);
- }else{
- return response()->json(['status'=>'failed','message'=>'data menu failed deleted!','code'=>400], 400);
+ if ($delete) {
+ return response()->json(['status' => 'success', 'message' => 'data menu successfully deleted!', 'code' => 200], 200);
+ } else {
+ return response()->json(['status' => 'failed', 'message' => 'data menu failed deleted!', 'code' => 400], 400);
}
}
@@ -103,41 +104,52 @@ class MenuController extends Controller
$countBuilder = $dataBuilder['count'];
$dataGet = $builder->get();
$totalRecord = $countBuilder->count();
- return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200);
+ return response()->json(['status' => 'success', 'code' => 200, 'data' => $dataGet, 'totalRecord' => $totalRecord], 200);
}
public function listMenu($id)
{
- $dataParent = RoleMenu::select("m_menu.*")
- ->join('m_menu', 'm_menu.id', '=', 't_roles_menu.menu_id')
- ->join('m_roles', 'm_roles.id', '=', 't_roles_menu.role_id')
- ->whereNull('m_menu.parent_id')
- ->where('m_roles.id', $id)
- ->orderBy('m_menu.sequence', 'ASC')
- ->get();
+ $dataParent = RoleMenu::select(
+ 'm_menu.*',
+ "t_roles_menu.create",
+ "t_roles_menu.read",
+ "t_roles_menu.update",
+ "t_roles_menu.delete"
+ )
+ ->join('m_menu', 'm_menu.id', '=', 't_roles_menu.menu_id')
+ ->join('m_roles', 'm_roles.id', '=', 't_roles_menu.role_id')
+ ->whereNull('m_menu.parent_id')
+ ->where('m_roles.id', $id)
+ ->orderBy('m_menu.sequence', 'ASC')
+ ->get();
$finalData = [];
- foreach($dataParent as $data){
+ foreach ($dataParent as $data) {
$data->children = $this->getChildrenMenu($data->id, $id);
$finalData[] = $data;
}
- return response()->json(['status'=>'success','code'=>200,'data'=>$finalData], 200);
+ return response()->json(['status' => 'success', 'code' => 200, 'data' => $finalData], 200);
}
protected function getChildrenMenu($id, $role_id)
{
- $dataChildren = RoleMenu::select("m_menu.*")
- ->join('m_menu', 'm_menu.id', '=', 't_roles_menu.menu_id')
- ->join('m_roles', 'm_roles.id', '=', 't_roles_menu.role_id')
- ->where('m_roles.id', $role_id)
- ->where('m_menu.parent_id', $id)
- ->orderBy('m_menu.sequence', 'ASC')
- ->get();
+ $dataChildren = RoleMenu::select(
+ 'm_menu.*',
+ "t_roles_menu.create",
+ "t_roles_menu.read",
+ "t_roles_menu.update",
+ "t_roles_menu.delete"
+ )
+ ->join('m_menu', 'm_menu.id', '=', 't_roles_menu.menu_id')
+ ->join('m_roles', 'm_roles.id', '=', 't_roles_menu.role_id')
+ ->where('m_roles.id', $role_id)
+ ->where('m_menu.parent_id', $id)
+ ->orderBy('m_menu.sequence', 'ASC')
+ ->get();
$children = [];
- if($dataChildren){
- foreach($dataChildren as $data)
- {
+ if ($dataChildren) {
+ foreach ($dataChildren as $data) {
$data->children = $this->getChildrenMenu($data->id, $role_id);
$children[] = $data;
}
@@ -150,10 +162,10 @@ class MenuController extends Controller
$data = Menu::all();
$countData = $data->count();
- if($data){
- return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200);
- }else{
- return response()->json(['status'=>'failed','message'=>'failed get list menu, please try again later!','code'=>400], 400);
+ if ($data) {
+ return response()->json(['status' => 'success', 'code' => 200, 'data' => $data, 'totalRecord' => $countData], 200);
+ } else {
+ return response()->json(['status' => 'failed', 'message' => 'failed get list menu, please try again later!', 'code' => 400], 400);
}
}
}
diff --git a/app/Http/Controllers/ProductTransactionController.php b/app/Http/Controllers/ProductTransactionController.php
new file mode 100644
index 0000000..07fbb68
--- /dev/null
+++ b/app/Http/Controllers/ProductTransactionController.php
@@ -0,0 +1,92 @@
+validate($request, [
+ 'company_id' => 'required|integer',
+ 'type_paket' => 'required|string',
+ 'amount' => 'required',
+ 'exp_ospro' => 'required'
+ ]);
+
+ $data = $request->all();
+
+ $data['created_by'] = $this->currentName;
+ $result = ProductTransaction::create($data);
+
+ if ($result) {
+ return response()->json(['status' => 'success', 'data' => $result, 'message' => 'Add Transaction successfully!', 'code' => 200], 200);
+ } else {
+ return response()->json(['status' => 'failed', 'message' => 'Add Transaction failed!', 'code' => 400], 400);
+ }
+ }
+
+ public function edit($id)
+ {
+ if (!$id || (int) $id < 0 || $id == "") {
+ return response()->json(['status' => 'failed', 'message' => 'Id is required!', 'code' => 400], 400);
+ die();
+ }
+
+ $result = ProductTransaction::find($id);
+
+ if ($result) {
+ return response()->json(['status' => 'success', 'code' => 200, 'data' => $result], 200);
+ } else {
+ return response()->json(['status' => 'failed', 'message' => 'Failed get data transaction, please try again later!', 'code' => 400], 400);
+ }
+ }
+
+ public function update(Request $request, $id)
+ {
+ if(!$id || (int) $id < 0 || $id==""){
+ return response()->json(['status'=>'failed','message'=>'Id is required!','code'=>400], 400);
+ }
+
+ $data = ProductTransaction::find($id);
+
+ if($data){
+ $result = $data->update($request->all());
+ }else{
+ return response()->json(['status'=>'failed','message'=>'Data transaction not found!','code'=>400], 400);
+ die();
+ }
+
+
+ if($result){
+ return response()->json(['status'=>'success','message'=>'Data transaction successfully updated!','code'=>200], 200);
+ }else{
+ return response()->json(['status'=>'failed','message'=>'Data transaction failed updated!','code'=>400], 400);
+ }
+ }
+
+ public function search(Request $request)
+ {
+ $payload = $request->all();
+ $dataBuilder = $this->setUpPayload($payload, 't_transaction');
+ $builder = $dataBuilder['builder'];
+ $countBuilder = $dataBuilder['count'];
+ $dataGet = $builder->get();
+ $totalRecord = $countBuilder->count();
+ return response()->json(['status' => 'success', 'code' => 200, 'data' => $dataGet, 'totalRecord' => $totalRecord], 200);
+ }
+
+ public function list()
+ {
+ $data = ProductTransaction::all();
+ $countData = $data->count();
+
+ if ($data) {
+ return response()->json(['status' => 'success', 'code' => 200, 'data' => $data, 'totalRecord' => $countData], 200);
+ } else {
+ return response()->json(['status' => 'failed', 'message' => 'failed get list Transaction, please try again later!', 'code' => 400], 400);
+ }
+ }
+}
diff --git a/app/Http/Controllers/ProjectCarausellController.php b/app/Http/Controllers/ProjectCarausellController.php
index 7c2eb06..6abd158 100644
--- a/app/Http/Controllers/ProjectCarausellController.php
+++ b/app/Http/Controllers/ProjectCarausellController.php
@@ -2,354 +2,73 @@
namespace App\Http\Controllers;
+use Illuminate\Http\Request;
use App\Models\{
User,
Project,
- Activity,
- HierarchyFtth,
- ProjectComment,
VersionGantt,
- UserToProyek,
- UserToActivity,
- Presence
+ ProjectIssues,
+ ProjectRisks
};
-use Illuminate\Http\Request;
-use Illuminate\Support\Facades\DB;
-use App\Helpers\MasterFunctionsHelper;
-use Carbon\Carbon;
class ProjectCarausellController extends Controller
{
- // public function invoke($id)
- // {
- // $dateStart = Carbon::now()->startOfDay();
- // $dateEnd = Carbon::now()->endOfDay();
- // // Mengatur waktu awal bulan dan mengurangkan 1 tahun
- // $startDate = Carbon::now()->startOfMonth()->subYear()->format('Y-m-d');
- // // Mengatur waktu saat ini dan mengurangkan 1 tahun
- // $endDate = Carbon::now()->subYear()->format('Y-m-d');
-
- // if(empty($id) || !is_int((int)$id)){
- // return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
- // }
-
- // $result = Project::select('id','nama','budget_health','kode_sortname','pm_id','rencana_biaya','company','scurve','calculation_status')->find($id);
- // if(!$result){
- // return response()->json(['status'=>'failed','message'=> 'Project not found!','code'=> 404], 404);
- // }
- // $ganttData = VersionGantt::where('proyek_id', $id)
- // ->select('id', 'name_version','hierarchy_ftth_id','cost_to_complete')
- // ->get();
-
- // // Get Id Gantt & hierarchy_ftth_id
- // $gantt_id = $ganttData->pluck('id')->toArray();
- // $hierarchy_ftth_id = $ganttData->pluck('hierarchy_ftth_id')->toArray();
-
- // // Heararchy
- // $finalData = [];
- // if($hierarchy_ftth_id){
- // $ftth = HierarchyFtth::whereIn('id',$hierarchy_ftth_id)->get();
- // if($ftth->first() != null)
- // {
- // array_push($finalData, $ftth->first());
- // }
- // if($ftth->where('parent_id','!=', null)->first()){
- // $this->getParents($finalData, $ftth->pluck('parent_id')->toArray());
- // }
- // } else {
- // return $finalData;
- // }
-
- // // SCurve
- // $SCurve = MasterFunctionsHelper::getSCurveCarausell($result['id'],$gantt_id,'week');
-
- // // Overdue Activities
- // $endDate = Activity::where('proyek_id', $result['id'])
- // ->orderByDesc('end_date')
- // ->value('end_date');
- // $overdueActivities = Activity::whereIn('version_gantt_id', $gantt_id)->whereNotNull('parent_id')->where('persentase_progress', '!=', 100)->whereDate('end_date','<=',$endDate)->orderBy('end_date', 'asc')->get();
-
- // // Project Comment
- // $projectComment = ProjectComment::query()
- // ->select('project_id','gantt_id','comment','created_at')
- // ->where('project_id',$result['id'])
- // ->whereIn('gantt_id',$gantt_id)
- // ->get();
-
- // // Manpower
- // $manCount = UserToProyek::where('proyek_id', $result['id'])->count();
- // // Assigned
- // $utAct = UserToActivity::query()
- // ->whereIn('version_gantt_id', $gantt_id)
- // ->get();
- // // Actual
- // $presence = Presence::whereBetween('clock_in', [$dateStart, $dateEnd])
- // ->select('m_users.name','m_users.ktp_number')
- // ->join('m_users','t_clock_in_out.user_id','m_users.id')
- // ->get();
-
- // // Report distribution
- // $reportsDistribution = DB::table('assign_material_to_activity as ama')
- // ->select('u.name', 'a.name as activity_name', 'ama.qty_planning', 'ram.qty as qty_real','rm.description as material_name', 'rm.uom as material_unit',
- // 'ram.lat', 'ram.lon', 'ram.description as report_notes', 'ram.report_date')
- // ->join('report_activity_material as ram', 'ram.assign_material_id', '=', 'ama.id')
- // ->join('m_req_material as rm', 'rm.id', '=', 'ama.material_id')
- // ->join('m_activity as a', 'a.id', '=', 'ama.activity_id')
- // ->join('m_users as u', 'u.id', '=', 'ram.user_id')
- // ->where('ama.proyek_id', '=', $result['id'])
- // ->whereNotNull('ram.lat')
- // ->whereBetween('ram.report_date', [$startDate, $startDate]);
-
- // // Check Existing
- // $actualStartExist = Activity::whereIn('version_gantt_id',$gantt_id)->whereNotNull('actual_start')->exists();
- // $actualEndExist = Activity::whereIn('version_gantt_id',$gantt_id)->exists();
-
- // $query = Activity::query()->whereIn('version_gantt_id', $gantt_id);
- // // Start
- // if ($actualStartExist) {
- // $startDate = $query->select('version_gantt_id',DB::raw('MIN(start_date) as min_start'))
- // ->groupBy('version_gantt_id')
- // ->get();
- // } else {
- // $startDate = $query->select('version_gantt_id',DB::raw('MIN(start_date) as min_start','version_gantt_id'))
- // ->groupBy('version_gantt_id')
- // ->orderBy('min_start', 'ASC')
- // ->get();
- // }
- // // End
- // if($actualEndExist)
- // {
- // $maxIds = $query->selectRaw('MAX(id) as max_id')
- // ->groupBy('version_gantt_id')
- // ->pluck('max_id', 'version_gantt_id');
-
- // $endDate = Activity::whereIn('id', $maxIds)->select('end_date','version_gantt_id')->get();
- // }
-
- // $plannedStart = $query->selectRaw('MIN(planned_start) as min_planned_start, version_gantt_id')
- // ->groupBy('version_gantt_id')
- // ->orderBy('min_planned_start')
- // ->get();
- // $plannedEnd = $query->selectRaw('MAX(planned_end) as max_planned_end, version_gantt_id')
- // ->groupBy('version_gantt_id')
- // ->orderByDesc('max_planned_end')
- // ->get();
-
- // $projectManager = User::whereId($result['pm_id'])->value('name');
- // $key =1;
- // foreach($ganttData as $gantt)
- // {
- // $pStart =$plannedStart->where('version_gantt_id',$gantt['id'])->first();
- // $actStart =$startDate->where('version_gantt_id',$gantt['id'])->first();
- // $actEnd =$endDate->where('version_gantt_id',$gantt['id'])->first();
- // $pEnd =$plannedEnd->where('version_gantt_id',$gantt['id'])->first();
- // $matchingActivities = $overdueActivities->where('version_gantt_id', $gantt['id']);
- // $matchingProjectComment = $projectComment->where('version_gantt_id', $gantt['id']);
- // $usAtc = $utAct->where('version_gantt_id', $gantt['id']);
- // $arr[] =
- // [
- // 'gantt_id'=>$gantt['id'],
- // 'projectManager'=>$projectManager,
- // 'name_version'=>$gantt['name_version'],
- // 'cost_to_complete'=>$gantt['cost_to_complete'],
- // 'schedule' => [
- // 'plannedStart'=> $pStart['min_planned_start'],
- // 'actual_start'=>$actStart['min_start'],
- // 'plannedFinish'=>$pEnd['max_planned_end'],
- // 'estimatedFinish'=>$actEnd['end_date']
- // ],
- // 'manpower'=>$manCount,
- // 'assigned'=>$usAtc->toArray(),
- // 'actual'=>count($presence->toArray()),
- // 'overdue_activities'=>$matchingActivities->toArray(),
- // 'project_comment'=>$matchingProjectComment->toArray(),
- // 'hierarchy'=>$finalData,
- // 'proyek'=>$result,
- // 'key'=>$key++
- // ];
- // }
- // return response()->json(['status'=>'success','code'=> 200,'data'=>$arr,'report_distribution'=>$reportsDistribution,'sCurve'=>$SCurve, 'count'=>count($arr)], 200);
- // }
-
- // public function getParents(&$data, $id){
- // $ftth = HierarchyFtth::whereIn('id',$id)->get();
- // array_push($data, $ftth);
- // if ($ftth->pluck('parent_id')->toArray()) {
- // $this->getParents($data, $ftth->pluck('parent_id')->toArray());
- // }
- // }
-
- public function invoke()
+ public function invoke(Request $request)
{
- // Data Master
- // Mengatur waktu awal bulan dan mengurangkan 1 tahun
- $startDate = Carbon::now()->startOfMonth()->subYear()->format('Y-m-d');
- // Mengatur waktu saat ini dan mengurangkan 1 tahun
- $endDate = Carbon::now()->subYear()->format('Y-m-d');
- $ganttData = VersionGantt::query()
- ->select('id', 'name_version','hierarchy_ftth_id','cost_to_complete','proyek_id')
- ->get();
- $projectData = Project::query()
- ->select("id","nama","kode_sortname","pm_id","budget_health","calculation_status","mulai_proyek","akhir_proyek","rencana_biaya","company","scurve")
- ->get();
- // nested looping
- $arr = [];
- foreach($projectData as $project) {
- $ganttForProject = [];
- foreach ($ganttData as $gantt) {
- if ($gantt['proyek_id'] === $project['id']) {
- // Gantt
- $ganttForProject[] = [
- "gantt_id" => $gantt['id'],
- 'proyek_id' => $gantt['proyek_id'],
- "name_version" => $gantt['name_version'],
- "hierarchy_ftth_id" => $gantt['hierarchy_ftth_id'],
- "cost_to_complete" => $gantt['cost_to_complete'],
- ];
- // Activity
- $activity = Activity::query()
- ->select('id','name','proyek_id','version_gantt_id','type_activity','parent_id','kode_sortname','rencana_biaya','start_date','end_date','biaya_actual','persentase_bobot','persentase_progress','planned_start','planned_end','actual_start','actual_end')
- ->whereNull('parent_id')
- ->where([
- ["proyek_id", $project['id']],
- ["version_gantt_id", $gantt['id']]
- ])
- ->first();
- $actualStartExist = Activity::query()
- ->where('version_gantt_id', $gantt['id'])
- ->whereNotNull('actual_start')
- ->exists();
- $actualEndExist = Activity::query()
- ->where('version_gantt_id', $gantt['id'])
- ->exists();
- $query = Activity::where('version_gantt_id', $gantt['id']);
-
- if ($actualStartExist) {
- $startDate = $query->orderBy('actual_start')->value('start_date');
- } else {
- $startDate = $query->orderBy('start_date')->value('start_date');
- }
- if($actualEndExist)
- {
- $maxEndDate = $query->max('id');
- $endDate = $query->where('id',$maxEndDate)->first()->end_date;
- }
-
- $plannedStart = Activity::where('version_gantt_id', $gantt['id'])
- ->orderBy('planned_start')
- ->value('planned_start');
- $plannedEnd = Activity::where('version_gantt_id', $gantt['id'])
- ->orderByDesc('planned_end')
- ->value('planned_end');
-
- // SCurve
- $req = (object)[
- 'project_id' => $project['id'],
- 'gantt_id' => $gantt['id'],
- 'period' => 'week',
- ];
- $SCurve = MasterFunctionsHelper::getSCurveCarausell($req);
-
- // Overdue
- $endDate = Activity::where('proyek_id', $project['id'])
- ->orderByDesc('end_date')
- ->value('end_date');
- $overdueActivities = Activity::query()
- ->where([
- ['version_gantt_id', $gantt['id']],
- ['persentase_progress', '!=', 100]
- ])
- ->whereNotNull('parent_id')
- ->whereDate('end_date','<=',$endDate)
- ->orderBy('end_date', 'asc')
- ->get();
-
- // Manpower
- $manCount = UserToProyek::where('proyek_id', $project['id'])->count();
- // Assigned
- $assigned = UserToActivity::query()
- ->select('assign_hr_to_activity.proyek_id', 'assign_hr_to_activity.user_id', 'm_activity.id', 'm_activity.name', 'm_activity.start_date', 'm_activity.end_date')
- ->join('m_activity', 'm_activity.id', '=', 'assign_hr_to_activity.activity_id')
- ->where('assign_hr_to_activity.version_gantt_id', $gantt['id'])
- ->get();
- // Project Comment
- $projectComment = ProjectComment::query()
- ->select('m_users.name','m_users.username','m_project_comment.project_id','m_project_comment.gantt_id','m_project_comment.comment','m_project_comment.created_at')
- ->join('m_users','m_project_comment.sender_id','m_users.id')
- ->where([
- ['project_id',$project['id']],
- ['gantt_id',$gantt['id']]
- ])
- ->get();
- // Hierarchy
- $finalData = [];
- $ganttHierarchy = VersionGantt::find($gantt['id']);
- if ($ganttHierarchy->hierarchy_ftth_id) {
- $ftth = HierarchyFtth::find($ganttHierarchy->hierarchy_ftth_id);
- array_push($finalData, $ftth);
- if($ftth->parent_id){
- $this->getParents($finalData, $ftth->parent_id);
- }
- }else{
- $finalData = $finalData;
- }
+ // Master Data
+ $company_id = $request->route('company_id');
+ $all_project = $request->route('all_project');
+ $hierarchy = $request->route('hierarchy');
+
+ $query = Project::query()
+ ->select("id", "nama", "kode_sortname", "pm_id", "budget_health", "calculation_status", "mulai_proyek", "akhir_proyek", "rencana_biaya", "company", "scurve");
+
+ if ($all_project) {
+ $query->where('company_id', $company_id);
+ } else {
+ $query->where('created_by_id', $hierarchy);
+ }
- $reports = DB::table('assign_material_to_activity as ama')
- ->select('u.name', 'a.name as activity_name', 'ama.qty_planning', 'ram.qty as qty_real','rm.description as material_name', 'rm.uom as material_unit',
- 'ram.lat', 'ram.lon', 'ram.description as report_notes', 'ram.report_date')
- ->join('report_activity_material as ram', 'ram.assign_material_id', '=', 'ama.id')
- ->join('m_req_material as rm', 'rm.id', '=', 'ama.material_id')
- ->join('m_activity as a', 'a.id', '=', 'ama.activity_id')
- ->join('m_users as u', 'u.id', '=', 'ram.user_id')
- ->where('ama.proyek_id', '=', $project['id'])
- ->whereNotNull('ram.lat')
- ->whereBetween('ram.report_date', [$startDate, $endDate]);
- }
- }
+ $projectData = $query->get();
+ $arr = [];
+ foreach ($projectData as $project) {
+ $projectRisk = ProjectRisks::query()
+ ->select('proyek_id', 'description', 'level_risk', 'preventive_risk')
+ ->where('proyek_id', $project['id'])
+ ->get()
+ ->toArray();
+ $projectIssue = ProjectIssues::query()
+ ->select('proyek_id', 'description', 'level_issue')
+ ->where('proyek_id', $project['id'])
+ ->get()
+ ->toArray();
+ $ganttData = VersionGantt::query()
+ ->select('id', 'name_version', 'hierarchy_ftth_id', 'cost_to_complete', 'proyek_id', 'calculation_type')
+ ->where('proyek_id', $project['id'])
+ ->orderByDesc('id')
+ ->first();
$projectManager = User::where('id', $project['pm_id'])->value('name');
-
- $arr[]= [
- "project"=> [
- "id"=>$project['id'],
- "pm_id"=>$project['pm_id'],
- "nama"=>$project['nama'],
- "kode_sortname"=>$project['kode_sortname'],
- "budget_health"=>$project['budget_health'],
- "calculation_status"=>$project['calculation_status'],
- "mulai_proyek"=>$project['mulai_proyek'],
- "akhir_proyek"=>$project['akhir_proyek'],
- "rencana_biaya"=>$project['rencana_biaya'],
- "company"=>$project['company'],
- "scurve"=>$project['scurve'],
- "gantt"=>$ganttForProject
- ],
- "hierarchy"=>$finalData,
- "manpower"=>$manCount,
- "assigned"=>$assigned,
- "actual"=>0,
- "project_comment"=>$projectComment,
- "project_manager"=> $projectManager,
- "activity" => [
- "data" => $activity,
- "start_date"=>$startDate,
- "end_date"=>$endDate,
- "planned_start"=>$plannedStart,
- "planned_end"=>$plannedEnd
+ $arr[] = [
+ "project" => [
+ "id" => $project['id'],
+ "pm_id" => $project['pm_id'],
+ "nama" => $project['nama'],
+ "kode_sortname" => $project['kode_sortname'],
+ "budget_health" => $project['budget_health'],
+ "calculation_status" => $project['calculation_status'],
+ "mulai_proyek" => $project['mulai_proyek'],
+ "akhir_proyek" => $project['akhir_proyek'],
+ "rencana_biaya" => $project['rencana_biaya'],
+ "company" => $project['company'],
+ "scurve" => $project['scurve'],
],
- "report_distribution"=>$reports,
- "overdueActivities"=>$overdueActivities,
- "SCurve"=>$SCurve
+ "project_manager" => $projectManager,
+ "project_risk" => $projectRisk,
+ "project_issue" => $projectIssue,
+ "gantt" => $ganttData
];
}
- return response()->json(['status'=>'success','code'=> 200,'data'=>$arr, "count"=>count($arr)], 200);
- }
-
- public function getParents(&$data, $id){
- $ftth = HierarchyFtth::find($id);
- array_push($data, $ftth);
- if ($ftth->parent_id) {
- $this->getParents($data, $ftth->parent_id);
- }
+ return response()->json(['status' => 'success', 'code' => 200, 'data' => $arr, "total_project" => count($arr)], 200);
}
}
diff --git a/app/Http/Controllers/ProjectController.php b/app/Http/Controllers/ProjectController.php
index 062ddb4..46f2969 100644
--- a/app/Http/Controllers/ProjectController.php
+++ b/app/Http/Controllers/ProjectController.php
@@ -3,43 +3,48 @@
namespace App\Http\Controllers;
use DateTime;
-use App\Models\Link;
-use App\Models\User;
-use App\Models\Image;
-use App\Models\Holiday;
-use App\Models\Project;
-use App\Models\Activity;
-use App\Models\ReportK3;
use App\Jobs\ProcessSCurve;
-use App\Models\AssignTools;
-use App\Models\OfficeHours;
-use App\Models\ProjectType;
-use App\Models\ProjectPhase;
-use App\Models\ProjectRisks;
-use App\Models\UserToProyek;
-use App\Models\VersionGantt;
use Illuminate\Http\Request;
-use App\Models\HierarchyFtth;
-use App\Models\ProjectIssues;
-use App\Models\AssignMaterial;
-use App\Models\DokumenProject;
-use App\Models\ProjectCharter;
-use App\Models\ReportActivity;
-use App\Models\ShowHideColumn;
-use App\Models\UserToActivity;
-use App\Models\ActivityDokumen;
-use App\Models\CommentActivity;
-use App\Models\ProjectApproval;
-use App\Models\RequestMaterial;
-use App\Models\ProjectMileStone;
-use App\Models\ProjectChecklists;
-use Illuminate\Support\Facades\DB;
-use App\Models\ProjectParticipants;
-use App\Models\FolderDocumentProyek;
-use App\Models\ProjectToChecklistK3;
+use App\Models\{
+ ReportActivityMaterial,
+ ProjectToChecklistK3,
+ FolderDocumentProyek,
+ ProjectParticipants,
+ ProductTransaction,
+ ProjectChecklists,
+ ProjectMileStone,
+ RequestMaterial,
+ ProjectApproval,
+ CommentActivity,
+ ActivityDokumen,
+ UserToActivity,
+ ShowHideColumn,
+ ReportActivity,
+ ProjectCharter,
+ DokumenProject,
+ AssignMaterial,
+ ProjectIssues,
+ HierarchyFtth,
+ VersionGantt,
+ UserToProyek,
+ ProjectRisks,
+ ProjectPhase,
+ ProjectType,
+ OfficeHours,
+ AssignTools,
+ ReportK3,
+ Activity,
+ Project,
+ Holiday,
+ Company,
+ Image,
+ User,
+ Link
+};
+use Illuminate\Database\Query\Builder;
+use Illuminate\Support\Facades\{Artisan, DB};
use App\Helpers\MasterFunctionsHelper;
-use App\Models\ReportActivityMaterial;
-use Illuminate\Support\Facades\Artisan;
+use Carbon\Carbon;
const API_GEOLOCATION = "https://nominatim.oslogdev.com/search/ADDR?format=json&addressdetails=1&limit=1";
@@ -51,68 +56,127 @@ class ProjectController extends Controller
$this->validate($request, [
'nama' => 'required',
'mulai_proyek' => 'required',
+ 'mulai_proyek' => 'required',
'akhir_proyek' => 'required',
'rencana_biaya' => 'required',
- 'type_proyek_id' => 'required'
+ 'type_proyek_id' => 'required',
+ 'company_id' => 'required'
]);
+ DB::beginTransaction();
+ try {
+ $data = $request->all();
+ $data['created_by'] = $this->currentName;
+ $data['created_by_id'] = $this->currentId;
- $data = $request->all();
-
- $data['created_by'] = $this->currentName;
-
- if (empty($data['phase_id']))
- $data['phase_id'] = 1;
-
- $result = Project::create($data);
-
- if (!$result)
- return response()->json(['status' => 'failed', 'message' => 'Failed to add data!', 'code' => 500], 500);
-
- $this->createOfficeHours($result->id);
- $dataResultInsert = Project::where('nama', $data['nama'])->where('mulai_proyek', $data['mulai_proyek'])->first();
+ if (empty($data['phase_id'])) {
+ $data['phase_id'] = 1;
+ }
+ $transaction = ProductTransaction::query()
+ ->where('company_id', $request->company_id);
+ $cloneQueryTransaction = clone $transaction;
+
+ $countCreate = false;
+ $projectResult = Project::query()
+ ->selectRaw('count(*) as total_project')
+ ->where('company_id', $request->company_id)
+ ->first();
+ if ($transaction->where([['type_paket', 'Basic'], ['amount', '!=', null]])->exists()) {
+ if ($projectResult['total_project'] < 10) {
+ $countCreate = true;
+ }
+ } elseif ($cloneQueryTransaction->where([['type_paket', 'Free'], ['amount', 0]])->exists()) {
+ if ($projectResult['total_project'] < 1) {
+ $countCreate = true;
+ }
+ } else {
+ $countCreate = true;
+ }
- return response()->json(['status' => 'success', 'message' => 'Data added!', 'data_result' => $dataResultInsert, 'code' => 200], 200);
+ if ($countCreate) {
+ $result = Project::create($data);
+ if (!$result) {
+ return response()->json(['status' => 'failed', 'message' => 'Failed to add data!', 'code' => 500], 500);
+ } else {
+ $this->createOfficeHours($result['id']);
+ $dataResultInsert = Project::where([['nama', $data['nama']], ['mulai_proyek', $data['mulai_proyek']]])->first();
+ DB::commit();
+ return response()->json(['status' => 'success', 'message' => 'Data added!', 'data_result' => $dataResultInsert, 'code' => 200], 200);
+ }
+ } else {
+ return response()->json(['status' => 'failed', 'message' => 'Limited to create project!', 'code' => 500], 500);
+ }
+ } catch (\Throwable $th) {
+ DB::rollBack();
+ }
}
public function edit($id)
{
- if (empty($id) || !is_int((int)$id))
+ if (empty($id) || !is_int((int)$id)) {
return response()->json(['status' => 'failed', 'message' => 'id is required!', 'code' => 400], 400);
-
- $result = Project::query()
- ->from('m_proyek AS mp')
- ->where('mp.id', $id)
- ->selectRaw('value_proyek,scoupe_of_work,kode_sortname,jumlah_stakeholder,nama,mulai_proyek,akhir_proyek,area_kerja,rencana_biaya,biaya_actual,company,pm_id,type_proyek_id,divisi_id,persentase_progress,keterangan,durasi_proyek,progress_by_worklog,currency_symbol,late_consequence,assumtion,currency_code,currency_name,project_objectives,considered_success_when,potential_risk,testing_environment,budget_health,phase_id,calculation_status');
-
- if (!is_null($result->first()['divisi_id'])) {
- $result->leftJoin('m_divisi', 'mp.divisi_id', '=', 'm_divisi.id')
- ->addSelect(DB::raw('m_divisi.name AS nama_divisi'));
}
- $result = $result->first();
-
- if (!$result)
+ $result = Project::select(
+ 'value_proyek',
+ 'scoupe_of_work',
+ 'kode_sortname',
+ 'jumlah_stakeholder',
+ 'nama',
+ 'mulai_proyek',
+ 'akhir_proyek',
+ 'area_kerja',
+ 'rencana_biaya',
+ 'biaya_actual',
+ 'company',
+ 'pm_id',
+ 'type_proyek_id',
+ 'divisi_id',
+ 'persentase_progress',
+ 'keterangan',
+ 'durasi_proyek',
+ 'progress_by_worklog',
+ 'currency_symbol',
+ 'late_consequence',
+ 'assumtion',
+ 'currency_code',
+ 'currency_name',
+ 'project_objectives',
+ 'considered_success_when',
+ 'potential_risk',
+ 'testing_environment',
+ 'budget_health',
+ 'phase_id',
+ 'calculation_status',
+ 'md.name as divisi_name',
+ 'm_proyek.company_id'
+ )
+ ->leftJoin('m_divisi as md', 'md.id', '=', 'm_proyek.divisi_id')
+ ->where('m_proyek.id', $id)
+ ->first();
+ if (!$result) {
return response()->json(['status' => 'failed', 'message' => 'Data not found!', 'code' => 404], 404);
-
- return response()->json(['status' => 'success', 'code' => 200, 'data' => $result], 200);
+ } else {
+ return response()->json(['status' => 'success', 'code' => 200, 'data' => $result], 200);
+ }
}
public function update(Request $request, $id)
{
- if (empty($id) || !is_int((int)$id))
- return response()->json(['status' => 'failed', 'message' => 'id is required!', 'code' => 400], 400);
+ if (empty($id) || !is_int((int)$id)) {
+ return response()->json(['status' => 'failed', 'message' => 'Id is required!', 'code' => 400], 400);
+ }
$data = Project::find($id);
- if (!$data)
+ if ($data) {
+ if ($data->update($request->all())) {
+ return response()->json(['status' => 'success', 'message' => 'Data updated!', 'code' => 200], 200);
+ } else {
+ return response()->json(['status' => 'failed', 'message' => 'Failed to update!', 'code' => 500], 500);
+ }
+ } else {
return response()->json(['status' => 'failed', 'message' => 'Data not found!', 'code' => 404], 404);
-
- $result = $data->update($request->all());
-
- if (!$result)
- return response()->json(['status' => 'failed', 'message' => 'Failed to update!', 'code' => 500], 500);
-
- return response()->json(['status' => 'success', 'message' => 'Data updated!', 'code' => 200], 200);
+ }
}
private function createOfficeHours($proyek_id)
@@ -141,96 +205,113 @@ class ProjectController extends Controller
return true;
}
- public function delete($id)
+ public function delete($id, $company_id)
{
+ DB::beginTransaction();
$data = Project::find($id);
-
- if (!$data)
+ $dateNow = Carbon::now();
+ if ($data) {
+ $this->deleteRelative($id, $company_id);
+ if ($data->delete()) {
+ // if ($data->update(['deleted_at' => $dateNow, 'deleted_by_id' => $this->currentId])) {
+ DB::commit();
+ return response()->json(['status' => 'success', 'message' => 'Data deleted!', 'code' => 200], 200);
+ } else {
+ DB::rollBack();
+ return response()->json(['status' => 'failed', 'message' => 'Delete failed!', 'code' => 500], 500);
+ }
+ } else {
+ DB::rollBack();
return response()->json(['status' => 'failed', 'message' => 'Data not found!', 'code' => 404], 404);
-
- $this->deleteRelative($id);
-
- if (!$data->delete())
- return response()->json(['status' => 'failed', 'message' => 'Delete failed!', 'code' => 500], 500);
-
- return response()->json(['status' => 'success', 'message' => 'Data deleted!', 'code' => 200], 200);
+ }
}
- private function deleteRelative($project_id)
+ private function deleteRelative($project_id, $company_id)
{
- UserToProyek::where('proyek_id', $project_id)->delete();
- UserToActivity::where('proyek_id', $project_id)->delete();
- AssignMaterial::where('proyek_id', $project_id)->delete();
- ProjectCharter::where('proyek_id', $project_id)->delete();
- ProjectApproval::where('proyek_id', $project_id)->delete();
- ProjectMileStone::where('proyek_id', $project_id)->delete();
- ProjectParticipants::where('proyek_id', $project_id)->delete();
- ProjectChecklists::where('proyek_id', $project_id)->delete();
- ProjectIssues::where('proyek_id', $project_id)->delete();
- ProjectRisks::where('proyek_id', $project_id)->delete();
- ProjectToChecklistK3::where('proyek_id', $project_id)->delete();
- HierarchyFtth::where('project_id', $project_id)->delete();
- AssignTools::where('proyek_id', $project_id)->delete();
- OfficeHours::where('proyek_id', $project_id)->delete();
- ReportK3::where('proyek_id', $project_id)->delete();
- RequestMaterial::where('proyek_id', $project_id)->delete();
- $this->deleteVersionGantt($project_id);
- $this->deleteDokumenProject($project_id);
+ DB::transaction(function () use ($project_id, $company_id) {
+ UserToProyek::where('proyek_id', $project_id)->delete();
+ UserToActivity::where('proyek_id', $project_id)->delete();
+ AssignMaterial::where('proyek_id', $project_id)->delete();
+ ProjectCharter::where('proyek_id', $project_id)->delete();
+ ProjectApproval::where('proyek_id', $project_id)->delete();
+ ProjectMileStone::where('proyek_id', $project_id)->delete();
+ ProjectParticipants::where('proyek_id', $project_id)->delete();
+ ProjectChecklists::where('proyek_id', $project_id)->delete();
+ ProjectIssues::where('proyek_id', $project_id)->delete();
+ ProjectRisks::where('proyek_id', $project_id)->delete();
+ ProjectToChecklistK3::where('proyek_id', $project_id)->delete();
+ HierarchyFtth::where('project_id', $project_id)->delete();
+ AssignTools::where('proyek_id', $project_id)->delete();
+ OfficeHours::where('proyek_id', $project_id)->delete();
+ ReportK3::where('proyek_id', $project_id)->delete();
+ RequestMaterial::where('proyek_id', $project_id)->delete();
+ $this->deleteVersionGantt($project_id, $company_id);
+ $this->deleteDokumenProject($project_id, $company_id);
+ }, 5);
}
- private function deleteVersionGantt($project_id)
+ private function deleteVersionGantt($project_id, $company_id)
{
- $dataVg = VersionGantt::where("proyek_id", $project_id)->pluck("id");
- $vhIds = $dataVg->all();
- $activity = Activity::whereIn("version_gantt_id", $vhIds)->pluck('id');
- $activityIds = $activity->all();
- $dataRa = ReportActivity::whereIn("activity_id", $activityIds)->get();
- foreach ($dataRa as $ra) {
- $images = Image::where("ref_id", $ra->id)->where("category", "report_activity")->get();
- foreach ($images as $image) {
- if (file_exists($this->pathImage . $image->image)) {
- unlink($this->pathImage . $image->image);
+ DB::transaction(function () use ($project_id, $company_id) {
+ $dataVg = VersionGantt::where("proyek_id", $project_id)->pluck("id");
+ $vhIds = $dataVg->all();
+ $activity = Activity::whereIn("version_gantt_id", $vhIds)->pluck('id');
+ $activityIds = $activity->all();
+ $dataRa = ReportActivity::whereIn("activity_id", $activityIds)->get();
+ $company = Company::find($company_id);
+ if ($company) {
+ $destinationPath = $this->setCustomeDirectoryUpload($company['company_name']);
+ foreach ($dataRa as $ra) {
+ $images = Image::where("ref_id", $ra->id)->where("category", "report_activity")->get();
+ foreach ($images as $image) {
+ if (file_exists($destinationPath['pathImage'] . $image->image)) {
+ unlink($destinationPath['pathImage'] . $image->image);
+ }
+ }
+ Image::where("ref_id", $ra->id)->where("category", "report_activity")->delete();
+ }
+ $dataAd = ActivityDokumen::whereIn("activity_id", $activityIds)->get();
+ foreach ($dataAd as $ad) {
+ if (file_exists($destinationPath['pathActivityDocument'] . $ad->file)) {
+ unlink($destinationPath['pathActivityDocument'] . $ad->file);
+ }
}
}
- Image::where("ref_id", $ra->id)->where("category", "report_activity")->delete();
- }
- $dataAd = ActivityDokumen::whereIn("activity_id", $activityIds)->get();
- foreach ($dataAd as $ad) {
- if (file_exists($this->pathActivityDocument . $ad->file)) {
- unlink($this->pathActivityDocument . $ad->file);
- }
- }
- ActivityDokumen::whereIn("activity_id", $activityIds)->delete();
- CommentActivity::whereIn("activity_id", $activityIds)->delete();
- Holiday::where("proyek_id", $project_id)->delete();
- VersionGantt::where("proyek_id", $project_id)->delete();
- Link::whereIn("version_gantt_id", $vhIds)->delete();
- ShowHideColumn::whereIn("version_gantt_id", $vhIds)->delete();
- Activity::whereIn("version_gantt_id", $vhIds)->delete();
- ReportActivity::whereIn("activity_id", $activityIds)->delete();
+ ActivityDokumen::whereIn("activity_id", $activityIds)->delete();
+ CommentActivity::whereIn("activity_id", $activityIds)->delete();
+ Holiday::where("proyek_id", $project_id)->delete();
+ VersionGantt::where("proyek_id", $project_id)->delete();
+ Link::whereIn("version_gantt_id", $vhIds)->delete();
+ ShowHideColumn::whereIn("version_gantt_id", $vhIds)->delete();
+ Activity::whereIn("version_gantt_id", $vhIds)->delete();
+ ReportActivity::whereIn("activity_id", $activityIds)->delete();
+ }, 5);
}
- private function deleteDokumenProject($project_id)
+ private function deleteDokumenProject($project_id, $company_id)
{
- $dataDokumen = DokumenProject::where("type_dokumen", "project-document-out-folder")->where('ref_id', $project_id)->get();
-
- foreach ($dataDokumen as $dokumen) {
- if (file_exists($this->pathDocument . $dokumen->file)) {
- unlink($this->pathDocument . $dokumen->file);
+ DB::transaction(function () use ($project_id, $company_id) {
+ $dataDokumen = DokumenProject::where([['type_dokumen', 'project-document-out-folder'], ['ref_id', $project_id]])->get();
+ $company = Company::find($company_id);
+ if ($company) {
+ $destinationPath = $this->setCustomeDirectoryUpload($company['company_name']);
+ foreach ($dataDokumen as $dokumen) {
+ if (file_exists($destinationPath['pathDocument'] . $dokumen->file)) {
+ unlink($destinationPath['pathDocument'] . $dokumen->file);
+ }
+ }
}
- }
- DokumenProject::where("type_dokumen", "project-document-out-folder")->where('ref_id', $project_id)->delete();
-
- $dataFolder = FolderDocumentProyek::where('proyek_id', $project_id)->pluck("id");
- $ref_ids = $dataFolder->all();
- $dataDokumen = DokumenProject::where("type_dokumen", "project-document-in-folder")->whereIn('ref_id', $ref_ids)->get();
- foreach ($dataDokumen as $dokumen) {
- if (file_exists($this->pathDocument . $dokumen->file)) {
- unlink($this->pathDocument . $dokumen->file);
+ DokumenProject::where([['type_dokumen', 'project-document-out-folder'], ['ref_id', $project_id]])->delete();
+ $dataFolder = FolderDocumentProyek::where('proyek_id', $project_id)->pluck("id");
+ $ref_ids = $dataFolder->all();
+ $dataDokumen = DokumenProject::where("type_dokumen", "project-document-in-folder")->whereIn('ref_id', $ref_ids)->get();
+ foreach ($dataDokumen as $dokumen) {
+ if (file_exists($destinationPath['pathDocument'] . $dokumen->file)) {
+ unlink($destinationPath['pathDocument'] . $dokumen->file);
+ }
}
- }
-
- DokumenProject::where("type_dokumen", "project-document-in-folder")->whereIn('ref_id', $ref_ids)->delete();
+ DokumenProject::where("type_dokumen", "project-document-in-folder")->whereIn('ref_id', $ref_ids)->delete();
+ }, 5);
}
public function search(Request $request)
@@ -240,7 +321,6 @@ class ProjectController extends Controller
$dataBuilder = $this->setUpPayload($payload, 'm_proyek');
$builder = $dataBuilder['builder'];
$countBuilder = $dataBuilder['count'];
- // $builder->where("selfTable.created_by",$this->currentName);
$dataGet = $builder->get();
$totalRecord = $countBuilder->count();
@@ -249,94 +329,90 @@ class ProjectController extends Controller
public function list()
{
- $data = Project::select(
- 'id',
- 'kode_sortname',
- 'jumlah_stakeholder',
- 'nama',
- 'mulai_proyek',
- 'akhir_proyek',
- 'area_kerja',
- 'lokasi_kantor',
- 'rencana_biaya',
- 'biaya_actual',
- 'company',
- 'pm_id',
- 'type_proyek_id',
- 'divisi_id',
- 'persentase_progress',
- 'keterangan',
- 'durasi_proyek',
- 'progress_by_worklog',
- 'status',
- 'currency_symbol',
- 'currency_code',
- 'currency_name',
- 'project_objectives',
- 'considered_success_when',
- 'potential_risk',
- 'testing_environment',
- 'currency_code',
- 'currency_symbol',
- 'currency_name',
- 'budget_health',
- 'phase_id',
- 'calculation_status',
- 'created_at',
- 'created_by',
- 'updated_at',
- 'updated_by'
- )->orderBy('id', 'desc')
- // ->where("created_by",$this->currentName)
- ->get();
- $countData = $data->count();
-
- if (!$data)
- return response()->json(['status' => 'failed', 'message' => 'Data not found!', 'code' => 404], 404);
-
- $totalPlannedCost = array_sum(array_map('intval', array_column($data->toArray(), 'plannedCost')));
- $totalActualCost = $data->sum('actualCost');
- $manpowers = User::count();
- $projectsOnDanger = Project::where('budget_health', 'overrun')->count();
- $projectPhases = ProjectPhase::orderBy('order', 'asc')->pluck('name');
- $projectTypes = ProjectType::orderBy('id', 'asc')->pluck('name');
+ DB::beginTransaction();
try {
+ $data = Project::select(
+ 'id',
+ 'kode_sortname',
+ 'jumlah_stakeholder',
+ 'nama',
+ 'mulai_proyek',
+ 'akhir_proyek',
+ 'area_kerja',
+ 'lokasi_kantor',
+ 'rencana_biaya',
+ 'biaya_actual',
+ 'company',
+ 'pm_id',
+ 'type_proyek_id',
+ 'divisi_id',
+ 'persentase_progress',
+ 'keterangan',
+ 'durasi_proyek',
+ 'progress_by_worklog',
+ 'status',
+ 'currency_symbol',
+ 'currency_code',
+ 'currency_name',
+ 'project_objectives',
+ 'considered_success_when',
+ 'potential_risk',
+ 'testing_environment',
+ 'currency_code',
+ 'currency_symbol',
+ 'currency_name',
+ 'budget_health',
+ 'phase_id',
+ 'calculation_status',
+ 'created_at',
+ 'created_by',
+ 'updated_at',
+ 'updated_by'
+ )->orderByDesc('id')
+ ->get();
+ $countData = $data->count();
+ if (!$data) {
+ return response()->json(['status' => 'failed', 'message' => 'Data not found!', 'code' => 404], 404);
+ }
+
+ $totalPlannedCost = array_sum(array_map('intval', array_column($data->toArray(), 'plannedCost')));
+ $totalActualCost = $data->sum('actualCost');
+ $manpowers = User::count();
+ $projectsOnDanger = Project::where('budget_health', 'overrun')->count();
+ $projectPhases = ProjectPhase::orderBy('order', 'asc')->pluck('name');
+ $projectTypes = ProjectType::orderBy('id', 'asc')->pluck('name');
$projectsByPhase = DB::table('m_proyek')
->select('m_proyek_phase.name', 'm_proyek_phase.color', DB::raw('count(*) as total'))
->join('m_proyek_phase', 'm_proyek_phase.id', '=', 'm_proyek.phase_id')
->groupBy('m_proyek_phase.name', 'm_proyek_phase.color')
->get();
- } catch (\Exception $e) {
- return response()->json(['message' => $e->getMessage()]);
- }
- try {
$projectsByType = DB::table('m_proyek')
->select('m_type_proyek.name', DB::raw('count(m_type_proyek.id) as total'))
->join('m_type_proyek', 'm_type_proyek.id', '=', 'm_proyek.type_proyek_id')
->groupBy('m_type_proyek.name')
->get();
- } catch (\Exception $e) {
- return response()->json(['message' => $e->getMessage()]);
+ DB::commit();
+ return response()->json(
+ [
+ 'status' => 'success',
+ 'code' => 200,
+ 'data' => $data,
+ 'totalRecord' => $countData,
+ 'totalPlannedCost' => $totalPlannedCost,
+ 'totalActualCost' => $totalActualCost,
+ 'totalRevenue' => $totalPlannedCost - $totalActualCost,
+ 'manpowers' => $manpowers,
+ 'projectsOnDanger' => $projectsOnDanger,
+ 'projectPhases' => $projectPhases,
+ 'projectsByPhase' => $projectsByPhase,
+ 'projectTypes' => $projectTypes,
+ 'projectsByType' => $projectsByType,
+ ],
+ 200
+ );
+ } catch (\Throwable $th) {
+ DB::rollBack();
}
-
- return response()->json(
- [
- 'status' => 'success',
- 'code' => 200,
- 'data' => $data,
- 'totalRecord' => $countData,
- 'totalPlannedCost' => $totalPlannedCost,
- 'totalActualCost' => $totalActualCost,
- 'totalRevenue' => $totalPlannedCost - $totalActualCost,
- 'manpowers' => $manpowers,
- 'projectsOnDanger' => $projectsOnDanger,
- 'projectPhases' => $projectPhases,
- 'projectsByPhase' => $projectsByPhase,
- 'projectTypes' => $projectTypes,
- 'projectsByType' => $projectsByType,
- ],
- 200
- );
}
public function getListProjectTask($id)
@@ -347,10 +423,11 @@ class ProjectController extends Controller
->groupBy("m_proyek.proyek_id")
->get();
- if (!$data)
+ if ($data) {
+ return response()->json(['status' => 'success', 'code' => 200, 'data' => $data], 200);
+ } else {
return response()->json(['status' => 'failed', 'message' => 'Data not found!', 'code' => 404], 404);
-
- return response()->json(['status' => 'success', 'code' => 200, 'data' => $data], 200);
+ }
}
public function getSCurve(Request $request)
@@ -359,6 +436,13 @@ class ProjectController extends Controller
return response()->json(['status' => 'success', 'code' => 200, 'data' => $data], 200);
}
+ // testing
+ public function calculateSCurvetest(Request $request)
+ {
+ $data = MasterFunctionsHelper::calculateSCurve($request->project_id);
+ return response()->json(['status' => 'success', 'code' => 200, 'data' => $data], 200);
+ }
+
public function calculateSCurve(Request $request)
{
$sCurve = Project::select('scurve')->where('id', $request->project_id)->first();
@@ -389,86 +473,93 @@ class ProjectController extends Controller
public static function setSyncDate($activity_id, $activity, $report)
{
- $status = AssignMaterial::where('activity_id', $activity_id)->first();
- if (!isset($status)) {
- $reports = array(
+ DB::beginTransaction();
+ try {
+ $status = AssignMaterial::where('activity_id', $activity_id)->first();
+ if (!isset($status)) {
+ DB::commit();
+ return [
+ 'activity_id' => $activity_id,
+ 'min_date' => new DateTime($activity->start_date),
+ 'max_date' => new DateTime($activity->end_date),
+ 'status' => 'open'
+ ];
+ }
+ if (!isset($status->status_activity)) {
+ $status->status_activity = 'open';
+ }
+ if ($status->status_activity != 'done') {
+ $minDate = date_create($report->report_date);
+ $maxDate = date_create($report->report_date);
+ date_add($maxDate, date_interval_create_from_date_string($activity->duration . " days"));
+ } else {
+ $material = AssignMaterial::where('activity_id', $activity_id)->first();
+ $minDate = date_create($material->start_activity);
+ $maxDate = date_create($material->finish_activity);
+ }
+ DB::commit();
+ return [
'activity_id' => $activity_id,
- 'min_date' => new DateTime($activity->start_date),
- 'max_date' => new DateTime($activity->end_date),
- 'status' => 'open'
- );
- return $reports;
- }
- if (!isset($status->status_activity)) {
- $status->status_activity = 'open';
- }
- if ($status->status_activity != 'done') {
- $minDate = date_create($report->report_date);
- $maxDate = date_create($report->report_date);
- date_add($maxDate, date_interval_create_from_date_string($activity->duration . " days"));
- } else {
- $material = AssignMaterial::where('activity_id', $activity_id)->first();
- $minDate = date_create($material->start_activity);
- $maxDate = date_create($material->finish_activity);
+ 'min_date' => $minDate,
+ 'max_date' => $maxDate,
+ 'status' => $status->status_activity
+ ];
+ } catch (\Throwable $th) {
+ DB::rollBack();
}
- $reports = array(
- 'activity_id' => $activity_id,
- 'min_date' => $minDate,
- 'max_date' => $maxDate,
- 'status' => $status->status_activity
- );
- return $reports;
}
public function synchronizeReport($gantt_id)
{
- $activities = Activity::where("version_gantt_id", $gantt_id)->get();
- $reports = [];
-
- foreach ($activities as $activity) {
- $activity_id = $activity->id;
- $countReports = ReportActivityMaterial::where('activity_id', $activity_id)->count();
- if ($countReports === 1) {
- $dataReports = ReportActivityMaterial::where('activity_id', $activity_id)->orderBy('report_date')->get();
- foreach ($dataReports as $dr) {
- $reports[] = ProjectController::setSyncDate($activity_id, $activity, $dr);
+ DB::beginTransaction();
+ try {
+ $activities = Activity::where("version_gantt_id", $gantt_id)->get();
+ $reports = [];
+
+ foreach ($activities as $activity) {
+ $activity_id = $activity->id;
+ $countReports = ReportActivityMaterial::where('activity_id', $activity_id)->count();
+ if ($countReports === 1) {
+ $dataReports = ReportActivityMaterial::where('activity_id', $activity_id)->orderBy('report_date')->get();
+ foreach ($dataReports as $dr) {
+ $reports[] = self::setSyncDate($activity_id, $activity, $dr);
+ }
}
+ if ($countReports > 1) {
+ $firstReport = ReportActivityMaterial::where('activity_id', $activity_id)->orderBy('report_date')->first();
+ $reports[] = self::setSyncDate($activity_id, $activity, $firstReport);
+ }
+ $successor = Link::where('t_activity_id', $activity->id)->first();
+ if ($successor) {
+ $predecessor = Activity::find($successor->s_activity_id);
+ $activity->start_date = $predecessor->end_date;
+ $end_date = new DateTime($activity->start_date);
+ $end_date->modify("+" . $activity->duration . " days");
+ $activity->end_date = $end_date->format("Y-m-d H:i:sO");
+ }
+ $activity->save();
}
- if ($countReports > 1) {
- $firstReport = ReportActivityMaterial::where('activity_id', $activity_id)->orderBy('report_date')->first();
- $reports[] = ProjectController::setSyncDate($activity_id, $activity, $firstReport);
- }
- $successor = Link::where('t_activity_id', $activity->id)->first();
- if ($successor) {
- $predecessor = Activity::find($successor->s_activity_id);
- $activity->start_date = $predecessor->end_date;
- $end_date = new DateTime($activity->start_date);
- $end_date->modify("+" . $activity->duration . " days");
- $activity->end_date = $end_date->format("Y-m-d H:i:sO");
- }
- $activity->save();
- }
- /* return response()->json(['status'=>'success','data'=> $reports,'code'=>200], 200); */
- /* return response()->json(['status'=>'success','data'=> $activities,'code'=>200], 200); */
-
- for ($i = 0; $i < count($reports); $i++) {
- $activity = Activity::find($reports[$i]['activity_id']);
- if ($reports[$i]['status'] != 'done') {
- $reports[$i]['max_date']->modify('-1 day');
- } else if ($reports[$i]['status'] == 'done') {
- $activity->actual_end = $reports[$i]['max_date']->setTime(23, 59, 59);
+ for ($i = 0; $i < count($reports); $i++) {
+ $activity = Activity::find($reports[$i]['activity_id']);
+ if ($reports[$i]['status'] != 'done') {
+ $reports[$i]['max_date']->modify('-1 day');
+ } else if ($reports[$i]['status'] == 'done') {
+ $activity->actual_end = $reports[$i]['max_date']->setTime(23, 59, 59);
+ }
+ $activity->start_date = $reports[$i]['min_date']; //same early
+ $activity->end_date = $reports[$i]['max_date']->setTime(23, 59, 59); // same early
+ $startDate = new DateTime($activity->start_date);
+ $endDate = new DateTime($activity->end_date);
+ $duration = MasterFunctionsHelper::countDays($activity->version_gantt_id, $startDate, $endDate);
+ $activity->duration = $duration;
+ $activity->actual_start = $reports[$i]['min_date'];
+ $activity->save();
}
- $activity->start_date = $reports[$i]['min_date']; //same early
- $activity->end_date = $reports[$i]['max_date']->setTime(23, 59, 59); // same early
- $startDate = new DateTime($activity->start_date);
- $endDate = new DateTime($activity->end_date);
- $duration = MasterFunctionsHelper::countDays($activity->version_gantt_id, $startDate, $endDate);
- $activity->duration = $duration;
- $activity->actual_start = $reports[$i]['min_date'];
- $activity->save();
+ DB::commit();
+ return response()->json(['status' => 'success', 'message' => 'Synchronize to report success!', 'code' => 200], 200);
+ } catch (\Throwable $th) {
+ DB::rollBack();
}
-
- return response()->json(['status' => 'success', 'message' => 'Synchronize to report success!', 'code' => 200], 200);
}
public function setBaseline($gantt_id)
@@ -487,18 +578,26 @@ class ProjectController extends Controller
return response()->json(['status' => 'success', 'message' => 'Set baseline success!', 'code' => 200], 200);
}
+ public function setBaselineActivity($activity_id, $gantt_id)
+ {
+ $activity = Activity::where([["version_gantt_id", $gantt_id], ['id', $activity_id]])->first();
+ $activity->update([
+ "planned_start" => $activity->start_date,
+ "planned_end" => $activity->end_date,
+ "early_start" => $activity->start_date,
+ "early_end" => $activity->end_date,
+ ]);
+ return response()->json(['status' => 'success', 'message' => 'Set baseline activity success!', 'code' => 200], 200);
+ }
+
public function getByUser($id)
{
- $alias = "utp";
$userProyek = UserToProyek::query()
- ->from('assign_hr_to_proyek AS ' . $alias)
- ->where([
- ['is_customer', true],
- ['user_id', $id]
- ])
- ->leftJoin('m_users', $alias . '.user_id', '=', 'm_users.id')
- ->leftJoin('m_proyek', $alias . '.proyek_id', '=', 'm_proyek.id')
+ ->from('assign_hr_to_proyek AS utp')
+ ->where([['is_customer', true], ['user_id', $id]])
+ ->leftJoin('m_users', 'utp.user_id', '=', 'm_users.id')
+ ->leftJoin('m_proyek', 'utp.proyek_id', '=', 'm_proyek.id')
->leftJoin('m_type_proyek', 'm_proyek.type_proyek_id', '=', 'm_type_proyek.id')
->select('m_proyek.*', 'm_type_proyek.name AS join_second_name', 'm_users.name AS join_first_name')
->get();
@@ -506,124 +605,160 @@ class ProjectController extends Controller
return response()->json(['status' => 'success', 'code' => 200, 'data' => $userProyek, 'totalRecord' => $totalRecord], 200);
}
+
public function detail(Request $request, $id, $gantt_id = null, $s_curve = null)
{
- if (empty($id) || !is_int((int)$id))
- return response()->json(['status' => 'failed', 'message' => 'id is required!', 'code' => 400], 400);
-
- $result = Project::find($id);
+ DB::beginTransaction();
+ try {
+ if (empty($id) || !is_int((int)$id)) {
+ return response()->json(['status' => 'failed', 'message' => 'Id is required!', 'code' => 400], 400);
+ }
- if (!$result)
- return response()->json(['status' => 'failed', 'message' => 'Data not found!', 'code' => 404], 404);
- if (!isset($gantt_id)) {
- $gantt = MasterFunctionsHelper::getLatestGantt($id);
- $ganttId = $gantt['last_gantt_id'];
- } else {
- $ganttId = $gantt_id;
- }
- $result->projectManager = User::where('id', $result->pm_id)->value('name');
-
- if (isset($s_curve)) {
- $result->header = Activity::whereNull('parent_id')->where("proyek_id", $id)->first();
- $actualStartExist = Activity::where('proyek_id', $id)->whereNotNull('actual_start')->exists();
- if ($result['type_proyek_id'] === 9) {
- $actualEndExist = Activity::where('proyek_id', $id)->exists();
- $query = Activity::where('proyek_id', $id);
+ $result = Project::find($id);
+ if (!$result) {
+ return response()->json(['status' => 'failed', 'message' => 'Data not found!', 'code' => 404], 404);
+ }
+ if (!isset($gantt_id)) {
+ $gantt = MasterFunctionsHelper::getLatestGantt($id);
+ $ganttId = $gantt['last_gantt_id'];
+ } else {
+ $ganttId = $gantt_id;
+ }
+ $result->projectManager = User::where('id', $result->pm_id)->value('name');
+
+ if (isset($s_curve)) {
+ $result->header = Activity::whereNull('parent_id')->where("proyek_id", $id)->first();
+ $actualStartExist = Activity::where('proyek_id', $id)->whereNotNull('actual_start')->exists();
+ if ($result['type_proyek_id'] === 9) {
+ // $actualEndExist = Activity::where('proyek_id', $id)->exists();
+ $query = Activity::where('proyek_id', $id);
+ $maxEndDate = Activity::where('proyek_id', $id)->select('end_date')
+ ->orderBy('end_date', 'desc')
+ ->first();
+ } else {
+ // $actualEndExist = Activity::where('version_gantt_id', $ganttId)->exists();
+ $maxEndDate = Activity::where('version_gantt_id', $ganttId)->select('end_date')
+ ->orderByDesc('end_date')
+ ->first();
+ $query = Activity::where('version_gantt_id', $ganttId);
+ }
} else {
- $actualEndExist = Activity::where('version_gantt_id', $ganttId)->exists();
+ $result->header = Activity::whereNull('parent_id')->where("proyek_id", $id)->where("version_gantt_id", $ganttId)->first();
+ $actualStartExist = Activity::where('version_gantt_id', $ganttId)->whereNotNull('actual_start')->exists();
+ // $actualEndExist = Activity::where('version_gantt_id', $ganttId)->exists();
+ $maxEndDate = Activity::where('version_gantt_id', $ganttId)->select('end_date')
+ ->orderByDesc('end_date')
+ ->first();
$query = Activity::where('version_gantt_id', $ganttId);
}
- } else {
- $result->header = Activity::whereNull('parent_id')->where("proyek_id", $id)->where("version_gantt_id", $ganttId)->first();
- $actualStartExist = Activity::where('version_gantt_id', $ganttId)->whereNotNull('actual_start')->exists();
- $actualEndExist = Activity::where('version_gantt_id', $ganttId)->exists();
- $query = Activity::where('version_gantt_id', $ganttId);
- }
- if ($actualStartExist) {
- $startDate = $query->orderBy('actual_start')->value('start_date');
- } else {
- $startDate = $query->orderBy('start_date')->value('start_date');
- }
- if ($actualEndExist) {
- $maxEndDate = $query->max('id');
- $endDate = $query->where('id', $maxEndDate)->first()->end_date;
+ if ($actualStartExist) {
+ $startDate = $query->orderBy('actual_start')->value('start_date');
+ } else {
+ $startDate = $query->orderBy('start_date')->value('start_date');
+ }
+ // if($actualEndExist)
+ // {
+ // // $maxEndDate = $query->max('id');
+ // // get last end_date
+ // // $endDate = $query->where('id',$maxEndDate)->first()->end_date;
+
+ // }
+
+ $plannedStart = Activity::where('version_gantt_id', $ganttId)
+ ->orderBy('planned_start')
+ ->value('planned_start');
+ $plannedEnd = Activity::where('version_gantt_id', $ganttId)
+ ->orderByDesc('planned_end')
+ ->value('planned_end');
+ if (isset($result->header)) {
+ $result->header->start_date = $startDate;
+ $result->header->end_date = $maxEndDate->end_date;
+ $result->header->planned_start = $plannedStart;
+ $result->header->planned_end = $plannedEnd;
+ }
+ DB::commit();
+ return response()->json(['status' => 'success', 'code' => 200, 'data' => $result, 'gantt' => $ganttId], 200);
+ } catch (\Throwable $th) {
+ DB::rollBack();
}
-
- $plannedStart = Activity::where('version_gantt_id', $ganttId)
- ->orderBy('planned_start')
- ->value('planned_start');
- $plannedEnd = Activity::where('version_gantt_id', $ganttId)
- ->orderByDesc('planned_end')
- ->value('planned_end');
- $result->header->start_date = $startDate;
- $result->header->end_date = $endDate;
- $result->header->planned_start = $plannedStart;
- $result->header->planned_end = $plannedEnd;
- return response()->json(['status' => 'success', 'code' => 200, 'data' => $result, 'gantt' => $ganttId], 200);
}
public function getOverdueActivities(Request $request)
{
- $payload = $request->all();
- if (empty($payload['id']) || !is_int((int)$payload['id']))
- return response()->json(['status' => 'failed', 'message' => 'id is required!', 'code' => 400], 400);
+ DB::beginTransaction();
+ try {
+ $payload = $request->all();
+ if (empty($payload['id']) || !is_int((int)$payload['id'])) {
+ return response()->json(['status' => 'failed', 'message' => 'id is required!', 'code' => 400], 400);
+ }
- $result = Project::find($payload['id']);
-
- if (!$result)
- return response()->json(['status' => 'failed', 'message' => 'Project not found!', 'code' => 404], 404);
- //TODO possible overdue bug
- $endDate = Activity::where('proyek_id', $payload['id'])
- ->orderByDesc('end_date')
- ->value('end_date');
- if (isset($payload['till_date'])) {
- if (isset($payload['scurve'])) {
- $overdueActivities = Activity::where('proyek_id', $payload['id'])->whereNotNull('parent_id')->where('persentase_progress', '!=', 100)->whereDate('end_date', '<=', $endDate)->orderBy('end_date', 'asc')->get();
- } else {
- $overdueActivities = Activity::where('version_gantt_id', $payload['gantt'])->whereNotNull('parent_id')->where('persentase_progress', '!=', 100)->whereDate('end_date', '<=', $endDate)->orderBy('end_date', 'asc')->get();
+ $result = Project::find($payload['id']);
+
+ if (!$result) {
+ return response()->json(['status' => 'failed', 'message' => 'Project not found!', 'code' => 404], 404);
}
- } else {
- if (isset($payload['scurve'])) {
- $overdueActivities = Activity::where('proyek_id', $payload['id'])->whereNotNull('parent_id')->where('persentase_progress', '!=', 100)->orderBy('end_date', 'asc')->get();
+ //TODO possible overdue bug
+ $endDate = Activity::where('proyek_id', $payload['id'])
+ ->orderByDesc('end_date')
+ ->value('end_date');
+ if (isset($payload['till_date'])) {
+ if (isset($payload['scurve'])) {
+ $overdueActivities = Activity::join('m_version_gantt', 'm_activity.version_gantt_id', '=', 'm_version_gantt.id')->where('m_activity.proyek_id', $payload['id'])->whereNotNull('parent_id')->where('persentase_progress', '!=', 100)->whereDate('end_date', '<=', $endDate)->orderBy('end_date', 'asc')->get();
+ } else {
+ $overdueActivities = Activity::join('m_version_gantt', 'm_activity.version_gantt_id', '=', 'm_version_gantt.id')->where('version_gantt_id', $payload['gantt'])->whereNotNull('parent_id')->where('persentase_progress', '!=', 100)->whereDate('end_date', '<=', $endDate)->orderBy('end_date', 'asc')->get();
+ }
} else {
- $overdueActivities = Activity::where('version_gantt_id', $payload['gantt'])->whereNotNull('parent_id')->where('persentase_progress', '!=', 100)->orderBy('end_date', 'asc')->get();
+ if (isset($payload['scurve'])) {
+ $overdueActivities = Activity::join('m_version_gantt', 'm_activity.version_gantt_id', '=', 'm_version_gantt.id')->where('m_activity.proyek_id', $payload['id'])->whereNotNull('parent_id')->where('persentase_progress', '!=', 100)->orderBy('end_date', 'asc')->get();
+ } else {
+ $overdueActivities = Activity::join('m_version_gantt', 'm_activity.version_gantt_id', '=', 'm_version_gantt.id')->where('version_gantt_id', $payload['gantt'])->whereNotNull('parent_id')->where('persentase_progress', '!=', 100)->orderBy('end_date', 'asc')->get();
+ }
}
+ $result->overdueActivities = $overdueActivities;
+ DB::commit();
+ return response()->json(['status' => 'success', 'code' => 200, 'data' => $result], 200);
+ } catch (\Throwable $th) {
+ DB::rollBack();
}
- $result->overdueActivities = $overdueActivities;
-
- return response()->json(['status' => 'success', 'code' => 200, 'data' => $result], 200);
}
public function getReportDistribution(Request $request)
{
- $payload = $request->all();
+ DB::beginTransaction();
+ try {
+ $payload = $request->all();
- if (empty($payload['project_id']) || !is_int((int)$payload['project_id']))
- return response()->json(['status' => 'failed', 'message' => 'id is required!', 'code' => 400], 400);
+ if (empty($payload['project_id']) || !is_int((int)$payload['project_id'])) {
+ return response()->json(['status' => 'failed', 'message' => 'id is required!', 'code' => 400], 400);
+ }
- $reports = DB::table('assign_material_to_activity as ama')
- ->select(
- 'u.name',
- 'a.name as activity_name',
- 'ama.qty_planning',
- 'ram.qty as qty_real',
- 'rm.description as material_name',
- 'rm.uom as material_unit',
- 'ram.lat',
- 'ram.lon',
- 'ram.description as report_notes',
- 'ram.report_date'
- )
- ->join('report_activity_material as ram', 'ram.assign_material_id', '=', 'ama.id')
- ->join('m_req_material as rm', 'rm.id', '=', 'ama.material_id')
- ->join('m_activity as a', 'a.id', '=', 'ama.activity_id')
- ->join('m_users as u', 'u.id', '=', 'ram.user_id')
- ->where('ama.proyek_id', '=', $payload['project_id'])
- ->whereNotNull('ram.lat')
- ->whereBetween('ram.report_date', [$payload['start_date'], $payload['end_date']]);
-
- return response()->json(['status' => 'success', 'code' => 200, 'data' => $reports], 200);
+ $reports = AssignMaterial::query()
+ ->from('assign_material_to_activity AS ama')
+ ->select(
+ 'u.name',
+ 'a.name as activity_name',
+ 'ama.qty_planning',
+ 'ram.qty as qty_real',
+ 'rm.description as material_name',
+ 'rm.uom as material_unit',
+ 'ram.lat',
+ 'ram.lon',
+ 'ram.description as report_notes',
+ 'ram.report_date'
+ )
+ ->join('report_activity_material as ram', 'ram.assign_material_id', '=', 'ama.id')
+ ->join('m_req_material as rm', 'rm.id', '=', 'ama.material_id')
+ ->join('m_activity as a', 'a.id', '=', 'ama.activity_id')
+ ->join('m_users as u', 'u.id', '=', 'ram.user_id')
+ ->where('ama.proyek_id', '=', $payload['project_id'])
+ ->whereNotNull('ram.lat')
+ ->whereBetween('ram.report_date', [$payload['start_date'], $payload['end_date']]);
+ DB::commit();
+ return response()->json(['status' => 'success', 'code' => 200, 'data' => $reports], 200);
+ } catch (\Throwable $th) {
+ DB::rollBack();
+ }
}
public function getManpower($proyek_id)
@@ -643,51 +778,59 @@ class ProjectController extends Controller
public function dashboard($id)
{
- $data = DB::table('m_proyek as mp')
- ->select(
- 'mp.kode_sortname',
- 'mp.nama as name_project',
- 'mp.mulai_proyek as start',
- 'mp.akhir_proyek as finish',
- 'mp.rencana_biaya',
- 'mp.company',
- 'mp.currency_symbol',
- 'mu.name as pm',
- 'mp.budget_health'
- )
- ->join('m_users as mu', 'mu.id', '=', 'mp.pm_id')
- ->where('mp.id', $id)
- ->first();
-
- if (!$data)
- return response()->json(['status' => 'failed', 'message' => 'Data tidak ditemukan!', 'code' => 404], 404);
-
- $manpowers = UserToProyek::where('proyek_id', $id)->count();
- $rootActivity = Activity::whereNull('parent_id')->where('proyek_id', $id)->orderBy('version_gantt_id', 'desc')->first();
-
- $actualCost = @$rootActivity->biaya_actual ?? 0;
- $progress = @$rootActivity->persentase_progress ?? 0;
-
- $commentActivity = DB::table('m_comment_activity as mca')
- ->select(
- 'mca.activity_id',
- 'mca.comment as comment',
- 'mca.created_by as comment_by',
- 'mca.created_at as comment_created',
- 'ma.name as activity'
- )
- ->join('m_activity as ma', 'ma.id', '=', 'mca.activity_id')
- ->where('ma.proyek_id', $id)
- ->orderBy('comment_by')
- ->take(2)
- ->get();
+ DB::beginTransaction();
+ try {
+ $data = Project::query()
+ ->from('m_proyek AS mp')
+ ->select(
+ 'mp.kode_sortname',
+ 'mp.nama as name_project',
+ 'mp.mulai_proyek as start',
+ 'mp.akhir_proyek as finish',
+ 'mp.rencana_biaya',
+ 'mp.company',
+ 'mp.currency_symbol',
+ 'mu.name as pm',
+ 'mp.budget_health'
+ )
+ ->join('m_users as mu', 'mu.id', '=', 'mp.pm_id')
+ ->where('mp.id', $id)
+ ->first();
+
+ if (!$data) {
+ return response()->json(['status' => 'failed', 'message' => 'Data not found!', 'code' => 404], 404);
+ }
- $data->actual_cost = $actualCost;
- $data->progress = $progress;
- $data->comment = $commentActivity;
- $data->man_power = $manpowers;
+ $manpowers = UserToProyek::where('proyek_id', $id)->count();
+ $rootActivity = Activity::whereNull('parent_id')->where('proyek_id', $id)->orderByDesc('version_gantt_id')->first();
+
+ $actualCost = @$rootActivity->biaya_actual ?? 0;
+ $progress = @$rootActivity->persentase_progress ?? 0;
+
+ $commentActivity = CommentActivity::query()
+ ->from('m_comment_activity AS mca')
+ ->select(
+ 'mca.activity_id',
+ 'mca.comment as comment',
+ 'mca.created_by as comment_by',
+ 'mca.created_at as comment_created',
+ 'ma.name as activity'
+ )
+ ->join('m_activity as ma', 'ma.id', '=', 'mca.activity_id')
+ ->where('ma.proyek_id', $id)
+ ->orderBy('comment_by')
+ ->take(2)
+ ->get();
- return response()->json(['status' => 'success', 'code' => 200, 'data' => $data], 200);
+ $data->actual_cost = $actualCost;
+ $data->progress = $progress;
+ $data->comment = $commentActivity;
+ $data->man_power = $manpowers;
+ DB::commit();
+ return response()->json(['status' => 'success', 'code' => 200, 'data' => $data], 200);
+ } catch (\Throwable $th) {
+ DB::rollBack();
+ }
}
private function httpReq($search)
diff --git a/app/Http/Controllers/ProjectDokumenController.php b/app/Http/Controllers/ProjectDokumenController.php
index 963208c..5f1e02f 100644
--- a/app/Http/Controllers/ProjectDokumenController.php
+++ b/app/Http/Controllers/ProjectDokumenController.php
@@ -1,105 +1,131 @@
-json(['status'=>'failed','message'=>'project id is required!','code'=>400], 400);
- }
-
- $document = DokumenProject::where("ref_id", $id)->get();
-
- if(count($document) == 0)
- return response()->json(['status'=>'','message'=>'Data not found!' ,'code'=>404], 404);
-
- return response()->json(['status'=>'success','data'=> $document ,'code'=>200], 200);
- }
-
- public function delete($id)
- {
- if(empty($id) || !is_int((int)$id)) {
- return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
- }
-
- $document = DokumenProject::find($id);
- if(!$document){
- return response()->json(['status'=>'failed','message'=>'Data not found!','code'=>400], 400);
- }
-
- if(file_exists($this->pathDocument.$document->file)){
- unlink($this->pathDocument.$document->file);
- }
-
- $document->delete();
-
- return response()->json(['status'=>'success','message'=>'Data deleted!','code'=>200], 200);
- }
-
- public function uploadProjectDokumen(Request $request)
- {
- if($request->hasFile('dokumen')){
- $document = $request->file('dokumen');
- $ref_id = $request->ref_id;
- $name = $document->getClientOriginalName();
-
- $result = $document->move($this->pathDocument, $name);
- if($result){
- $data = [
- 'ref_id' => (int)$ref_id,
- 'file' => $name,
- 'type_dokumen' => isset($request->type_dokumen) ? $request->type_dokumen : 'project-document'
- ];
-
- $result = DokumenProject::create($data);
-
- if(!$result){
- unlink($this->pathDocument.$name);
- return response()->json(['status'=>'failed','message'=>'Upload failed!','code'=> 500], 500);
- }
- return response()->json(['status'=>'success','message'=>'Upload successful!','code'=>200], 200);
-
- }
- return response()->json(['status'=>'failed','message'=>'Upload failed!','code'=> 500], 500);
- }
- return response()->json(['status'=>'failed','message'=>'File is required!','code'=>400], 400);
- }
-
- public function searchDocProject(Request $request){
- $payload = $request->all();
-
- $dataBuilder = $this->setUpPayload($payload, 'document_project');
- $builder = $dataBuilder['builder'];
- $countBuilder = $dataBuilder['count'];
- $dataGet = $builder->get();
- $totalRecord = $countBuilder->count();
-
- return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200);
- }
-
- public function downloadDokumen($id)
- {
- if(empty($id) || !is_int((int)$id))
- return response()->json(['status'=>'failed','message'=>'Id is required!','code'=>400], 400);
-
- $document = DokumenProject::find($id);
-
- if(!$document)
- return response()->json(['status'=>'failed','message'=>'Data not found!','code'=> 404], 404);
-
- if(!file_exists($this->pathDocument.$document->file))
- return response()->json(['status'=>'failed','message'=>'Data not found!','code'=> 404], 404);
-
- $pathToFile = $this->pathDocument.$document->file;
- $name = pathinfo($pathToFile, PATHINFO_FILENAME) . "." . pathinfo($pathToFile, PATHINFO_EXTENSION);
- $headers = [
- 'Content-Disposition' => 'attachment; filename="'.$name.'"'
- ];
- // dd($name, $headers);
- return response()->download($pathToFile, $name, $headers);
- }
-}
+json(['status'=>'failed','message'=>'project id is required!','code'=>400], 400);
+ }
+
+ $document = DokumenProject::where("ref_id", $id)->get();
+
+ if(count($document) == 0)
+ return response()->json(['status'=>'','message'=>'Data not found!' ,'code'=>404], 404);
+
+ return response()->json(['status'=>'success','data'=> $document ,'code'=>200], 200);
+ }
+
+ public function delete($id, $company_id)
+ {
+ if(empty($id) || !is_int((int)$id)) {
+ return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
+ }
+
+ $document = DokumenProject::find($id);
+ if(!$document){
+ return response()->json(['status'=>'failed','message'=>'Data not found!','code'=>400], 400);
+ }
+ $company = Company::find($company_id);
+ if($company) {
+ $destinationPath = $this->setCustomeDirectoryUpload($company['company_name']);
+ if(file_exists($destinationPath['pathDocument'].$document['file'])){
+ unlink($destinationPath['pathDocument'].$document['file']);
+ }
+ }
+ $document->delete();
+ return response()->json(['status'=>'success','message'=>'Data deleted!','code'=>200], 200);
+ }
+
+ public function uploadProjectDokumen(Request $request)
+ {
+ DB::beginTransaction();
+ $timeNow = Carbon::now();
+ if($request->hasFile('dokumen')){
+ $document = $request->file('dokumen');
+ $ref_id = $request->ref_id;
+
+ $originalFilename = $document->getClientOriginalName();
+ $extension = pathinfo($originalFilename, PATHINFO_EXTENSION);
+ $filename = pathinfo($originalFilename, PATHINFO_FILENAME);
+ $name = $filename . '_' . $timeNow->format('d-m-y-His') . '.' . $extension;
+ // Limited Storage
+ $company = Company::whereId($request->company_id)->first();
+ if($company) {
+ $destinationPath = $this->setCustomeDirectoryUpload($company['company_name']);
+ $getLimitStorage = $this->setLimitsStorage($company, $document, $destinationPath['pathDocument'],$destinationPath);
+ }
+ if(isset($getLimitStorage)) {
+ if($getLimitStorage === false) {
+ DB::rollBack();
+ return response()->json(['status' => 'failed', 'message' => 'Limited storage maximum!', 'code' => 500], 500);
+ }
+ $data = [
+ 'ref_id' => (int)$ref_id,
+ 'file' => $name,
+ 'type_dokumen' => isset($request->type_dokumen) ? $request->type_dokumen : 'project-document'
+ ];
+
+ $result = DokumenProject::create($data);
+
+ if(!$document->move($destinationPath['pathDocument'], $name) && $result) {
+ unlink($destinationPath['pathDocument'].$name);
+ DB::rollBack();
+ return response()->json(['status'=>'failed','message'=>'Dokumen project gagal diupload!','code'=> 500], 500);
+ }
+ DB::commit();
+ return response()->json(['status'=>'success','message'=>'Dokumen project berhasil diupload!','code'=>200], 200);
+ }
+ DB::rollBack();
+ return response()->json(['status'=>'failed','message'=>'Dokumen project gagal diupload!','code'=> 500], 500);
+ }
+ DB::rollBack();
+ return response()->json(['status'=>'failed','message'=>'File is required!','code'=>400], 400);
+ }
+
+ public function searchDocProject(Request $request){
+ $payload = $request->all();
+
+ $dataBuilder = $this->setUpPayload($payload, 'document_project');
+ $builder = $dataBuilder['builder'];
+ $countBuilder = $dataBuilder['count'];
+ $dataGet = $builder->get();
+ $totalRecord = $countBuilder->count();
+
+ return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200);
+ }
+
+ public function downloadDokumen($id, $company_id)
+ {
+ if(empty($id) || !is_int((int)$id)) {
+ return response()->json(['status'=>'failed','message'=>'Id is required!','code'=>400], 400);
+ }
+ $document = DokumenProject::find($id);
+ $company = Company::find($company_id);
+
+ if(!$document || !$company) {
+ return response()->json(['status'=>'failed','message'=>'Data not found!','code'=> 404], 404);
+ }
+
+ $destinationPath = $this->setCustomeDirectoryUpload($company['company_name']);
+ $pathToFile = $destinationPath['pathDocument'].$document['file'];
+
+ if(!file_exists($pathToFile)) {
+ return response()->json(['status'=>'failed','message'=>'Directory not found!','code'=> 404], 404);
+ }
+ if($company) {
+ $name = pathinfo($pathToFile, PATHINFO_FILENAME) . "." . pathinfo($pathToFile, PATHINFO_EXTENSION);
+ }
+ $headers = [
+ 'Content-Disposition' => 'attachment; filename="'.$name.'"'
+ ];
+
+ return response()->download($pathToFile, $name, $headers);
+ }
+}
diff --git a/app/Http/Controllers/ProjectExpenditureController.php b/app/Http/Controllers/ProjectExpenditureController.php
new file mode 100644
index 0000000..43f379d
--- /dev/null
+++ b/app/Http/Controllers/ProjectExpenditureController.php
@@ -0,0 +1,93 @@
+validate($request, [
+ 'name' => 'required'
+ ]);
+ $data = $request->all();
+ // Set Unique
+ $result = ProjectExpenditure::query()
+ ->where([
+ ['company_id',$data['company_id']],
+ ['name', $data['name']]
+ ])->first();
+ if($result) {
+ return response()->json(['status'=>'failed','message'=>'Name is already exists!','code'=> 500], 500);
+ die;
+ }
+
+ $data['created_by'] = $this->currentName;
+
+ if(!ProjectExpenditure::create($data))
+ return response()->json(['status'=>'failed','message'=>'Failed to add data','code'=> 500], 500);
+
+ return response()->json(['status'=>'success','message'=>'data added!','code'=>200], 200);
+ }
+
+ public function edit($id){
+ if(!$id || (int) $id < 0 || $id=="")
+ return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
+
+ if(!$result = ProjectExpenditure::find($id))
+ return response()->json(['status'=>'failed','message'=>'Failed to get data!','code'=> 404], 404);
+
+ return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200);
+ }
+
+ public function update(Request $request, $id)
+ {
+ if(!$id || (int) $id < 0 || $id=="")
+ return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
+
+ if(!$data = ProjectExpenditure::find($id))
+ return response()->json(['status'=>'failed','message'=>'data project expenditure not found!','code'=>400], 400);
+
+ if(!$data->update($request->all()))
+ return response()->json(['status'=>'failed','message'=>'data project expenditure failed updated!','code'=>400], 400);
+
+ return response()->json(['status'=>'success','message'=>'Data berhasil disimpan!','code'=>200], 200);
+ }
+
+ public function delete($id)
+ {
+
+ if(!$data = ProjectExpenditure::find($id))
+ return response()->json(['status'=>'failed','message'=>'data project expenditure not found!','code'=>400], 400);
+
+ if(!$data->delete())
+ return response()->json(['status'=>'failed','message'=>'Data gagal dihapus!','code'=> 500], 500);
+
+ return response()->json(['status'=>'success','message'=>'Data berhasil dihapus!','code'=>200], 200);
+ }
+
+ public function search(Request $request)
+ {
+ $payload = $request->all();
+ $dataBuilder = $this->setUpPayload($payload, 'm_proyek_expenditure');
+ $builder = $dataBuilder['builder'];
+ $countBuilder = $dataBuilder['count'];
+ $dataGet = $builder->get();
+ $totalRecord = $countBuilder->count();
+ return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200);
+ }
+
+ public function list()
+ {
+ $data = ProjectExpenditure::all();
+ $countData = $data->count();
+
+ if(!$data)
+ return response()->json(['status'=>'failed','message'=>'failed get list project expenditure, please try again later!','code'=>400], 400);
+
+ return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200);
+
+ }
+}
diff --git a/app/Http/Controllers/ProjectFinancialHealthController.php b/app/Http/Controllers/ProjectFinancialHealthController.php
new file mode 100644
index 0000000..7fcabd6
--- /dev/null
+++ b/app/Http/Controllers/ProjectFinancialHealthController.php
@@ -0,0 +1,93 @@
+validate($request, [
+ 'name' => 'required'
+ ]);
+ $data = $request->all();
+ // Set Unique
+ $result = ProjectFinancialHealth::query()
+ ->where([
+ ['company_id',$data['company_id']],
+ ['name', $data['name']]
+ ])->first();
+ if($result) {
+ return response()->json(['status'=>'failed','message'=>'Name is already exists!','code'=> 500], 500);
+ die;
+ }
+
+ $data['created_by'] = $this->currentName;
+
+ if(!ProjectFinancialHealth::create($data))
+ return response()->json(['status'=>'failed','message'=>'Failed to add data','code'=> 500], 500);
+
+ return response()->json(['status'=>'success','message'=>'data added!','code'=>200], 200);
+ }
+
+ public function edit($id){
+ if(!$id || (int) $id < 0 || $id=="")
+ return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
+
+ if(!$result = ProjectFinancialHealth::find($id))
+ return response()->json(['status'=>'failed','message'=>'Failed to get data!','code'=> 404], 404);
+
+ return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200);
+ }
+
+ public function update(Request $request, $id)
+ {
+ if(!$id || (int) $id < 0 || $id=="")
+ return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
+
+ if(!$data = ProjectFinancialHealth::find($id))
+ return response()->json(['status'=>'failed','message'=>'data financial health not found!','code'=>400], 400);
+
+ if(!$data->update($request->all()))
+ return response()->json(['status'=>'failed','message'=>'Data financial health failed updated!','code'=>400], 400);
+
+ return response()->json(['status'=>'success','message'=>'Data berhasil disimpan!','code'=>200], 200);
+ }
+
+ public function delete($id)
+ {
+
+ if(!$data = ProjectFinancialHealth::find($id))
+ return response()->json(['status'=>'failed','message'=>'data financial health not found!','code'=>400], 400);
+
+ if(!$data->delete())
+ return response()->json(['status'=>'failed','message'=>'Data gagal dihapus!','code'=> 500], 500);
+
+ return response()->json(['status'=>'success','message'=>'Data berhasil dihapus!','code'=>200], 200);
+ }
+
+ public function search(Request $request)
+ {
+ $payload = $request->all();
+ $dataBuilder = $this->setUpPayload($payload, 'm_proyek_financial_health');
+ $builder = $dataBuilder['builder'];
+ $countBuilder = $dataBuilder['count'];
+ $dataGet = $builder->get();
+ $totalRecord = $countBuilder->count();
+ return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200);
+ }
+
+ public function list()
+ {
+ $data = ProjectFinancialHealth::all();
+ $countData = $data->count();
+
+ if(!$data)
+ return response()->json(['status'=>'failed','message'=>'failed get list financial health, please try again later!','code'=>400], 400);
+
+ return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200);
+
+ }
+}
diff --git a/app/Http/Controllers/ProjectInvoiceController.php b/app/Http/Controllers/ProjectInvoiceController.php
new file mode 100644
index 0000000..12f9a6f
--- /dev/null
+++ b/app/Http/Controllers/ProjectInvoiceController.php
@@ -0,0 +1,93 @@
+validate($request, [
+ 'name' => 'required'
+ ]);
+ $data = $request->all();
+ // Set Unique
+ $result = ProjectInvoice::query()
+ ->where([
+ ['company_id',$data['company_id']],
+ ['name', $data['name']]
+ ])->first();
+ if($result) {
+ return response()->json(['status'=>'failed','message'=>'Name is already exists!','code'=> 500], 500);
+ die;
+ }
+
+ $data['created_by'] = $this->currentName;
+
+ if(!ProjectInvoice::create($data))
+ return response()->json(['status'=>'failed','message'=>'Failed to add data','code'=> 500], 500);
+
+ return response()->json(['status'=>'success','message'=>'data added!','code'=>200], 200);
+ }
+
+ public function edit($id){
+ if(!$id || (int) $id < 0 || $id=="")
+ return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
+
+ if(!$result = ProjectInvoice::find($id))
+ return response()->json(['status'=>'failed','message'=>'Failed to get data!','code'=> 404], 404);
+
+ return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200);
+ }
+
+ public function update(Request $request, $id)
+ {
+ if(!$id || (int) $id < 0 || $id=="")
+ return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
+
+ if(!$data = ProjectInvoice::find($id))
+ return response()->json(['status'=>'failed','message'=>'data project invoice not found!','code'=>400], 400);
+
+ if(!$data->update($request->all()))
+ return response()->json(['status'=>'failed','message'=>'data project invoice failed updated!','code'=>400], 400);
+
+ return response()->json(['status'=>'success','message'=>'Data berhasil disimpan!','code'=>200], 200);
+ }
+
+ public function delete($id)
+ {
+
+ if(!$data = ProjectInvoice::find($id))
+ return response()->json(['status'=>'failed','message'=>'data project invoice not found!','code'=>400], 400);
+
+ if(!$data->delete())
+ return response()->json(['status'=>'failed','message'=>'Data gagal dihapus!','code'=> 500], 500);
+
+ return response()->json(['status'=>'success','message'=>'Data berhasil dihapus!','code'=>200], 200);
+ }
+
+ public function search(Request $request)
+ {
+ $payload = $request->all();
+ $dataBuilder = $this->setUpPayload($payload, 'm_proyek_invoice');
+ $builder = $dataBuilder['builder'];
+ $countBuilder = $dataBuilder['count'];
+ $dataGet = $builder->get();
+ $totalRecord = $countBuilder->count();
+ return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200);
+ }
+
+ public function list()
+ {
+ $data = ProjectInvoice::all();
+ $countData = $data->count();
+
+ if(!$data)
+ return response()->json(['status'=>'failed','message'=>'failed get list project invoice, please try again later!','code'=>400], 400);
+
+ return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200);
+
+ }
+}
diff --git a/app/Http/Controllers/ProjectRoleController.php b/app/Http/Controllers/ProjectRoleController.php
index e12586b..19be106 100644
--- a/app/Http/Controllers/ProjectRoleController.php
+++ b/app/Http/Controllers/ProjectRoleController.php
@@ -1,120 +1,121 @@
-validate($request, [
- 'name' => 'required',
- 'description' => 'required'
- ]);
-
- $data = $request->all();
-
- $data['created_by'] = $this->currentName;
-
- $result = ProjectRole::create($data);
-
- if($result){
- return response()->json(['status'=>'success','message'=>'add data project role successfully!','code'=>200], 200);
- }else{
- return response()->json(['status'=>'failed','message'=>'add data project role failed!','code'=>400], 400);
- }
- }
-
- public function edit($id){
- if(!$id || (int) $id < 0 || $id==""){
- return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
- die();
- }
-
- $result = ProjectRole::find($id);
-
- if($result){
- return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200);
- }else{
- return response()->json(['status'=>'failed','message'=>'failed get data project role, please try again later!','code'=>400], 400);
- }
- }
-
- public function update(Request $request, $id)
- {
- if(!$id || (int) $id < 0 || $id==""){
- return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
- }
-
- $data = ProjectRole::find($id);
-
- if($data){
- $result = $data->update($request->all());
- }else{
- return response()->json(['status'=>'failed','message'=>'data project role not found!','code'=>400], 400);
- die();
- }
-
-
- if($result){
- return response()->json(['status'=>'success','message'=>'data project role successfully updated!','code'=>200], 200);
- }else{
- return response()->json(['status'=>'failed','message'=>'data project role failed updated!','code'=>400], 400);
- }
- }
-
- public function delete($id)
- {
- $data = ProjectRole::find($id);
-
- if($data){
- $delete = $data->delete();
- }else{
- return response()->json(['status'=>'failed','message'=>'data project role not found!','code'=>400], 400);
- die();
- }
-
-
- if($delete){
- return response()->json(['status'=>'success','message'=>'data project role successfully deleted!','code'=>200], 200);
- }else{
- return response()->json(['status'=>'failed','message'=>'data project role failed deleted!','code'=>400], 400);
- }
- }
-
- public function search(Request $request)
- {
- $payload = $request->all();
- $dataBuilder = $this->setUpPayload($payload, 'm_role_proyek');
- $builder = $dataBuilder['builder'];
- $countBuilder = $dataBuilder['count'];
- $dataGet = $builder->get();
- $totalRecord = $countBuilder->count();
- return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200);
- }
-
- public function list()
- {
- $data = ProjectRole::all();
- $countData = $data->count();
-
- if($data){
- return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200);
- }else{
- return response()->json(['status'=>'failed','message'=>'failed get list project role, please try again later!','code'=>400], 400);
- }
- }
-
- public function select(Request $request){
- $search = $request->query('search');
- if($search && !empty($search)){
- $data = ProjectRole::where("name", 'like', '%'.$search.'%')->get();
- }else{
- $data = ProjectRole::all();
- }
-
- return response()->json($data);
- }
-}
+validate($request, [
+ 'name' => 'required',
+ 'description' => 'required',
+ 'company_id' => 'required'
+ ]);
+
+ $data = $request->all();
+
+ $data['created_by'] = $this->currentName;
+
+ $result = ProjectRole::create($data);
+
+ if($result){
+ return response()->json(['status'=>'success','message'=>'add data project role successfully!','code'=>200], 200);
+ }else{
+ return response()->json(['status'=>'failed','message'=>'add data project role failed!','code'=>400], 400);
+ }
+ }
+
+ public function edit($id){
+ if(!$id || (int) $id < 0 || $id==""){
+ return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
+ die();
+ }
+
+ $result = ProjectRole::find($id);
+
+ if($result){
+ return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200);
+ }else{
+ return response()->json(['status'=>'failed','message'=>'failed get data project role, please try again later!','code'=>400], 400);
+ }
+ }
+
+ public function update(Request $request, $id)
+ {
+ if(!$id || (int) $id < 0 || $id==""){
+ return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
+ }
+
+ $data = ProjectRole::find($id);
+
+ if($data){
+ $result = $data->update($request->all());
+ }else{
+ return response()->json(['status'=>'failed','message'=>'data project role not found!','code'=>400], 400);
+ die();
+ }
+
+
+ if($result){
+ return response()->json(['status'=>'success','message'=>'data project role successfully updated!','code'=>200], 200);
+ }else{
+ return response()->json(['status'=>'failed','message'=>'data project role failed updated!','code'=>400], 400);
+ }
+ }
+
+ public function delete($id)
+ {
+ $data = ProjectRole::find($id);
+
+ if($data){
+ $delete = $data->delete();
+ }else{
+ return response()->json(['status'=>'failed','message'=>'data project role not found!','code'=>400], 400);
+ die();
+ }
+
+
+ if($delete){
+ return response()->json(['status'=>'success','message'=>'data project role successfully deleted!','code'=>200], 200);
+ }else{
+ return response()->json(['status'=>'failed','message'=>'data project role failed deleted!','code'=>400], 400);
+ }
+ }
+
+ public function search(Request $request)
+ {
+ $payload = $request->all();
+ $dataBuilder = $this->setUpPayload($payload, 'm_role_proyek');
+ $builder = $dataBuilder['builder'];
+ $countBuilder = $dataBuilder['count'];
+ $dataGet = $builder->get();
+ $totalRecord = $countBuilder->count();
+ return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200);
+ }
+
+ public function list()
+ {
+ $data = ProjectRole::all();
+ $countData = $data->count();
+
+ if($data){
+ return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200);
+ }else{
+ return response()->json(['status'=>'failed','message'=>'failed get list project role, please try again later!','code'=>400], 400);
+ }
+ }
+
+ public function select(Request $request){
+ $search = $request->query('search');
+ if($search && !empty($search)){
+ $data = ProjectRole::where("name", 'like', '%'.$search.'%')->get();
+ }else{
+ $data = ProjectRole::all();
+ }
+
+ return response()->json($data);
+ }
+}
diff --git a/app/Http/Controllers/ProjectScheduleHealthController.php b/app/Http/Controllers/ProjectScheduleHealthController.php
new file mode 100644
index 0000000..2bae0bd
--- /dev/null
+++ b/app/Http/Controllers/ProjectScheduleHealthController.php
@@ -0,0 +1,93 @@
+validate($request, [
+ 'name' => 'required'
+ ]);
+ $data = $request->all();
+ // Set Unique
+ $result = ProjectScheduleHealth::query()
+ ->where([
+ ['company_id',$data['company_id']],
+ ['name', $data['name']]
+ ])->first();
+ if($result) {
+ return response()->json(['status'=>'failed','message'=>'Name is already exists!','code'=> 500], 500);
+ die;
+ }
+
+ $data['created_by'] = $this->currentName;
+
+ if(!ProjectScheduleHealth::create($data))
+ return response()->json(['status'=>'failed','message'=>'Failed to add data','code'=> 500], 500);
+
+ return response()->json(['status'=>'success','message'=>'data added!','code'=>200], 200);
+ }
+
+ public function edit($id){
+ if(!$id || (int) $id < 0 || $id=="")
+ return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
+
+ if(!$result = ProjectScheduleHealth::find($id))
+ return response()->json(['status'=>'failed','message'=>'Failed to get data!','code'=> 404], 404);
+
+ return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200);
+ }
+
+ public function update(Request $request, $id)
+ {
+ if(!$id || (int) $id < 0 || $id=="")
+ return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
+
+ if(!$data = ProjectScheduleHealth::find($id))
+ return response()->json(['status'=>'failed','message'=>'data schedule health not found!','code'=>400], 400);
+
+ if(!$data->update($request->all()))
+ return response()->json(['status'=>'failed','message'=>'data schedule health failed updated!','code'=>400], 400);
+
+ return response()->json(['status'=>'success','message'=>'Data berhasil disimpan!','code'=>200], 200);
+ }
+
+ public function delete($id)
+ {
+
+ if(!$data = ProjectScheduleHealth::find($id))
+ return response()->json(['status'=>'failed','message'=>'data schedule health not found!','code'=>400], 400);
+
+ if(!$data->delete())
+ return response()->json(['status'=>'failed','message'=>'Data gagal dihapus!','code'=> 500], 500);
+
+ return response()->json(['status'=>'success','message'=>'Data berhasil dihapus!','code'=>200], 200);
+ }
+
+ public function search(Request $request)
+ {
+ $payload = $request->all();
+ $dataBuilder = $this->setUpPayload($payload, 'm_proyek_schedule_health');
+ $builder = $dataBuilder['builder'];
+ $countBuilder = $dataBuilder['count'];
+ $dataGet = $builder->get();
+ $totalRecord = $countBuilder->count();
+ return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200);
+ }
+
+ public function list()
+ {
+ $data = ProjectScheduleHealth::all();
+ $countData = $data->count();
+
+ if(!$data)
+ return response()->json(['status'=>'failed','message'=>'failed get list schedule health, please try again later!','code'=>400], 400);
+
+ return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200);
+
+ }
+}
diff --git a/app/Http/Controllers/RefferalCodeController.php b/app/Http/Controllers/RefferalCodeController.php
new file mode 100644
index 0000000..1e89fb4
--- /dev/null
+++ b/app/Http/Controllers/RefferalCodeController.php
@@ -0,0 +1,81 @@
+validate($request, [
+ 'code' => 'required|unique:refferal_code,code',
+ 'exp' => 'nullable',
+ 'type' => 'nullable',
+ 'allocation' => 'nullable'
+ ]);
+
+ $data = $request->all();
+
+ $data['created_by'] = $this->currentName;
+
+ $result = RefferalCode::create($data);
+
+ if($result){
+ return response()->json(['status'=>'success', 'data'=> $result, 'message'=>'Add refferal code successfully!','code'=>200], 200);
+ }else{
+ return response()->json(['status'=>'failed','message'=>'Add refferal Code failed!','code'=>400], 400);
+ }
+ }
+
+ public function edit($id)
+ {
+ if (!$id || (int) $id < 0 || $id == "") {
+ return response()->json(['status' => 'failed', 'message' => 'Id is required!', 'code' => 400], 400);
+ die();
+ }
+
+ $result = RefferalCode::find($id);
+
+ if ($result) {
+ return response()->json(['status' => 'success', 'code' => 200, 'data' => $result], 200);
+ } else {
+ return response()->json(['status' => 'failed', 'message' => 'Failed get refferal code, please try again later!', 'code' => 400], 400);
+ }
+ }
+
+ public function update(Request $request, $id)
+ {
+ if(!$id || (int) $id < 0 || $id==""){
+ return response()->json(['status'=>'failed','message'=>'Id is required!','code'=>400], 400);
+ }
+
+ $data = RefferalCode::find($id);
+
+ if($data){
+ $result = $data->update($request->all());
+ }else{
+ return response()->json(['status'=>'failed','message'=>'Refferal code not found!','code'=>400], 400);
+ die();
+ }
+
+
+ if($result){
+ return response()->json(['status'=>'success','message'=>'Refferal code successfully updated!','code'=>200], 200);
+ }else{
+ return response()->json(['status'=>'failed','message'=>'Refferal code failed updated!','code'=>400], 400);
+ }
+ }
+
+ public function search(Request $request)
+ {
+ $payload = $request->all();
+ $dataBuilder = $this->setUpPayload($payload, 'refferal_code');
+ $builder = $dataBuilder['builder'];
+ $countBuilder = $dataBuilder['count'];
+ $dataGet = $builder->get();
+ $totalRecord = $countBuilder->count();
+ return response()->json(['status' => 'success', 'code' => 200, 'data' => $dataGet, 'totalRecord' => $totalRecord], 200);
+ }
+}
diff --git a/app/Http/Controllers/ReportActivityController.php b/app/Http/Controllers/ReportActivityController.php
index 94a8d89..4607f5c 100644
--- a/app/Http/Controllers/ReportActivityController.php
+++ b/app/Http/Controllers/ReportActivityController.php
@@ -6,7 +6,7 @@ use Illuminate\Http\Request;
use App\Models\ReportActivity;
use App\Models\Activity;
use App\Models\Image;
-use Datatables;
+use Yajra\Datatables\Datatables;
class ReportActivityController extends Controller
{
diff --git a/app/Http/Controllers/ReportActivityMaterialController.php b/app/Http/Controllers/ReportActivityMaterialController.php
index e451129..403fdbd 100644
--- a/app/Http/Controllers/ReportActivityMaterialController.php
+++ b/app/Http/Controllers/ReportActivityMaterialController.php
@@ -4,10 +4,13 @@ namespace App\Http\Controllers;
use App\Helpers\MasterFunctionsHelper;
use Illuminate\Http\Request;
+use Illuminate\Support\Facades\DB;
use App\Models\ReportActivityMaterial;
use App\Models\Activity;
use App\Models\AssignMaterial;
-use Datatables;
+use App\Models\Company;
+use App\Models\Image;
+use Yajra\Datatables\Datatables;
use DateTime;
class ReportActivityMaterialController extends Controller
@@ -64,10 +67,18 @@ class ReportActivityMaterialController extends Controller
} else {
$sumAssignMaterial = AssignMaterial::where('activity_id', $request->activity_id)->sum('qty_planning');
$sumReportActivityMaterial = ReportActivityMaterial::where('activity_id', $request->activity_id)->sum('qty');
+ // if actual >= plan
+ if ($sumReportActivityMaterial >= $sumAssignMaterial){
+ $persentaseProgress = 95;
+ }else{
+ // actual < plan
+ $persentaseProgress = $sumReportActivityMaterial/$sumAssignMaterial*100;
+ }
+
$dataUpdate = array(
"actual_start" => null,
"actual_end" => null,
- "persentase_progress" => $sumReportActivityMaterial/$sumAssignMaterial*100,
+ "persentase_progress" => $persentaseProgress,
"updated_by" => $this->currentName
);
if ($sumReportActivityMaterial > 0) {
@@ -91,10 +102,19 @@ class ReportActivityMaterialController extends Controller
}
}
- public function delete($id)
+ public function delete($id, $company_id)
{
- if(!ReportActivityMaterial::findOrFail($id)->delete())
+ $data = ReportActivityMaterial::findOrFail($id);
+ $company = Company::find($company_id);
+ $image = Image::where([['ref_id', $id],['category','report_activity']])->first();
+
+ if($data && $company && $image) {
+ $destinationPath = $this->setCustomeDirectoryUpload($company['company_name']);
+ unlink($destinationPath['pathImage'].$image['image']);
+ }
+ if(!$data->delete()) {
return response()->json(['status'=>'failed','message'=>'Failed to deleted the data!','code'=> 500], 500);
+ }
return response()->json(['status'=>'success','message'=> 'Data deleted!','code'=>200], 200);
}
@@ -124,8 +144,10 @@ class ReportActivityMaterialController extends Controller
public function datatables(Request $request){
$id_activity = $request->query('idAct');
+ $id_am = $request->query('idAmi');
$type = $request->query('type');
$materialName = $request->query('materialName');
+ $materialId = $request->query('materialId');
if($type == 'plan'){
$activity = Activity::findOrFail($id_activity);
$baselineDuration = 0;
@@ -135,6 +157,7 @@ class ReportActivityMaterialController extends Controller
$data = AssignMaterial::select("assign_material_to_activity.*","m.description as material_name", "m.uom as uom")
->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id")
->where('assign_material_to_activity.activity_id', $id_activity)
+ ->where('assign_material_to_activity.id', $id_am)
->where('m.description', $materialName)
->orderBy('assign_material_to_activity.id', 'asc')
->get();
diff --git a/app/Http/Controllers/RoleController.php b/app/Http/Controllers/RoleController.php
index 57b8c58..371ba5c 100644
--- a/app/Http/Controllers/RoleController.php
+++ b/app/Http/Controllers/RoleController.php
@@ -11,76 +11,78 @@ class RoleController extends Controller
public function add(Request $request)
{
$this->validate($request, [
- 'name' => 'string|required|unique:m_roles,name',
- 'description' => 'required'
+ 'name' => 'string|required|unique:m_roles,name,NULL,id,company_id,' . $request->input('company_id'),
+ 'description' => 'required',
+ 'company_id' => 'required'
]);
$data = $request->all();
$data['created_by'] = $this->currentName;
- if (!isset($data['default_page'])) {
- $data['default_page'] = 29; // dashboard
- }
+ if (!isset($data['default_page'])) {
+ $data['default_page'] = 29; // dashboard
+ }
$result = Role::create($data);
- if(!$result)
- return response()->json(['status'=>'failed','message'=>'Failed to add data!','code'=>500], 500);
+ if (!$result)
+ return response()->json(['status' => 'failed', 'message' => 'Failed to add data!', 'code' => 500], 500);
- return response()->json(['status'=>'success','message'=>'Data added!','code'=>200], 200);
+ return response()->json(['status' => 'success', 'data' => $result, 'message' => 'Data added!', 'code' => 200], 200);
}
- public function edit( $id){
- if(empty($id) || !is_int((int)$id))
- return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
+ public function edit($id)
+ {
+ if (empty($id) || !is_int((int)$id))
+ return response()->json(['status' => 'failed', 'message' => 'id is required!', 'code' => 400], 400);
$result = Role::find($id);
- if(!$result)
- return response()->json(['status'=>'failed','message'=>'Data not found!','code'=>404], 404);
+ if (!$result)
+ return response()->json(['status' => 'failed', 'message' => 'Data not found!', 'code' => 404], 404);
- return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200);
+ return response()->json(['status' => 'success', 'code' => 200, 'data' => $result], 200);
}
public function update(Request $request, $id)
{
- if(empty($id) || !is_int((int)$id))
- return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
+ if (empty($id) || !is_int((int)$id))
+ return response()->json(['status' => 'failed', 'message' => 'id is required!', 'code' => 400], 400);
- $this->validate($request, [
- 'name' => 'string|required',
- 'description' => 'required'
+ $this->validate($request, [
+ 'name' => 'string|required',
+ 'description' => 'required'
]);
$data = Role::find($id);
- $request->name !== $data['name'] ? $this->validate($request,['name'=>'unique:m_roles,name']) : '';
+ $request->name !== $data['name'] ? $this->validate($request, ['name' => 'unique:m_roles,name']) : '';
- if(!$data)
- return response()->json(['status'=>'failed','message'=>'Data not found!','code'=>404], 404);
+ if (!$data)
+ return response()->json(['status' => 'failed', 'message' => 'Data not found!', 'code' => 404], 404);
$result = $data->update($request->all());
- if(!$result)
- return response()->json(['status'=>'failed','message'=>'Failed to update the data!','code'=>500], 500);
+ if (!$result)
+ return response()->json(['status' => 'failed', 'message' => 'Failed to update the data!', 'code' => 500], 500);
- return response()->json(['status'=>'success','message'=>'Data updated!','code'=>200], 200);
+ return response()->json(['status' => 'success', 'message' => 'Data updated!', 'code' => 200], 200);
}
public function delete($id)
{
- if(empty($id) || !is_int((int)$id))
- return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
+ if (empty($id) || !is_int((int)$id))
+ return response()->json(['status' => 'failed', 'message' => 'id is required!', 'code' => 400], 400);
$data = Role::find($id);
- if(!$data)
- return response()->json(['status'=>'failed','message'=>'Data not found!','code'=>404], 404);
+ if (!$data)
+ return response()->json(['status' => 'failed', 'message' => 'Data not found!', 'code' => 404], 404);
$delete = $data->delete();
- if(!$delete)
- return response()->json(['status'=>'failed','message'=>'Failed to delete!','code'=>500], 500);
+ if (!$delete)
+ return response()->json(['status' => 'failed', 'message' => 'Failed to delete!', 'code' => 500], 500);
- return response()->json(['status'=>'success','message'=>'Data deleted!','code'=>200], 200);
+ return response()->json(['status' => 'success', 'message' => 'Data deleted!', 'code' => 200], 200);
}
public function search(Request $request)
@@ -93,7 +95,7 @@ class RoleController extends Controller
$dataGet = $builder->get();
$totalRecord = $countBuilder->count();
- return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200);
+ return response()->json(['status' => 'success', 'code' => 200, 'data' => $dataGet, 'totalRecord' => $totalRecord], 200);
}
public function list()
@@ -101,9 +103,9 @@ class RoleController extends Controller
$data = Role::all();
$countData = $data->count();
- if(!$data)
- return response()->json(['status'=>'failed','message'=>'failed get list role, please try again later!','code'=>400], 400);
+ if (!$data)
+ return response()->json(['status' => 'failed', 'message' => 'failed get list role, please try again later!', 'code' => 400], 400);
- return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200);
+ return response()->json(['status' => 'success', 'code' => 200, 'data' => $data, 'totalRecord' => $countData], 200);
}
}
diff --git a/app/Http/Controllers/RoleMenuController.php b/app/Http/Controllers/RoleMenuController.php
index ebd5d0a..e8073d9 100644
--- a/app/Http/Controllers/RoleMenuController.php
+++ b/app/Http/Controllers/RoleMenuController.php
@@ -5,29 +5,64 @@ namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Menu;
use App\Models\RoleMenu;
+use Illuminate\Support\Facades\Log;
class RoleMenuController extends Controller
{
public function add(Request $request)
{
$this->validate($request, [
- 'role_id' => 'required',
- 'menu_id' => 'required',
+ 'role_id.*' => 'required',
+ 'menu_id.*' => 'required'
]);
$data = $request->all();
- $data['created_by'] = $this->currentName;
-
- $result = RoleMenu::create($data);
-
- if($result){
+ $countData = 0;
+ foreach($data as $arrData) {
+ $arrData['created_by'] = $this->currentName;
+ $result = RoleMenu::create($arrData);
+ $countData++;
+ }
+ if($result && $countData > 0) {
return response()->json(['status'=>'success','message'=>'add data role menu successfully!','code'=>200], 200);
- }else{
+ } else {
return response()->json(['status'=>'failed','message'=>'add data role menu failed!','code'=>400], 400);
}
}
+ public function addMultiple(Request $request)
+ {
+ $menus = $request->all();
+
+ if (is_array($menus) && count($menus) > 0 && isset($menus)) {
+ $countRes = 0;
+ foreach ($menus as $menu) {
+
+ $dataInsert = array(
+ "menu_id" => $menu['menu_id'],
+ "role_id" => $menu['role_id'],
+ );
+
+ $result = RoleMenu::create($dataInsert);
+
+ if ($result) {
+ $countRes++;
+ } else {
+ $countRes--;
+ }
+ }
+
+ if ($countRes > 0) {
+ return response()->json(['status' => 'success', 'message' => 'Add data menu role successfully!', 'code' => 200]);
+ } else {
+ return response()->json(['status' => 'failed', 'message' => 'Add data menu role failed created!', 'code' => 500]);
+ }
+ } else {
+ return response()->json(['status' => 'failed', 'message' => 'Add data menu role failed created!', 'code' => 500]);
+ }
+ }
+
public function update(Request $request, $id)
{
if(!$id || (int) $id < 0 || $id==""){
diff --git a/app/Http/Controllers/UserRegisterController.php b/app/Http/Controllers/UserRegisterController.php
new file mode 100644
index 0000000..8b61abb
--- /dev/null
+++ b/app/Http/Controllers/UserRegisterController.php
@@ -0,0 +1,344 @@
+validate($request, [
+ 'cluster' => 'required|string',
+ 'address' => 'required|string',
+ 'email' => 'required|string',
+ 'type_paket' => ($request->type_account === 'Personal' ? 'required' : 'nullable') . '|in:Basic,Free',
+ 'phone_no' => 'required',
+ 'type_account' => 'string|in:Personal,Company',
+ 'company_name' => 'required|string',
+ 'username' => 'required|string'
+ ]);
+ try {
+ $data = $request->all();
+
+ $company_name = $data['company_name'];
+ $type_account = $data['type_account'];
+ $refferal = $request->refferal ? $data['refferal'] : null;
+ $cluster = $data['cluster'];
+ $address = $data['address'];
+ $phone_no = $data['phone_no'];
+ $email = $data['email'];
+ $username = $data['username'];
+ $type_paket = $data['type_paket'];
+ $company_address = $request->type_account === 'Company' ? $data['companyAddress'] : '';
+ $full_name = $request->type_account === 'Personal' ? $data['full_name'] : '';
+
+ // check email & username already exist
+ $emailExists = Company::where('email', $email)->exists() || User::where('email', $email)->exists();
+ if ($emailExists) {
+ return response()->json(['status' => 'failed', 'message' => 'Email already exists, please check again!', 'code' => 500], 500);
+ }
+ $usernameExists = User::where('username', $username)->exists();
+ if ($usernameExists) {
+ return response()->json(['status' => 'failed', 'message' => 'Username already exists, please check again!', 'code' => 500], 500);
+ }
+
+ // Get last registration number
+ $getCompany = $this->getCompany();
+
+ $formDataCompany = array(
+ 'company_name' => $company_name,
+ 'newRegistrationNumber' => $getCompany['newRegistrationNumber'],
+ 'cluster' => $cluster,
+ 'phone_no' => $phone_no,
+ 'email' => $email,
+ 'address' => $address,
+ 'type_account' => $type_account,
+ 'username' => $username,
+ 'type_paket' => $type_paket,
+ 'companyAddress' => $company_address,
+ 'full_name' => $full_name
+ );
+
+ if(empty($refferal)) {
+ $addCompany = $this->addCompany($formDataCompany, null);
+ } else {
+ $getRefferal = $this->getRefferalCode($refferal);
+ if(empty($getRefferal)) {
+ return response()->json(['status' => 'failed', 'message' => 'Refferal code not found!', 'code' => 404], 404);
+ }
+ $addCompany = $this->addCompany($formDataCompany, (int)$getRefferal['id']);
+ }
+
+ if(empty($addCompany)) {
+ return;
+ }
+
+ $addRole = $this->addRole((int)$addCompany['id']);
+ if(empty($addRole)) {
+ return;
+ }
+
+ $addHR = $this->addHR((int)$addCompany['id'], (int)$addRole['id'], $formDataCompany);
+ if(empty($addHR)) {
+ return;
+ }
+
+ $getMenu = $this->getMenu();
+ if(empty($getMenu)) {
+ return;
+ }
+ $this->addTransaction((int)$addCompany['id'], $formDataCompany);
+
+ $addMenuCompany = $this->addMenuCompany($getMenu, (int)$addCompany['id']);
+ if(empty($addMenuCompany)) {
+ return;
+ }
+ $addMenuRole = $this->addMenuRole($getMenu, (int)$addRole['id']);
+ if(empty($addMenuRole)) {
+ return;
+ }
+ DB::commit();
+ return response()->json(['status' => 'success', 'message' => 'Register is successful, please check your email!', 'generateRandom' => $addHR['generateRandom'], 'code' => 200], 200);
+ } catch (\Throwable $th) {
+ DB::rollBack();
+ Log::channel('daily')->error($th->getMessage());
+ return response()->json(['status' => 'failed', 'message' => 'Failed to register, please check again!', 'code' => 500], 500);
+ }
+ }
+
+ protected function getRefferalCode($refferal)
+ {
+ $result = RefferalCode::query()
+ ->select('id','code','amount','exp','type','allocation','description')
+ ->where('code', $refferal)
+ ->first();
+ return $result;
+ }
+
+ protected function addCompany($formData, $id_refferal)
+ {
+ $formData = array(
+ 'company_name' => $formData['company_name'],
+ 'registration_no' => $formData['newRegistrationNumber'],
+ 'cluster' => $formData['cluster'],
+ 'date_register' => Carbon::now(),
+ 'template_id' => 1,
+ 'email' => $formData['email'],
+ 'address' => $formData['type_account'] === 'Company' ? $formData['companyAddress'] : $formData['address'],
+ 'phone_no' => $formData['phone_no'],
+ 'type_account' => $formData['type_account'],
+ 'is_active' => true,
+ 'discount_id' => $id_refferal === null ? null : $id_refferal
+ );
+ $result = Company::create($formData);
+ return $result;
+ }
+
+ protected function addRole($id_company)
+ {
+ $formData = [
+ 'name' => 'Admin',
+ 'company_id' => $id_company,
+ 'description' => '-'
+ ];
+ $result = Role::create($formData);
+ return $result;
+ }
+
+ protected function addHR($id_company, $id_role, $data)
+ {
+ $generateRandom = Str::random(8);
+ $formData = array(
+ 'name'=> $data['type_account'] === 'Company' ? $data['username'] : $data['full_name'],
+ 'phone_number'=> $data['phone_no'],
+ 'email'=> $data['email'],
+ 'username' => $data['username'],
+ 'password'=> md5($generateRandom),
+ 'role_id'=> $id_role,
+ 'ktp_number'=> $data['type_account'] === 'Company' ? 'CP-'. $generateRandom : 'PR-' . $generateRandom,
+ 'employee_type'=> 'employee',
+ 'address' => $data['address'],
+ 'status_resource'=> 'active',
+ 'company_id'=> $id_company
+ );
+ $result = HumanResource::create($formData);
+ if(!empty($result)) {
+ $this->sendEmail($data['email'], $generateRandom);
+ }
+ return [
+ 'result' => $result,
+ 'generateRandom' => $generateRandom
+ ];
+ }
+
+ protected function addMenuCompany($baseDataMenu, $id_company)
+ {
+ $data = MenuCompany::where('company_id', $id_company);
+ if($data->exists()){
+ $data->delete();
+ }
+ if (is_object($baseDataMenu) && count($baseDataMenu) > 0 && isset($baseDataMenu)) {
+ $countRes = 0;
+ foreach ($baseDataMenu as $menu) {
+ $dataInsert = array(
+ "menu_id" => $menu['id'],
+ "parent_menu_id" => $menu['parent_id'],
+ "company_id" => $id_company,
+ "icon" => $menu['icon'],
+ "alias_name" => $menu['alias_name'],
+ "url" => $menu['url'],
+ "sequence" => $menu['sequence'],
+ "created_by" => $this->currentName
+ );
+ $result = MenuCompany::create($dataInsert);
+ if ($result) {
+ $countRes++;
+ } else {
+ $countRes--;
+ }
+ }
+ if ($countRes > 0) {
+ return $result;
+ } else {
+ die();
+ }
+ } else {
+ die();
+ }
+ }
+
+ protected function addMenuRole($baseDataMenu, $id_role)
+ {
+ if (is_object($baseDataMenu) && count($baseDataMenu) > 0 && isset($baseDataMenu)) {
+ $countRes = 0;
+ foreach ($baseDataMenu as $menu) {
+ $dataInsert = array(
+ "menu_id" => $menu['id'],
+ "role_id" => $id_role,
+ );
+ $result = RoleMenu::create($dataInsert);
+ if ($result) {
+ $countRes++;
+ } else {
+ $countRes--;
+ }
+ }
+ if ($countRes > 0) {
+ return $result;
+ } else {
+ die();
+ }
+ } else {
+ die();
+ }
+ }
+
+ protected function addTransaction($id_company, $data)
+ {
+ $currentDate = Carbon::now();
+ $finalDate = $currentDate->copy()->addDays(30);
+ if(is_array($data)) {
+ $formData = array(
+ 'company_id' => $id_company,
+ 'type_paket' => $data['type_paket'],
+ 'exp_ospro' => $finalDate,
+ 'amount' => $data['type_paket'] === 'Free' ? 0 : 250000
+ );
+ $result = ProductTransaction::create($formData);
+ return $result;
+ }
+ }
+
+ protected function getMenu()
+ {
+ $result = Menu::query()
+ ->select("id", "name", "parent_id", "alias_name", "icon", "url", "sequence")
+ ->whereNotIn('alias_name', ['Dashboard Customer', 'Registration Management', 'Demo Management'])
+ ->get();
+ return $result;
+ }
+
+ protected function getCompany()
+ {
+ $newRegistrationNumber = '';
+ $company = Company::query()
+ ->select('id','type_account','registration_no','discount_id')
+ ->orderByDesc('id')
+ ->first();
+
+ if(!empty($company)) {
+ $lastRegistrationNumber = $company['registration_no'];
+ $lastNumber = (int)preg_replace('/\D/', '', $lastRegistrationNumber);
+ $newNumber = $lastNumber + 1;
+ $newRegistrationNumber = 'RG-'. $newNumber;
+ } else{
+ return false;
+ }
+ return [
+ 'newRegistrationNumber' => $newRegistrationNumber
+ ];
+ }
+
+ public function sendEmail($email, $password)
+ {
+ $user = User::select('email', 'name', 'username')->where('email', $email)->first();
+ if (!$user) {
+ return response()->json(['status' => 'error', 'message' => 'e-mail not found '], 400);
+ } else {
+ $this->reqHttpCurl($email, $password, $user->username, $user->name);
+ return response()->json(['status' => 'error', 'code'=>400, 'message' => 'e-mail not found '], 400);
+ }
+ }
+
+ private function reqHttpCurl($email, $password, $username, $name)
+ {
+ $postData = [
+ "to" => $email,
+ "name" => $name,
+ "username" => $username,
+ "password" => $password,
+ "from" => "app.integrasia@integrasiautama.com",
+ "alias_from" => "OSPRO",
+ "subject" => "Registration OSPRO",
+ "body" => "registration-ospro"
+ ];
+
+ $curl = curl_init();
+
+ curl_setopt_array($curl, array(
+ CURLOPT_URL => URL_EMAIL,
+ CURLOPT_RETURNTRANSFER => true,
+ CURLOPT_ENCODING => "",
+ CURLOPT_MAXREDIRS => 10,
+ CURLOPT_TIMEOUT => 30000,
+ CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
+ CURLOPT_CUSTOMREQUEST => "POST",
+ CURLOPT_POSTFIELDS => json_encode($postData),
+ CURLOPT_HTTPHEADER => array(
+ // Set here requred headers
+ "accept: */*",
+ "accept-language: en-US,en;q=0.8",
+ "content-type: application/json",
+ ),
+ ));
+
+ $response = curl_exec($curl);
+ $err = curl_error($curl);
+
+ curl_close($curl);
+
+ if ($err) {
+ echo "cURL Error #:" . $err;
+ } else {
+ print_r(json_decode($response));
+ }
+
+ }
+}
diff --git a/app/Http/Controllers/UserToActivityController.php b/app/Http/Controllers/UserToActivityController.php
index b387c24..a17fdad 100644
--- a/app/Http/Controllers/UserToActivityController.php
+++ b/app/Http/Controllers/UserToActivityController.php
@@ -7,11 +7,12 @@ use App\Models\UserToActivity;
use App\Models\Activity;
use App\Models\AssignMaterial;
use Illuminate\Support\Facades\DB;
-use Datatables;
+use Yajra\Datatables\Datatables;
class UserToActivityController extends Controller
{
- public function add(Request $request){
+ public function add(Request $request)
+ {
$this->validate($request, [
'activity_id' => 'required',
'user_id' => 'required'
@@ -20,24 +21,25 @@ class UserToActivityController extends Controller
$data = $request->all();
$data['created_by'] = $this->currentName;
- if(!UserToActivity::create($data))
- return response()->json(['status'=>'failed','message'=>'Failed to add data!','code'=> 500]);
+ if (!UserToActivity::create($data))
+ return response()->json(['status' => 'failed', 'message' => 'Failed to add data!', 'code' => 500]);
- return response()->json(['status'=>'success','message'=>'Data added!', 'code'=> 200]);
+ return response()->json(['status' => 'success', 'message' => 'Data added!', 'code' => 200]);
}
- public function addMultiple(Request $request){
+ public function addMultiple(Request $request)
+ {
$users_id = $request->user_id;
- $users_role = $request->role_proyek_id;
+ $users_role = $request->role_proyek_id;
// $data = UserToActivity::where("activity_id", $request->activity_id);
// if($data){
// $data->delete();
// }
- if(is_array($users_id) && count($users_id) > 0){
+ if (is_array($users_id) && count($users_id) > 0) {
$countRes = 0;
- foreach($users_id as $index => $item){
+ foreach ($users_id as $index => $item) {
$dataInsert = array(
"user_id" => $item,
"activity_id" => $request->activity_id,
@@ -45,89 +47,91 @@ class UserToActivityController extends Controller
"proyek_id" => $request->proyek_id,
"start_date" => $request->start_date,
"end_date" => $request->end_date,
- "created_by" => $this->currentName,
- "version_gantt_id" => $request->version_gantt_id
+ "created_by" => $this->currentName,
+ "version_gantt_id" => $request->version_gantt_id
);
$result = UserToActivity::create($dataInsert);
- if($result){
+ if ($result) {
$countRes++;
- }else{
+ } else {
$countRes--;
}
}
- if($countRes == 0)
- return response()->json(['status'=>'failed' ,'message'=>'Failed to add data!','code'=> 500]);
+ if ($countRes == 0)
+ return response()->json(['status' => 'failed', 'message' => 'Failed to add data!', 'code' => 500]);
$allCost = $this->calculateAllCost($request->activity_id, $request->proyek_id);
$dataUpdateCost = array(
- "rencana_biaya"=>$allCost,
- "updated_by"=> $this->currentName
+ "rencana_biaya" => $allCost,
+ "updated_by" => $this->currentName
);
$actUpdate = Activity::find($request->activity_id);
- if($actUpdate){
+ if ($actUpdate) {
$actUpdate->update($dataUpdateCost);
- if($actUpdate->parent_id){
+ if ($actUpdate->parent_id) {
$this->updatedCostPlanning($actUpdate->parent_id);
}
}
- return response()->json(['status'=>'success' ,'message'=>'Data added!','code'=>200]);
- }else{
- return response()->json(['status'=>'success' ,'message'=>'Data added!','code'=>200]);
+ return response()->json(['status' => 'success', 'message' => 'Data added!', 'code' => 200]);
+ } else {
+ return response()->json(['status' => 'success', 'message' => 'Data added!', 'code' => 200]);
}
-
}
- private function updatedCostPlanning($parent_id) {
+ private function updatedCostPlanning($parent_id)
+ {
$sumBiaya = Activity::selectRaw('sum(cast(rencana_biaya as double precision))')
->where("parent_id", $parent_id)
->first();
- if($parent = Activity::find($parent_id)){
+ if ($parent = Activity::find($parent_id)) {
$parent->update([
"rencana_biaya" => $sumBiaya->sum,
]);
}
- }
+ }
- public function update(Request $request, $id){
- if(empty($id) || !is_int((int)$id))
- return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
+ public function update(Request $request, $id)
+ {
+ if (empty($id) || !is_int((int)$id))
+ return response()->json(['status' => 'failed', 'message' => 'id is required!', 'code' => 400], 400);
$data = UserToActivity::find($id);
- if(!$data)
- return response()->json(['status'=>'failed','message'=>'Data not found!','code'=> 404], 404);
+ if (!$data)
+ return response()->json(['status' => 'failed', 'message' => 'Data not found!', 'code' => 404], 404);
- if(!$data->update($request->all()));
- return response()->json(['status'=>'failed','message'=>'Failed to update!','code'=> 500], 500);
+ if (!$data->update($request->all()));
+ return response()->json(['status' => 'failed', 'message' => 'Failed to update!', 'code' => 500], 500);
- return response()->json(['status'=>'success','message'=>'Data updated!','code'=>200], 200);
+ return response()->json(['status' => 'success', 'message' => 'Data updated!', 'code' => 200], 200);
}
public function delete($id)
{
$data = UserToActivity::find($id);
- if(!$data)
- return response()->json(['status'=>'failed','message'=>'data user to activity gantt Project not found!','code'=>400], 400);
+ if (!$data)
+ return response()->json(['status' => 'failed', 'message' => 'data user to activity gantt Project not found!', 'code' => 400], 400);
- if($data->delete()){
- return response()->json(['status'=>'success','message'=>'Data deleted!','code'=>200], 200);
+ if ($data->delete()) {
+ return response()->json(['status' => 'success', 'message' => 'Data deleted!', 'code' => 200], 200);
}
- return response()->json(['status'=>'failed','message'=>'Failed to delete!','code'=> 500], 500);
+ return response()->json(['status' => 'failed', 'message' => 'Failed to delete!', 'code' => 500], 500);
}
- public function edit($id){
- if(!$id || (int) $id < 0 || $id==""){
- return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
+ public function edit($id)
+ {
+ if (!$id || (int) $id < 0 || $id == "") {
+ return response()->json(['status' => 'failed', 'message' => 'id is required!', 'code' => 400], 400);
die();
}
$result = UserToActivity::find($id);
- if(!$result)
- return response()->json(['status'=>'failed','message'=>'failed get data tools resource, please try again later!','code'=>400], 400);
+ if (!$result)
+ return response()->json(['status' => 'failed', 'message' => 'failed get data tools resource, please try again later!', 'code' => 400], 400);
- return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200);
+ return response()->json(['status' => 'success', 'code' => 200, 'data' => $result], 200);
}
public function searchAnalysis(Request $request)
@@ -135,14 +139,22 @@ class UserToActivityController extends Controller
$dataBuilder = $this->setUpPayload($request->all(), 'assign_hr_to_activity');
$builder = $dataBuilder['builder'];
$countBuilder = $dataBuilder['count'];
- $builder->addSelect(DB::raw('SUM(report_activity_material.qty) as volume_actual'));
- $builder->groupBy("m_activity.id");
- $builder->groupBy("selfTable.id");
- $builder->groupBy("selfTable.start_date");
- $builder->groupBy("selfTable.end_date");
- $builder->groupBy("m_users.name");
+ $builder->addSelect(DB::raw('SUM(report_activity_material.qty) as volume_actual'));
+ $builder->groupBy("m_activity.name");
+ $builder->groupBy("m_activity.persentase_progress");
+ $builder->groupBy("m_activity.actual_start");
+ $builder->groupBy("m_activity.actual_end");
+ $builder->groupBy("m_activity.planned_start");
+ $builder->groupBy("m_activity.planned_end");
+ $builder->groupBy("m_activity.start_date");
+ $builder->groupBy("m_activity.end_date");
+ $builder->groupBy("m_activity.duration");
+ $builder->groupBy("selfTable.id");
+ $builder->groupBy("selfTable.start_date");
+ $builder->groupBy("selfTable.end_date");
+ $builder->groupBy("assign_material_to_activity.qty_planning");
$builder->groupBy("assign_material_to_activity.id");
- $builder->groupBy("m_version_gantt.name_version");
+ $builder->groupBy("m_version_gantt.name_version");
$dataGet = $builder->get();
$totalRecord = $countBuilder->count();
return response()->json(['status' => 'success', 'code' => 200, 'data' => $dataGet, 'totalRecord' => $totalRecord], 200);
@@ -158,14 +170,14 @@ class UserToActivityController extends Controller
$dataBuilder = $this->setUpPayload($payload, 'assign_hr_to_activity');
$builder = $dataBuilder['builder'];
- $countBuilder = $dataBuilder['count'];
+ // $countBuilder = $dataBuilder['count'];
if (isset($join_column)) {
$startDate = $join_column['start_date'];
$endDate = $join_column['end_date'];
$status = $join_column['status'];
$startDate = date("Y-m-d H:i:sO", strtotime($startDate));
$endDate = date("Y-m-d H:i:sO", strtotime($endDate));
- $builder->where(function ($query) use ($startDate, $endDate) {
+ $builder->where(function ($query) use ($startDate, $endDate) {
$query
->where('m_proyek.mulai_proyek', '>=', $startDate)
->where('m_proyek.akhir_proyek', '<=', $endDate)
@@ -187,8 +199,46 @@ class UserToActivityController extends Controller
}
$dataGet = $filteredData;
}
- $totalRecord = $countBuilder->count();
- return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200);
+ // $totalRecord = $countBuilder->count();
+ return response()->json(['status' => 'success', 'code' => 200, 'data' => $dataGet, 'totalRecord' => count($dataGet)], 200);
+ }
+
+ public function activityUser(Request $request)
+ {
+ $payload = $request->all();
+ $activity = DB::table('m_activity as ma')
+ ->select(
+ 'ahta.id',
+ 'ma.id as activity_id',
+ 'ma.proyek_id',
+ 'ma.name as join_second_name',
+ 'ma.start_date as join_second_start_date',
+ 'ma.end_date as join_second_end_date',
+ 'ma.persentase_progress',
+ 'mvg.name_version',
+ 'mp.nama as nama_proyek',
+ 'mp.type_proyek_id'
+ )
+ ->join('assign_hr_to_activity as ahta', 'ahta.activity_id', '=', 'ma.id')
+ ->join('m_version_gantt as mvg', 'mvg.id', '=', 'ma.version_gantt_id')
+ ->join('m_proyek as mp', 'mp.id', '=', 'ma.proyek_id')
+ ->where('ahta.user_id', $payload['user_id'])
+ ->where('ma.start_date', '<=', $payload['end_date'])
+ ->where('ma.end_date', '>=', $payload['start_date'])
+ ->where('ma.proyek_id', $payload['proyek_id'])
+ ->get();
+
+ if ($payload['status'] != "") {
+ $filteredData = [];
+ foreach ($activity as $value) {
+ $assignMaterial = AssignMaterial::where('activity_id', $value->activity_id)->first();
+ if ($assignMaterial->status_activity == $payload['status']) {
+ $filteredData[] = $value;
+ }
+ }
+ $activity = $filteredData;
+ }
+ return response()->json(['status' => 'success', 'code' => 200, 'data' => $activity, 'totalRecord' => count($activity)], 200);
}
public function list()
@@ -196,46 +246,47 @@ class UserToActivityController extends Controller
$data = UserToActivity::all();
$countData = $data->count();
- if($data){
- return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200);
- }else{
- return response()->json(['status'=>'failed','message'=>'failed get list user to activity gantt, please try again later!','code'=>400], 400);
+ if ($data) {
+ return response()->json(['status' => 'success', 'code' => 200, 'data' => $data, 'totalRecord' => $countData], 200);
+ } else {
+ return response()->json(['status' => 'failed', 'message' => 'failed get list user to activity gantt, please try again later!', 'code' => 400], 400);
}
- }
+ }
- public function listFiltered(Request $request)
+ public function listFiltered(Request $request)
{
- $startDate = $request->start_date;
- $endDate = $request->end_date;
- $userId = $request->user_id;
- $proyekId = $request->proyek_id;
-
- if (isset($proyekId)) {
- $data = UserToActivity::select('assign_hr_to_activity.id', 'assign_hr_to_activity.activity_id', 'm_activity.name', 'm_activity.kode_sortname', 'm_activity.start_date', 'm_activity.end_date')
- ->join('m_activity', 'assign_hr_to_activity.activity_id', '=', 'm_activity.id')
- ->where('m_activity.start_date', '=', $startDate)
- ->where('m_activity.end_date', '=', $endDate)
- ->where('assign_hr_to_activity.user_id', '=', $userId)
- ->where('assign_hr_to_activity.proyek_id', '=', $proyekId)
- ->get();
- }else {
- $data = UserToActivity::select('assign_hr_to_activity.id', 'assign_hr_to_activity.activity_id', 'm_activity.name', 'm_activity.kode_sortname', 'm_activity.start_date', 'm_activity.end_date')
- ->join('m_activity', 'assign_hr_to_activity.activity_id', '=', 'm_activity.id')
- ->where('m_activity.start_date', '=', $startDate)
- ->where('m_activity.end_date', '=', $endDate)
- ->where('assign_hr_to_activity.user_id', '=', $userId)
- ->get();
- }
- $countData = $data->count();
-
- if($data){
- return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200);
- }else{
- return response()->json(['status'=>'failed','message'=>'failed get list user to activity gantt, please try again later!','code'=>400], 400);
+ $startDate = $request->start_date;
+ $endDate = $request->end_date;
+ $userId = $request->user_id;
+ $proyekId = $request->proyek_id;
+
+ if (isset($proyekId)) {
+ $data = UserToActivity::select('assign_hr_to_activity.id', 'assign_hr_to_activity.activity_id', 'm_activity.name', 'm_activity.kode_sortname', 'm_activity.start_date', 'm_activity.end_date')
+ ->join('m_activity', 'assign_hr_to_activity.activity_id', '=', 'm_activity.id')
+ ->where('m_activity.start_date', '=', $startDate)
+ ->where('m_activity.end_date', '=', $endDate)
+ ->where('assign_hr_to_activity.user_id', '=', $userId)
+ ->where('assign_hr_to_activity.proyek_id', '=', $proyekId)
+ ->get();
+ } else {
+ $data = UserToActivity::select('assign_hr_to_activity.id', 'assign_hr_to_activity.activity_id', 'm_activity.name', 'm_activity.kode_sortname', 'm_activity.start_date', 'm_activity.end_date')
+ ->join('m_activity', 'assign_hr_to_activity.activity_id', '=', 'm_activity.id')
+ ->where('m_activity.start_date', '=', $startDate)
+ ->where('m_activity.end_date', '=', $endDate)
+ ->where('assign_hr_to_activity.user_id', '=', $userId)
+ ->get();
+ }
+ $countData = $data->count();
+
+ if ($data) {
+ return response()->json(['status' => 'success', 'code' => 200, 'data' => $data, 'totalRecord' => $countData], 200);
+ } else {
+ return response()->json(['status' => 'failed', 'message' => 'failed get list user to activity gantt, please try again later!', 'code' => 400], 400);
}
}
- public function datatables(Request $request){
+ public function datatables(Request $request)
+ {
$id_activity = $request->query('idact');
$data = UserToActivity::select("assign_hr_to_activity.id as id", "assign_hr_to_activity.start_date", "assign_hr_to_activity.end_date", "u.name as user_name", "mrp.name as role_name")
->join("m_role_proyek as mrp", "mrp.id", "=", "assign_hr_to_activity.role_proyek_id")
@@ -244,8 +295,8 @@ class UserToActivityController extends Controller
->get();
return Datatables::of($data)
->addIndexColumn()
- ->addColumn('action', function($row){
- $actionBtn = '';
+ ->addColumn('action', function ($row) {
+ $actionBtn = '';
return $actionBtn;
})
->rawColumns(['action'])->make(true);
diff --git a/app/Http/Controllers/UserToProyekController.php b/app/Http/Controllers/UserToProyekController.php
index 5e66395..eaadc28 100644
--- a/app/Http/Controllers/UserToProyekController.php
+++ b/app/Http/Controllers/UserToProyekController.php
@@ -2,11 +2,12 @@
namespace App\Http\Controllers;
-use Illuminate\Http\Request;
+use App\Models\Image;
+use App\Models\Company;
use App\Models\UserToProyek;
-use App\Models\UserToActivity;
+use Illuminate\Http\Request;
use App\Models\ReportActivity;
-use App\Models\Image;
+use App\Models\UserToActivity;
class UserToProyekController extends Controller
{
@@ -51,7 +52,8 @@ class UserToProyekController extends Controller
"user_id" => $item,
"proyek_id" => $request->proyek_id,
"created_by" => $this->currentName,
- 'is_customer' => true
+ 'is_customer' => true,
+ 'project_role' => $request->project_role
);
$result = UserToProyek::create($dataInsert);
@@ -65,10 +67,10 @@ class UserToProyekController extends Controller
if ($countRes > 0) {
return response()->json(['status' => 'success', 'message' => 'Project customer successfull created', 'code' => 200]);
} else {
- return response()->json(['status' => 'success', 'message' => 'Project customer failed created', 'code' => 400]);
+ return response()->json(['status' => 'failed', 'message' => 'Project customer failed created', 'code' => 400]);
}
} else {
- return response()->json(['status' => 'success', 'message' => 'Project customer successfull created', 'code' => 200]);
+ return response()->json(['status' => 'failed', 'message' => 'Project customer failed created', 'code' => 200]);
}
}
@@ -111,7 +113,7 @@ class UserToProyekController extends Controller
}
}
- public function delete($id)
+ public function delete($id, $company_id)
{
$data = UserToProyek::find($id);
if ($data) {
@@ -119,7 +121,7 @@ class UserToProyekController extends Controller
$proyekId = $data->proyek_id;
$delete = $data->delete();
if ($delete) {
- $this->deleteRelative($proyekId, $userId);
+ $this->deleteRelative($proyekId, $userId, $company_id);
}
} else {
return response()->json(['status' => 'failed', 'message' => 'data assign hr to proyek not found!', 'code' => 400], 400);
@@ -134,21 +136,25 @@ class UserToProyekController extends Controller
}
}
- private function deleteRelative($proyekId, $userId)
+ private function deleteRelative($proyekId, $userId, $company_id)
{
$uta = UserToActivity::where("proyek_id", $proyekId)->where("user_id", $userId)->get();
foreach ($uta as $value) {
$dataRa = ReportActivity::where("activity_id", $value->activity_id)->where("user_id", $value->user_id)->get();
- foreach ($dataRa as $ra) {
- $images = Image::where("ref_id", $ra->id)->where("category", "report_activity")->get();
- foreach ($images as $image) {
- if (file_exists($this->pathImage . $image->image)) {
- unlink($this->pathImage . $image->image);
+ $company = Company::find($company_id);
+ if ($company) {
+ $destinationPath = $this->setCustomeDirectoryUpload($company['company_name']);
+ foreach ($dataRa as $ra) {
+ $images = Image::where("ref_id", $ra->id)->where("category", "report_activity")->get();
+ foreach ($images as $image) {
+ if (file_exists($destinationPath['pathImage'] . $image->image)) {
+ unlink($destinationPath['pathImage'] . $image->image);
+ }
}
+ Image::where("ref_id", $ra->id)->where("category", "report_activity")->delete();
}
- Image::where("ref_id", $ra->id)->where("category", "report_activity")->delete();
+ ReportActivity::where("activity_id", $value->activity_id)->where("user_id", $value->user_id)->delete();
}
- ReportActivity::where("activity_id", $value->activity_id)->where("user_id", $value->user_id)->delete();
}
UserToActivity::where("proyek_id", $proyekId)->where("user_id", $userId)->delete();
}
diff --git a/app/Http/Controllers/VersionGanttController.php b/app/Http/Controllers/VersionGanttController.php
index c5fabab..91984a2 100644
--- a/app/Http/Controllers/VersionGanttController.php
+++ b/app/Http/Controllers/VersionGanttController.php
@@ -14,7 +14,8 @@ use App\Models\ActivityProgressLog;
class VersionGanttController extends Controller
{
- public function add(Request $request){
+ public function add(Request $request)
+ {
$this->validate($request, [
'name_version' => 'required',
'proyek_id' => 'required'
@@ -23,30 +24,31 @@ class VersionGanttController extends Controller
$data['created_by'] = $this->currentName;
$result = VersionGantt::create($data);
- if($result){
- return response()->json(['status'=>'success','message'=>'version gantt Project successfull created','code'=>200]);
- }else{
- return response()->json(['status'=>'failed','message'=>'version gantt Project failed created','code'=>400]);
+ if ($result) {
+ return response()->json(['status' => 'success', 'message' => 'version gantt Project successfull created', 'code' => 200, 'id' => $result->id]);
+ } else {
+ return response()->json(['status' => 'failed', 'message' => 'version gantt Project failed created', 'code' => 400]);
}
}
- public function update(Request $request, $id){
+ public function update(Request $request, $id)
+ {
- if(!$id || (int) $id < 0 || $id==""){
- return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
+ if (!$id || (int) $id < 0 || $id == "") {
+ return response()->json(['status' => 'failed', 'message' => 'id is required!', 'code' => 400], 400);
}
$data = VersionGantt::find($id);
- if($data){
+ if ($data) {
$result = $data->update($request->all());
- }else{
- return response()->json(['status'=>'failed','message'=>'data version gantt Project not found!','code'=>400], 400);
+ } else {
+ return response()->json(['status' => 'failed', 'message' => 'data version gantt Project not found!', 'code' => 400], 400);
die();
}
- if($result){
- return response()->json(['status'=>'success','message'=>'version gantt Project successfully updated!','code'=>200], 200);
- }else{
- return response()->json(['status'=>'failed','message'=>'version gantt Project failed updated!','code'=>400], 400);
+ if ($result) {
+ return response()->json(['status' => 'success', 'message' => 'version gantt Project successfully updated!', 'code' => 200], 200);
+ } else {
+ return response()->json(['status' => 'failed', 'message' => 'version gantt Project failed updated!', 'code' => 400], 400);
}
}
@@ -54,19 +56,19 @@ class VersionGanttController extends Controller
{
$data = VersionGantt::find($id);
- if($data){
+ if ($data) {
$delete = $data->delete();
$this->deleteRelative($data['id']);
- }else{
- return response()->json(['status'=>'failed','message'=>'data version gantt Project not found!','code'=>400], 400);
+ } else {
+ return response()->json(['status' => 'failed', 'message' => 'data version gantt Project not found!', 'code' => 400], 400);
die();
}
- if($delete){
- return response()->json(['status'=>'success','message'=>'version gantt Project successfully deleted!','code'=>200], 200);
- }else{
- return response()->json(['status'=>'failed','message'=>'version gantt Project failed deleted!','code'=>400], 400);
+ if ($delete) {
+ return response()->json(['status' => 'success', 'message' => 'version gantt Project successfully deleted!', 'code' => 200], 200);
+ } else {
+ return response()->json(['status' => 'failed', 'message' => 'version gantt Project failed deleted!', 'code' => 400], 400);
}
}
@@ -81,18 +83,19 @@ class VersionGanttController extends Controller
ActivityProgressLog::where('version_gantt_id', $version_gantt_id)->delete();
}
- public function edit($id){
- if(!$id || (int) $id < 0 || $id==""){
- return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
+ public function edit($id)
+ {
+ if (!$id || (int) $id < 0 || $id == "") {
+ return response()->json(['status' => 'failed', 'message' => 'id is required!', 'code' => 400], 400);
die();
}
$result = VersionGantt::find($id);
- if($result){
- return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200);
- }else{
- return response()->json(['status'=>'failed','message'=>'failed get data version gantt, please try again later!','code'=>400], 400);
+ if ($result) {
+ return response()->json(['status' => 'success', 'code' => 200, 'data' => $result], 200);
+ } else {
+ return response()->json(['status' => 'failed', 'message' => 'failed get data version gantt, please try again later!', 'code' => 400], 400);
}
}
@@ -106,23 +109,22 @@ class VersionGanttController extends Controller
$dataGet = $builder->get();
// $totalRecord = $countBuilder->count();
- return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet], 200);
+ return response()->json(['status' => 'success', 'code' => 200, 'data' => $dataGet], 200);
}
- public function ganttProgress($column, $value){
- $progress = VersionGantt::select('m_version_gantt.id','m_activity.persentase_progress', 'm_activity.bobot_planning')
- ->join('m_activity', 'm_version_gantt.id', '=', 'm_activity.version_gantt_id')
- ->where("m_version_gantt.".$column, $value)
- // ->where('m_activity.type_activity', "project")
- ->where('m_activity.parent_id', null)
- ->get();
- foreach($progress as $item) {
- if($item->persentase_progress){
- $item->progress = $item->persentase_progress;
- $item->bobot = $item->bobot_planning;
- $item->save();
+ public function ganttProgress($column, $value)
+ {
+ $progress = VersionGantt::select('m_version_gantt.id', 'm_activity.persentase_progress', 'm_activity.bobot_planning')
+ ->join('m_activity', 'm_version_gantt.id', '=', 'm_activity.version_gantt_id')
+ ->where("m_version_gantt." . $column, $value)
+ // ->where('m_activity.type_activity', "project")
+ ->where('m_activity.parent_id', null)
+ ->get();
+ foreach ($progress as $item) {
+ $item->progress = $item->persentase_progress;
+ $item->bobot = $item->bobot_planning;
+ $item->save();
}
- }
}
public function list()
@@ -130,10 +132,10 @@ class VersionGanttController extends Controller
$data = VersionGantt::all();
$countData = $data->count();
- if($data){
- return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200);
- }else{
- return response()->json(['status'=>'failed','message'=>'failed get list version gantt, please try again later!','code'=>400], 400);
+ if ($data) {
+ return response()->json(['status' => 'success', 'code' => 200, 'data' => $data, 'totalRecord' => $countData], 200);
+ } else {
+ return response()->json(['status' => 'failed', 'message' => 'failed get list version gantt, please try again later!', 'code' => 400], 400);
}
}
}
diff --git a/app/Models/Absent.php b/app/Models/Absent.php
index c8af929..89aa095 100644
--- a/app/Models/Absent.php
+++ b/app/Models/Absent.php
@@ -12,6 +12,6 @@ class Absent extends Model
const UPDATED_AT = 'updated_at';
protected $fillable = [
- 'user_id', 'description', 'created_at', 'created_by', 'updated_at', 'updated_by'
+ 'user_id', 'description', 'created_at', 'created_by', 'updated_at', 'updated_by', 'company_id'
];
}
diff --git a/app/Models/Activity.php b/app/Models/Activity.php
index 5d9c1e7..b0c04fa 100644
--- a/app/Models/Activity.php
+++ b/app/Models/Activity.php
@@ -33,6 +33,9 @@ class Activity extends Model
'jobs_done', 'assign_hr', 'assign_material', 'assign_tools', 'assign_expense'
];
+ protected $casts = [
+ 'rencana_biaya' => 'double'
+ ];
public function getStartDateAttribute($value)
{
@@ -61,58 +64,60 @@ class Activity extends Model
public static function boot() {
parent::boot();
-
- static::updating(function($data) {
- $data->logPersentaseProgress();
- });
-
- static::updated(function($data) {
- $data->updateBobot();
- $data->updateCostPlanning();
- if($data->bobot_planning){
- $data->updatePersentaseProgress();
- }
- $data->updateCostActual();
- // if($data->start_date != request()->start_date || $data->end_date != request()->end_date) {
- // $data->updateStartEndDateHeader();
- // }
- });
-
- static::deleted(function($data) {
- if (isset($data->parent_id)) {
- if(Activity::where("parent_id", $data->parent_id)->count() == 0) {
- $activity = Activity::find($data->parent_id);
- if ($activity) {
- $activity->update(["type_activity"=>"task"]);
- }
- }
- }
-
- $data->updateBobot(true);
- $data->updateCostPlanning();
- if($data->bobot_planning){
- $data->updatePersentaseProgress();
- }
- $data->updateCostActual();
- $data->updateStartEndDateHeader();
- });
-
+ DB::transaction(function() {
+ static::updating(function($data) {
+ $data->logPersentaseProgress();
+ });
+
+ static::updated(function($data) {
+ $data->updateBobot();
+ $data->updateCostPlanning();
+ if($data->bobot_planning){
+ $data->updatePersentaseProgress();
+ }
+ $data->updateCostActual();
+ // if($data->start_date != request()->start_date || $data->end_date != request()->end_date) {
+ // $data->updateStartEndDateHeader();
+ // }
+ });
+
+ static::deleted(function($data) {
+ if (isset($data->parent_id)) {
+ if(Activity::where("parent_id", $data->parent_id)->count() == 0) {
+ $activity = Activity::find($data->parent_id);
+ if ($activity) {
+ $activity->update(["type_activity"=>"task"]);
+ }
+ }
+ }
+
+ $data->updateBobot(true);
+ $data->updateCostPlanning();
+ if($data->bobot_planning){
+ $data->updatePersentaseProgress();
+ }
+ $data->updateCostActual();
+ $data->updateStartEndDateHeader();
+ });
+ },5);
}
private function updateBobot($isDelete = false)
{
- $root = Activity::where('version_gantt_id', $this->version_gantt_id)
- ->where("proyek_id", $this->proyek_id)
- ->whereNull('parent_id')
+ $root = Activity::where([
+ ['version_gantt_id', $this->version_gantt_id],
+ ['proyek_id', $this->proyek_id]
+ ])
+ ->whereNull('parent_id')
->first();
- if(isset($root) && $root->rencana_biaya > 0){
- $activities = Activity::where("proyek_id", $this->proyek_id)->where("version_gantt_id", $this->version_gantt_id)->get();
+ if(isset($root) && doubleval($root->rencana_biaya) > 0){
+ $activities = Activity::where([['proyek_id', $this->proyek_id],['version_gantt_id', $this->version_gantt_id]])->get();
foreach ($activities as $activity) {
if($isDelete && $activity->id == $this->id)
continue;
- $activity->bobot_planning = ( (int)$activity->rencana_biaya / $root->rencana_biaya) * 100;
+ $activity->bobot_planning = ( doubleval($activity->rencana_biaya) / doubleval($root->rencana_biaya)) * 100;
$activity->updated_by = auth()->user() ? auth()->user()->name : "system";
$activity->saveQuietly();
diff --git a/app/Models/AssignMaterial.php b/app/Models/AssignMaterial.php
index 09620ee..34fb24d 100644
--- a/app/Models/AssignMaterial.php
+++ b/app/Models/AssignMaterial.php
@@ -3,10 +3,8 @@
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
-use App\Models\RequestMaterial;
-use App\Models\Activity;
-use App\Models\ReportActivityMaterial;
-
+use App\Models\{Activity,RequestMaterial,ReportActivityMaterial};
+use Illuminate\Support\Facades\DB;
class AssignMaterial extends Model
{
protected $table = 'assign_material_to_activity';
@@ -23,24 +21,25 @@ class AssignMaterial extends Model
protected $casts = [
'id' => 'integer',
'budget' => 'string',
+ 'qty_planning' => 'float'
];
public static function boot() {
parent::boot();
-
- static::created(function($data) {
- $activity = Activity::find($data->activity_id);
- $material = RequestMaterial::where("id", $data->material_id)->first();
- $activity->rencana_biaya += floatval($material->price) * floatval($data->qty_planning);
- $activity->save();
- });
-
- static::deleted(function($data) {
- $reportActivities = ReportActivityMaterial::where('assign_material_id', $data->id)->delete();
- $activity = Activity::where('id', $data->activity_id)->first();
- $activity->rencana_biaya -= floatval($data->budget) * floatval($data->qty_planning);
- $activity->save();
- });
-
+ DB::transaction(function () {
+ static::created(function($data) {
+ $activity = Activity::find((int)$data->activity_id);
+ $material = RequestMaterial::find((int)$data->material_id);
+ $activity->rencana_biaya += (doubleval($material->price) * doubleval($data->qty_planning));
+ $activity->save();
+ });
+
+ static::deleted(function($data) {
+ ReportActivityMaterial::where('assign_material_id', $data->id)->delete();
+ $activity = Activity::find($data->activity_id);
+ $activity->rencana_biaya -= (doubleval($data->budget) * doubleval($data->qty_planning));
+ $activity->save();
+ });
+ }, 5);
}
}
diff --git a/app/Models/Broadcast.php b/app/Models/Broadcast.php
index bacbdcd..d1c7ed0 100644
--- a/app/Models/Broadcast.php
+++ b/app/Models/Broadcast.php
@@ -12,6 +12,6 @@ class Broadcast extends Model
const UPDATED_AT = 'updated_at';
protected $fillable = [
- 'title_notif', 'message_notif', 'description', 'send_to_type', 'send_to_id', 'status_send', 'created_at', 'created_by', 'updated_at', 'updated_by'
+ 'title_notif', 'message_notif', 'description', 'send_to_type', 'send_to_id', 'status_send', 'created_at', 'created_by', 'updated_at', 'updated_by', 'company_id'
];
}
diff --git a/app/Models/ChecklistK3.php b/app/Models/ChecklistK3.php
index a328fc7..564563f 100644
--- a/app/Models/ChecklistK3.php
+++ b/app/Models/ChecklistK3.php
@@ -12,11 +12,12 @@ class ChecklistK3 extends Model
const UPDATED_AT = 'updated_at';
protected $fillable = [
- 'name',
- 'description',
- 'created_at',
- 'created_by',
- 'updated_at',
- 'updated_by'
+ 'name',
+ 'description',
+ 'created_at',
+ 'created_by',
+ 'updated_at',
+ 'updated_by',
+ 'company_id'
];
}
diff --git a/app/Models/Company.php b/app/Models/Company.php
index db52f7d..86d97fd 100644
--- a/app/Models/Company.php
+++ b/app/Models/Company.php
@@ -32,6 +32,9 @@ class Company extends Model
'created_by',
'updated_at',
'updated_by',
- 'company_id'
+ 'cluster',
+ 'type_account',
+ 'date_register',
+ 'discount_id'
];
}
diff --git a/app/Models/ContactSales.php b/app/Models/ContactSales.php
new file mode 100644
index 0000000..9707bb9
--- /dev/null
+++ b/app/Models/ContactSales.php
@@ -0,0 +1,27 @@
+getKey();
- }
-
- /**
- * Return a key value array, containing any custom claims to be added to the JWT.
- *
- * @return array
- */
- public function getJWTCustomClaims()
- {
- return [];
- }
-
-
- /**
- * Get working hours for given timestamp
- *
- * @return array of carbon or NULL in case HOLIDAY
- */
-
- public function getWorkingTime(Carbon $ts, $f = "08:00", $t = "17:00", $tz = self::DEFAULT_TZ)
- {
- $workingTime = array(
- "from"=> Carbon::createFromTimeString($f, $tz),
- "to"=> Carbon::createFromTimeString($t, $tz)
- );
-
- $userShift = UserShift::where('user_id', )
- ->orderByDesc('from_date')
- ->first();
-
- $shift = null;
- if ($userShift !== null)
- {
- $shiftId = null;
- switch ($ts->shortEnglishDayOfWeek)
- {
- case "Mon":
- $shiftId = $userShift->mon_shift_id;
- break;
- case "Tue":
- $shiftId = $userShift->tue_shift_id;
- break;
- case "Wed":
- $shiftId = $userShift->wed_shift_id;
- break;
- case "Thu":
- $shiftId = $userShift->thu_shift_id;
- break;
- case "Fri":
- $shiftId = $userShift->fri_shift_id;
- break;
- case "Sat":
- $shiftId = $userShift->sat_shift_id;
- break;
- case "Sun":
- $shiftId = $userShift->sun_shift_id;
- break;
- }
-
- if ($shiftId === null) {
- return null;
- }
-
- $shift = Shift::where('id', $shiftId)->first();
- } else {
- $shift = Shift::where('is_non_shift', true)
- ->orderByDesc('created_at')
- ->first();
- }
-
-
- if ($shift !== null)
- {
- $from = Carbon::createFromTimeString($shift->start_time, $tz)
- ->subMinutes($shift->flex_time_minute);
- $to = Carbon::createFromTimeString($shift->end_time, $tz)
- ->addMinutes($shift->flex_time_minute);
-
- /*
- if ($to->lessThan($from))
- {
- $to->addDay();
- }
- */
- $workingTime['from'] = $from;
- $workingTime['to'] = $to;
- }
-
- return $workingTime;
- }
-
- /**
- * Get presence status
- */
- public function presenceStatus(Carbon $at = null, $tz = self::DEFAULT_TZ)
- {
-
- $ts = $at;
- if ($at !== null)
- {
- $ts = Carbon::now($tz);
- }
- $tsSec = $ts->secondsSinceMidnight();
-
- $status = "";
- $wt = $this->getWorkingTime($ts, $tz);
- if ($wt === null)
- {
- $status = self::HOLIDAY;
- } else {
- $from = $wt->from;
- $to = $wt->to;
- $tsFrom = $from->secondsSinceMidnight();
- $tsTo = $to->secondsSinceMidnight();
-
- if ($from->greaterThan($to)) {
- $tsMid = 24*60*60 - $tsFrom;
- if ($tsSec >= $tsFrom || $tsSec < $tsTo) {
- $status = self::INSIDE;
- } else {
- $status = self::OUTSIDE;
- }
- } else {
- if ($tsSec < $tsFrom || $tsSec > $tsTo) {
- $status = self::OUTSIDE;
- } else {
- $status = self::INSIDE;
- }
- }
- }
-
- $clockIn = null;
- $clockOut = null;
- $inout = Presence::where('user_id', $this->id)
- ->orderByDesc('clock_in')
- ->first();
- if ($inout !== null) {
- $clockIn = Carbon::parse($inout->clock_in, $tz);
- $clockOut = Carbon::parse($inout->clock_out, $tz);
- }
-
- return array(
- "status"=>$status,
- "ts" => $ts,
- "clock_in" => $clockIn,
- "clock_out" => $clockOut
- );
- }
-}
+getKey();
+ }
+
+ /**
+ * Return a key value array, containing any custom claims to be added to the JWT.
+ *
+ * @return array
+ */
+ public function getJWTCustomClaims()
+ {
+ return [];
+ }
+
+
+ /**
+ * Get working hours for given timestamp
+ *
+ * @return array of carbon or NULL in case HOLIDAY
+ */
+
+ public function getWorkingTime(Carbon $ts, $f = "08:00", $t = "17:00", $tz = self::DEFAULT_TZ)
+ {
+ $workingTime = array(
+ "from" => Carbon::createFromTimeString($f, $tz),
+ "to" => Carbon::createFromTimeString($t, $tz)
+ );
+
+ $userShift = UserShift::where('user_id',)
+ ->orderByDesc('from_date')
+ ->first();
+
+ $shift = null;
+ if ($userShift !== null) {
+ $shiftId = null;
+ switch ($ts->shortEnglishDayOfWeek) {
+ case "Mon":
+ $shiftId = $userShift->mon_shift_id;
+ break;
+ case "Tue":
+ $shiftId = $userShift->tue_shift_id;
+ break;
+ case "Wed":
+ $shiftId = $userShift->wed_shift_id;
+ break;
+ case "Thu":
+ $shiftId = $userShift->thu_shift_id;
+ break;
+ case "Fri":
+ $shiftId = $userShift->fri_shift_id;
+ break;
+ case "Sat":
+ $shiftId = $userShift->sat_shift_id;
+ break;
+ case "Sun":
+ $shiftId = $userShift->sun_shift_id;
+ break;
+ }
+
+ if ($shiftId === null) {
+ return null;
+ }
+
+ $shift = Shift::where('id', $shiftId)->first();
+ } else {
+ $shift = Shift::where('is_non_shift', true)
+ ->orderByDesc('created_at')
+ ->first();
+ }
+
+
+ if ($shift !== null) {
+ $from = Carbon::createFromTimeString($shift->start_time, $tz)
+ ->subMinutes($shift->flex_time_minute);
+ $to = Carbon::createFromTimeString($shift->end_time, $tz)
+ ->addMinutes($shift->flex_time_minute);
+
+ /*
+ if ($to->lessThan($from))
+ {
+ $to->addDay();
+ }
+ */
+ $workingTime['from'] = $from;
+ $workingTime['to'] = $to;
+ }
+
+ return $workingTime;
+ }
+
+ /**
+ * Get presence status
+ */
+ public function presenceStatus(Carbon $at = null, $tz = self::DEFAULT_TZ)
+ {
+
+ $ts = $at;
+ if ($at !== null) {
+ $ts = Carbon::now($tz);
+ }
+ $tsSec = $ts->secondsSinceMidnight();
+
+ $status = "";
+ $wt = $this->getWorkingTime($ts, $tz);
+ if ($wt === null) {
+ $status = self::HOLIDAY;
+ } else {
+ $from = $wt->from;
+ $to = $wt->to;
+ $tsFrom = $from->secondsSinceMidnight();
+ $tsTo = $to->secondsSinceMidnight();
+
+ if ($from->greaterThan($to)) {
+ $tsMid = 24 * 60 * 60 - $tsFrom;
+ if ($tsSec >= $tsFrom || $tsSec < $tsTo) {
+ $status = self::INSIDE;
+ } else {
+ $status = self::OUTSIDE;
+ }
+ } else {
+ if ($tsSec < $tsFrom || $tsSec > $tsTo) {
+ $status = self::OUTSIDE;
+ } else {
+ $status = self::INSIDE;
+ }
+ }
+ }
+
+ $clockIn = null;
+ $clockOut = null;
+ $inout = Presence::where('user_id', $this->id)
+ ->orderByDesc('clock_in')
+ ->first();
+ if ($inout !== null) {
+ $clockIn = Carbon::parse($inout->clock_in, $tz);
+ $clockOut = Carbon::parse($inout->clock_out, $tz);
+ }
+
+ return array(
+ "status" => $status,
+ "ts" => $ts,
+ "clock_in" => $clockIn,
+ "clock_out" => $clockOut
+ );
+ }
+}
diff --git a/app/Models/UserToActivity.php b/app/Models/UserToActivity.php
index 1b795b1..c460df2 100644
--- a/app/Models/UserToActivity.php
+++ b/app/Models/UserToActivity.php
@@ -4,6 +4,7 @@ namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use App\Models\Activity;
+use Illuminate\Support\Facades\DB;
class UserToActivity extends Model
{
@@ -29,35 +30,37 @@ class UserToActivity extends Model
public static function boot() {
parent::boot();
- static::created(function($data) {
- $activity = Activity::find($data->activity_id);
- $getWorkingHours = UserToProyek::where('user_id', $data->user_id)->where('proyek_id', $activity->proyek_id)->first();
+ DB::transaction(function(){
+ static::created(function($data) {
+ $activity = Activity::find($data->activity_id);
+ $getWorkingHours = UserToProyek::where([['user_id', $data->user_id],['proyek_id', $activity->proyek_id]])->first();
+ $salary = 0;
+ if($getWorkingHours->uom_standart_rate == "Hour") {
+ $salary = (doubleval($getWorkingHours->standart_rate) * 8) * (int)$activity->duration * ($getWorkingHours->max_used / 100);
+ } else {
+ $salary = (doubleval($getWorkingHours->standart_rate) * (int)$activity->duration) * ($getWorkingHours->max_used / 100);
+ }
+ $activity->rencana_biaya += doubleval($salary);
+ $activity->save();
+ });
- $salary = ($getWorkingHours->standart_rate * $activity->duration) * ($getWorkingHours->max_used / 100);
-
- if($getWorkingHours->uom_standart_rate == "Hour")
- $salary = ($getWorkingHours->standart_rate * 8) * $activity->duration * ($getWorkingHours->max_used / 100);
-
- $activity->rencana_biaya += $salary;
- $activity->save();
- });
-
- static::deleted(function($data) {
- $activity = Activity::find($data->activity_id);
-
- $getWorkingHours = UserToProyek::where('user_id', $data->user_id)->where('proyek_id', $activity->proyek_id)->first();
- $salary = ($getWorkingHours->standart_rate * $activity->duration) * ($getWorkingHours->max_used / 100);
- if($getWorkingHours->uom_standart_rate == "Hour"){
- $salary = ($getWorkingHours->standart_rate * 8) * $activity->duration * ($getWorkingHours->max_used / 100);
- }
-
- $activity->rencana_biaya -= $salary;
- if ($activity->rencana_biaya < 0) {
- $activity->rencana_biaya = 0;
- }
- $activity->save();
- });
+ static::deleted(function($data) {
+ $activity = Activity::find($data->activity_id);
+ $getWorkingHours = UserToProyek::where([['user_id', $data->user_id],['proyek_id', $activity->proyek_id]])->first();
+ $salary = 0;
+ if($getWorkingHours->uom_standart_rate == "Hour"){
+ $salary = (doubleval($getWorkingHours->standart_rate) * 8) * (int)$activity->duration * ($getWorkingHours->max_used / 100);
+ } else {
+ $salary = (doubleval($getWorkingHours->standart_rate) * (int)$activity->duration) * ($getWorkingHours->max_used / 100);
+ }
+ $activity->rencana_biaya -= doubleval($salary);
+ if ($activity->rencana_biaya < 0) {
+ $activity->rencana_biaya = 0;
+ }
+ $activity->save();
+ });
+ }, 5);
}
}
diff --git a/composer.lock b/composer.lock
index be00311..c223528 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1,7670 +1,8163 @@
-{
- "_readme": [
- "This file locks the dependencies of your project to a known state",
- "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
- "This file is @generated automatically"
- ],
- "content-hash": "9ce8530ea07057f063ab833b1e977ffe",
- "packages": [
- {
- "name": "brick/math",
- "version": "0.9.3",
- "source": {
- "type": "git",
- "url": "https://github.com/brick/math.git",
- "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/brick/math/zipball/ca57d18f028f84f777b2168cd1911b0dee2343ae",
- "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae",
- "shasum": ""
- },
- "require": {
- "ext-json": "*",
- "php": "^7.1 || ^8.0"
- },
- "require-dev": {
- "php-coveralls/php-coveralls": "^2.2",
- "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.0",
- "vimeo/psalm": "4.9.2"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Brick\\Math\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "Arbitrary-precision arithmetic library",
- "keywords": [
- "Arbitrary-precision",
- "BigInteger",
- "BigRational",
- "arithmetic",
- "bigdecimal",
- "bignum",
- "brick",
- "math"
- ],
- "support": {
- "issues": "https://github.com/brick/math/issues",
- "source": "https://github.com/brick/math/tree/0.9.3"
- },
- "funding": [
- {
- "url": "https://github.com/BenMorel",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/brick/math",
- "type": "tidelift"
- }
- ],
- "time": "2021-08-15T20:50:18+00:00"
- },
- {
- "name": "classpreloader/classpreloader",
- "version": "4.2.0",
- "source": {
- "type": "git",
- "url": "https://github.com/ClassPreloader/ClassPreloader.git",
- "reference": "af9284543aedb45ed58359374918141c0ac7ae34"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/ClassPreloader/ClassPreloader/zipball/af9284543aedb45ed58359374918141c0ac7ae34",
- "reference": "af9284543aedb45ed58359374918141c0ac7ae34",
- "shasum": ""
- },
- "require": {
- "ext-tokenizer": "*",
- "nikic/php-parser": "^4.10.3",
- "php": "^7.0.8 || ^8.0"
- },
- "require-dev": {
- "bamarni/composer-bin-plugin": "^1.4.1",
- "graham-campbell/analyzer": "^2.4.3 || ^3.0.4",
- "phpunit/phpunit": "^6.5.14 || ^7.5.20 || ^8.5.19"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "ClassPreloader\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Michael Dowling",
- "email": "mtdowling@gmail.com"
- },
- {
- "name": "Graham Campbell",
- "email": "hello@gjcampbell.co.uk"
- }
- ],
- "description": "Helps class loading performance by generating a single PHP file containing all of the autoloaded files for a specific use case",
- "keywords": [
- "autoload",
- "class",
- "preload",
- "preloader"
- ],
- "support": {
- "issues": "https://github.com/ClassPreloader/ClassPreloader/issues",
- "source": "https://github.com/ClassPreloader/ClassPreloader/tree/4.2.0"
- },
- "funding": [
- {
- "url": "https://github.com/GrahamCampbell",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/classpreloader/classpreloader",
- "type": "tidelift"
- }
- ],
- "time": "2021-08-28T21:56:17+00:00"
- },
- {
- "name": "doctrine/inflector",
- "version": "2.0.4",
- "source": {
- "type": "git",
- "url": "https://github.com/doctrine/inflector.git",
- "reference": "8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/doctrine/inflector/zipball/8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89",
- "reference": "8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89",
- "shasum": ""
- },
- "require": {
- "php": "^7.2 || ^8.0"
- },
- "require-dev": {
- "doctrine/coding-standard": "^8.2",
- "phpstan/phpstan": "^0.12",
- "phpstan/phpstan-phpunit": "^0.12",
- "phpstan/phpstan-strict-rules": "^0.12",
- "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0",
- "vimeo/psalm": "^4.10"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Doctrine\\Inflector\\": "lib/Doctrine/Inflector"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Guilherme Blanco",
- "email": "guilhermeblanco@gmail.com"
- },
- {
- "name": "Roman Borschel",
- "email": "roman@code-factory.org"
- },
- {
- "name": "Benjamin Eberlei",
- "email": "kontakt@beberlei.de"
- },
- {
- "name": "Jonathan Wage",
- "email": "jonwage@gmail.com"
- },
- {
- "name": "Johannes Schmitt",
- "email": "schmittjoh@gmail.com"
- }
- ],
- "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.",
- "homepage": "https://www.doctrine-project.org/projects/inflector.html",
- "keywords": [
- "inflection",
- "inflector",
- "lowercase",
- "manipulation",
- "php",
- "plural",
- "singular",
- "strings",
- "uppercase",
- "words"
- ],
- "support": {
- "issues": "https://github.com/doctrine/inflector/issues",
- "source": "https://github.com/doctrine/inflector/tree/2.0.4"
- },
- "funding": [
- {
- "url": "https://www.doctrine-project.org/sponsorship.html",
- "type": "custom"
- },
- {
- "url": "https://www.patreon.com/phpdoctrine",
- "type": "patreon"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector",
- "type": "tidelift"
- }
- ],
- "time": "2021-10-22T20:16:43+00:00"
- },
- {
- "name": "doctrine/lexer",
- "version": "1.2.2",
- "source": {
- "type": "git",
- "url": "https://github.com/doctrine/lexer.git",
- "reference": "9c50f840f257bbb941e6f4a0e94ccf5db5c3f76c"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/doctrine/lexer/zipball/9c50f840f257bbb941e6f4a0e94ccf5db5c3f76c",
- "reference": "9c50f840f257bbb941e6f4a0e94ccf5db5c3f76c",
- "shasum": ""
- },
- "require": {
- "php": "^7.1 || ^8.0"
- },
- "require-dev": {
- "doctrine/coding-standard": "^9.0",
- "phpstan/phpstan": "1.3",
- "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
- "vimeo/psalm": "^4.11"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Guilherme Blanco",
- "email": "guilhermeblanco@gmail.com"
- },
- {
- "name": "Roman Borschel",
- "email": "roman@code-factory.org"
- },
- {
- "name": "Johannes Schmitt",
- "email": "schmittjoh@gmail.com"
- }
- ],
- "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.",
- "homepage": "https://www.doctrine-project.org/projects/lexer.html",
- "keywords": [
- "annotations",
- "docblock",
- "lexer",
- "parser",
- "php"
- ],
- "support": {
- "issues": "https://github.com/doctrine/lexer/issues",
- "source": "https://github.com/doctrine/lexer/tree/1.2.2"
- },
- "funding": [
- {
- "url": "https://www.doctrine-project.org/sponsorship.html",
- "type": "custom"
- },
- {
- "url": "https://www.patreon.com/phpdoctrine",
- "type": "patreon"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer",
- "type": "tidelift"
- }
- ],
- "time": "2022-01-12T08:27:12+00:00"
- },
- {
- "name": "dragonmantank/cron-expression",
- "version": "v3.3.0",
- "source": {
- "type": "git",
- "url": "https://github.com/dragonmantank/cron-expression.git",
- "reference": "63f2a76a045bac6ec93cc2daf2b534b412aa0313"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/63f2a76a045bac6ec93cc2daf2b534b412aa0313",
- "reference": "63f2a76a045bac6ec93cc2daf2b534b412aa0313",
- "shasum": ""
- },
- "require": {
- "php": "^7.2|^8.0",
- "webmozart/assert": "^1.0"
- },
- "replace": {
- "mtdowling/cron-expression": "^1.0"
- },
- "require-dev": {
- "phpstan/extension-installer": "^1.0",
- "phpstan/phpstan": "^1.0",
- "phpstan/phpstan-webmozart-assert": "^1.0",
- "phpunit/phpunit": "^7.0|^8.0|^9.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Cron\\": "src/Cron/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Chris Tankersley",
- "email": "chris@ctankersley.com",
- "homepage": "https://github.com/dragonmantank"
- }
- ],
- "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due",
- "keywords": [
- "cron",
- "schedule"
- ],
- "support": {
- "issues": "https://github.com/dragonmantank/cron-expression/issues",
- "source": "https://github.com/dragonmantank/cron-expression/tree/v3.3.0"
- },
- "funding": [
- {
- "url": "https://github.com/dragonmantank",
- "type": "github"
- }
- ],
- "time": "2022-01-14T16:02:05+00:00"
- },
- {
- "name": "egulias/email-validator",
- "version": "2.1.25",
- "source": {
- "type": "git",
- "url": "https://github.com/egulias/EmailValidator.git",
- "reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/0dbf5d78455d4d6a41d186da50adc1122ec066f4",
- "reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4",
- "shasum": ""
- },
- "require": {
- "doctrine/lexer": "^1.0.1",
- "php": ">=5.5",
- "symfony/polyfill-intl-idn": "^1.10"
- },
- "require-dev": {
- "dominicsayers/isemail": "^3.0.7",
- "phpunit/phpunit": "^4.8.36|^7.5.15",
- "satooshi/php-coveralls": "^1.0.1"
- },
- "suggest": {
- "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.1.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Egulias\\EmailValidator\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Eduardo Gulias Davis"
- }
- ],
- "description": "A library for validating emails against several RFCs",
- "homepage": "https://github.com/egulias/EmailValidator",
- "keywords": [
- "email",
- "emailvalidation",
- "emailvalidator",
- "validation",
- "validator"
- ],
- "support": {
- "issues": "https://github.com/egulias/EmailValidator/issues",
- "source": "https://github.com/egulias/EmailValidator/tree/2.1.25"
- },
- "funding": [
- {
- "url": "https://github.com/egulias",
- "type": "github"
- }
- ],
- "time": "2020-12-29T14:50:06+00:00"
- },
- {
- "name": "flipbox/lumen-generator",
- "version": "8.2.2",
- "source": {
- "type": "git",
- "url": "https://github.com/flipboxstudio/lumen-generator.git",
- "reference": "d9946a97e1ac5534ff1506184db674c1850c2ece"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/flipboxstudio/lumen-generator/zipball/d9946a97e1ac5534ff1506184db674c1850c2ece",
- "reference": "d9946a97e1ac5534ff1506184db674c1850c2ece",
- "shasum": ""
- },
- "require": {
- "classpreloader/classpreloader": "^3.0|^4.0",
- "illuminate/console": "^5.5|^6.0|^7.0|^8.0|^8.17",
- "illuminate/filesystem": "^5.5|^6.0|^7.0|^8.0|^8.17",
- "illuminate/support": "^5.5|^6.0|^7.0|^8.0|^8.17",
- "psy/psysh": "0.9.*|0.10.*",
- "symfony/var-dumper": "^4.2|^4.3|^5.0|^5.1|^5.2"
- },
- "suggest": {
- "anik/form-request": "Required to use form request in Lumen."
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Flipbox\\LumenGenerator\\": "src/LumenGenerator/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Krisan Alfa Timur",
- "email": "krisan47@gmail.com"
- }
- ],
- "description": "A Lumen Generator You Are Missing",
- "support": {
- "issues": "https://github.com/flipboxstudio/lumen-generator/issues",
- "source": "https://github.com/flipboxstudio/lumen-generator/tree/8.2.2"
- },
- "time": "2021-10-18T12:30:09+00:00"
- },
- {
- "name": "graham-campbell/result-type",
- "version": "v1.0.4",
- "source": {
- "type": "git",
- "url": "https://github.com/GrahamCampbell/Result-Type.git",
- "reference": "0690bde05318336c7221785f2a932467f98b64ca"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/0690bde05318336c7221785f2a932467f98b64ca",
- "reference": "0690bde05318336c7221785f2a932467f98b64ca",
- "shasum": ""
- },
- "require": {
- "php": "^7.0 || ^8.0",
- "phpoption/phpoption": "^1.8"
- },
- "require-dev": {
- "phpunit/phpunit": "^6.5.14 || ^7.5.20 || ^8.5.19 || ^9.5.8"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "GrahamCampbell\\ResultType\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Graham Campbell",
- "email": "hello@gjcampbell.co.uk",
- "homepage": "https://github.com/GrahamCampbell"
- }
- ],
- "description": "An Implementation Of The Result Type",
- "keywords": [
- "Graham Campbell",
- "GrahamCampbell",
- "Result Type",
- "Result-Type",
- "result"
- ],
- "support": {
- "issues": "https://github.com/GrahamCampbell/Result-Type/issues",
- "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.0.4"
- },
- "funding": [
- {
- "url": "https://github.com/GrahamCampbell",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type",
- "type": "tidelift"
- }
- ],
- "time": "2021-11-21T21:41:47+00:00"
- },
- {
- "name": "illuminate/auth",
- "version": "v8.79.0",
- "source": {
- "type": "git",
- "url": "https://github.com/illuminate/auth.git",
- "reference": "02b166738b6e7449e18fe595822abeac59b7e317"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/illuminate/auth/zipball/02b166738b6e7449e18fe595822abeac59b7e317",
- "reference": "02b166738b6e7449e18fe595822abeac59b7e317",
- "shasum": ""
- },
- "require": {
- "illuminate/collections": "^8.0",
- "illuminate/contracts": "^8.0",
- "illuminate/http": "^8.0",
- "illuminate/macroable": "^8.0",
- "illuminate/queue": "^8.0",
- "illuminate/support": "^8.0",
- "php": "^7.3|^8.0"
- },
- "suggest": {
- "illuminate/console": "Required to use the auth:clear-resets command (^8.0).",
- "illuminate/queue": "Required to fire login / logout events (^8.0).",
- "illuminate/session": "Required to use the session based guard (^8.0)."
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "8.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Illuminate\\Auth\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Taylor Otwell",
- "email": "taylor@laravel.com"
- }
- ],
- "description": "The Illuminate Auth package.",
- "homepage": "https://laravel.com",
- "support": {
- "issues": "https://github.com/laravel/framework/issues",
- "source": "https://github.com/laravel/framework"
- },
- "time": "2021-12-02T21:22:29+00:00"
- },
- {
- "name": "illuminate/broadcasting",
- "version": "v8.79.0",
- "source": {
- "type": "git",
- "url": "https://github.com/illuminate/broadcasting.git",
- "reference": "d7c0c81bcc679c294746b161f4b834997e904cf4"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/illuminate/broadcasting/zipball/d7c0c81bcc679c294746b161f4b834997e904cf4",
- "reference": "d7c0c81bcc679c294746b161f4b834997e904cf4",
- "shasum": ""
- },
- "require": {
- "ext-json": "*",
- "illuminate/bus": "^8.0",
- "illuminate/collections": "^8.0",
- "illuminate/contracts": "^8.0",
- "illuminate/queue": "^8.0",
- "illuminate/support": "^8.0",
- "php": "^7.3|^8.0",
- "psr/log": "^1.0|^2.0"
- },
- "suggest": {
- "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).",
- "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^4.0|^5.0|^6.0|^7.0)."
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "8.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Illuminate\\Broadcasting\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Taylor Otwell",
- "email": "taylor@laravel.com"
- }
- ],
- "description": "The Illuminate Broadcasting package.",
- "homepage": "https://laravel.com",
- "support": {
- "issues": "https://github.com/laravel/framework/issues",
- "source": "https://github.com/laravel/framework"
- },
- "time": "2022-01-06T14:28:26+00:00"
- },
- {
- "name": "illuminate/bus",
- "version": "v8.79.0",
- "source": {
- "type": "git",
- "url": "https://github.com/illuminate/bus.git",
- "reference": "917798f4a21c5eed1f83f9b434ce94f9c4fa8432"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/illuminate/bus/zipball/917798f4a21c5eed1f83f9b434ce94f9c4fa8432",
- "reference": "917798f4a21c5eed1f83f9b434ce94f9c4fa8432",
- "shasum": ""
- },
- "require": {
- "illuminate/collections": "^8.0",
- "illuminate/contracts": "^8.0",
- "illuminate/pipeline": "^8.0",
- "illuminate/support": "^8.0",
- "php": "^7.3|^8.0"
- },
- "suggest": {
- "illuminate/queue": "Required to use closures when chaining jobs (^7.0)."
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "8.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Illuminate\\Bus\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Taylor Otwell",
- "email": "taylor@laravel.com"
- }
- ],
- "description": "The Illuminate Bus package.",
- "homepage": "https://laravel.com",
- "support": {
- "issues": "https://github.com/laravel/framework/issues",
- "source": "https://github.com/laravel/framework"
- },
- "time": "2022-01-10T22:25:47+00:00"
- },
- {
- "name": "illuminate/cache",
- "version": "v8.79.0",
- "source": {
- "type": "git",
- "url": "https://github.com/illuminate/cache.git",
- "reference": "0f307e63c11ba99122a3d864647125788aac6db8"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/illuminate/cache/zipball/0f307e63c11ba99122a3d864647125788aac6db8",
- "reference": "0f307e63c11ba99122a3d864647125788aac6db8",
- "shasum": ""
- },
- "require": {
- "illuminate/collections": "^8.0",
- "illuminate/contracts": "^8.0",
- "illuminate/macroable": "^8.0",
- "illuminate/support": "^8.0",
- "php": "^7.3|^8.0"
- },
- "provide": {
- "psr/simple-cache-implementation": "1.0"
- },
- "suggest": {
- "ext-memcached": "Required to use the memcache cache driver.",
- "illuminate/database": "Required to use the database cache driver (^8.0).",
- "illuminate/filesystem": "Required to use the file cache driver (^8.0).",
- "illuminate/redis": "Required to use the redis cache driver (^8.0).",
- "symfony/cache": "Required to PSR-6 cache bridge (^5.4)."
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "8.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Illuminate\\Cache\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Taylor Otwell",
- "email": "taylor@laravel.com"
- }
- ],
- "description": "The Illuminate Cache package.",
- "homepage": "https://laravel.com",
- "support": {
- "issues": "https://github.com/laravel/framework/issues",
- "source": "https://github.com/laravel/framework"
- },
- "time": "2022-01-04T16:05:53+00:00"
- },
- {
- "name": "illuminate/collections",
- "version": "v8.79.0",
- "source": {
- "type": "git",
- "url": "https://github.com/illuminate/collections.git",
- "reference": "cfa88a486e04c3531d997b5f6e0a95cc148a5cd5"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/illuminate/collections/zipball/cfa88a486e04c3531d997b5f6e0a95cc148a5cd5",
- "reference": "cfa88a486e04c3531d997b5f6e0a95cc148a5cd5",
- "shasum": ""
- },
- "require": {
- "illuminate/contracts": "^8.0",
- "illuminate/macroable": "^8.0",
- "php": "^7.3|^8.0"
- },
- "suggest": {
- "symfony/var-dumper": "Required to use the dump method (^5.4)."
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "8.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Illuminate\\Support\\": ""
- },
- "files": [
- "helpers.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Taylor Otwell",
- "email": "taylor@laravel.com"
- }
- ],
- "description": "The Illuminate Collections package.",
- "homepage": "https://laravel.com",
- "support": {
- "issues": "https://github.com/laravel/framework/issues",
- "source": "https://github.com/laravel/framework"
- },
- "time": "2022-01-07T15:10:06+00:00"
- },
- {
- "name": "illuminate/config",
- "version": "v8.79.0",
- "source": {
- "type": "git",
- "url": "https://github.com/illuminate/config.git",
- "reference": "70973cbbe0cb524658b6eeaa2386dd5b71de4b02"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/illuminate/config/zipball/70973cbbe0cb524658b6eeaa2386dd5b71de4b02",
- "reference": "70973cbbe0cb524658b6eeaa2386dd5b71de4b02",
- "shasum": ""
- },
- "require": {
- "illuminate/collections": "^8.0",
- "illuminate/contracts": "^8.0",
- "php": "^7.3|^8.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "8.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Illuminate\\Config\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Taylor Otwell",
- "email": "taylor@laravel.com"
- }
- ],
- "description": "The Illuminate Config package.",
- "homepage": "https://laravel.com",
- "support": {
- "issues": "https://github.com/laravel/framework/issues",
- "source": "https://github.com/laravel/framework"
- },
- "time": "2021-08-03T13:42:24+00:00"
- },
- {
- "name": "illuminate/console",
- "version": "v8.79.0",
- "source": {
- "type": "git",
- "url": "https://github.com/illuminate/console.git",
- "reference": "d93e3aeff1b7a0f647a8b20eefa8547fdcd61dcf"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/illuminate/console/zipball/d93e3aeff1b7a0f647a8b20eefa8547fdcd61dcf",
- "reference": "d93e3aeff1b7a0f647a8b20eefa8547fdcd61dcf",
- "shasum": ""
- },
- "require": {
- "illuminate/collections": "^8.0",
- "illuminate/contracts": "^8.0",
- "illuminate/macroable": "^8.0",
- "illuminate/support": "^8.0",
- "php": "^7.3|^8.0",
- "symfony/console": "^5.4",
- "symfony/process": "^5.4"
- },
- "suggest": {
- "dragonmantank/cron-expression": "Required to use scheduler (^3.0.2).",
- "guzzlehttp/guzzle": "Required to use the ping methods on schedules (^6.5.5|^7.0.1).",
- "illuminate/bus": "Required to use the scheduled job dispatcher (^8.0).",
- "illuminate/container": "Required to use the scheduler (^8.0).",
- "illuminate/filesystem": "Required to use the generator command (^8.0).",
- "illuminate/queue": "Required to use closures for scheduled jobs (^8.0)."
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "8.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Illuminate\\Console\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Taylor Otwell",
- "email": "taylor@laravel.com"
- }
- ],
- "description": "The Illuminate Console package.",
- "homepage": "https://laravel.com",
- "support": {
- "issues": "https://github.com/laravel/framework/issues",
- "source": "https://github.com/laravel/framework"
- },
- "time": "2022-01-07T19:50:44+00:00"
- },
- {
- "name": "illuminate/container",
- "version": "v8.79.0",
- "source": {
- "type": "git",
- "url": "https://github.com/illuminate/container.git",
- "reference": "e18f8ce24a551e086621b00c7b75d6914d2011b4"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/illuminate/container/zipball/e18f8ce24a551e086621b00c7b75d6914d2011b4",
- "reference": "e18f8ce24a551e086621b00c7b75d6914d2011b4",
- "shasum": ""
- },
- "require": {
- "illuminate/contracts": "^8.0",
- "php": "^7.3|^8.0",
- "psr/container": "^1.0"
- },
- "provide": {
- "psr/container-implementation": "1.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "8.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Illuminate\\Container\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Taylor Otwell",
- "email": "taylor@laravel.com"
- }
- ],
- "description": "The Illuminate Container package.",
- "homepage": "https://laravel.com",
- "support": {
- "issues": "https://github.com/laravel/framework/issues",
- "source": "https://github.com/laravel/framework"
- },
- "time": "2022-01-05T15:38:15+00:00"
- },
- {
- "name": "illuminate/contracts",
- "version": "v8.79.0",
- "source": {
- "type": "git",
- "url": "https://github.com/illuminate/contracts.git",
- "reference": "9baa9f781071e67d7b171775bd3be7ead13ddd29"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/illuminate/contracts/zipball/9baa9f781071e67d7b171775bd3be7ead13ddd29",
- "reference": "9baa9f781071e67d7b171775bd3be7ead13ddd29",
- "shasum": ""
- },
- "require": {
- "php": "^7.3|^8.0",
- "psr/container": "^1.0",
- "psr/simple-cache": "^1.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "8.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Illuminate\\Contracts\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Taylor Otwell",
- "email": "taylor@laravel.com"
- }
- ],
- "description": "The Illuminate Contracts package.",
- "homepage": "https://laravel.com",
- "support": {
- "issues": "https://github.com/laravel/framework/issues",
- "source": "https://github.com/laravel/framework"
- },
- "time": "2021-12-14T14:40:44+00:00"
- },
- {
- "name": "illuminate/database",
- "version": "v8.79.0",
- "source": {
- "type": "git",
- "url": "https://github.com/illuminate/database.git",
- "reference": "d2c12e7fcba9bcd6c04ba2e45b2286c4c2d7dd24"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/illuminate/database/zipball/d2c12e7fcba9bcd6c04ba2e45b2286c4c2d7dd24",
- "reference": "d2c12e7fcba9bcd6c04ba2e45b2286c4c2d7dd24",
- "shasum": ""
- },
- "require": {
- "ext-json": "*",
- "illuminate/collections": "^8.0",
- "illuminate/container": "^8.0",
- "illuminate/contracts": "^8.0",
- "illuminate/macroable": "^8.0",
- "illuminate/support": "^8.0",
- "php": "^7.3|^8.0",
- "symfony/console": "^5.4"
- },
- "suggest": {
- "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.13.3|^3.1.4).",
- "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).",
- "illuminate/console": "Required to use the database commands (^8.0).",
- "illuminate/events": "Required to use the observers with Eloquent (^8.0).",
- "illuminate/filesystem": "Required to use the migrations (^8.0).",
- "illuminate/pagination": "Required to paginate the result set (^8.0).",
- "symfony/finder": "Required to use Eloquent model factories (^5.4)."
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "8.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Illuminate\\Database\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Taylor Otwell",
- "email": "taylor@laravel.com"
- }
- ],
- "description": "The Illuminate Database package.",
- "homepage": "https://laravel.com",
- "keywords": [
- "database",
- "laravel",
- "orm",
- "sql"
- ],
- "support": {
- "issues": "https://github.com/laravel/framework/issues",
- "source": "https://github.com/laravel/framework"
- },
- "time": "2022-01-11T15:40:11+00:00"
- },
- {
- "name": "illuminate/encryption",
- "version": "v8.79.0",
- "source": {
- "type": "git",
- "url": "https://github.com/illuminate/encryption.git",
- "reference": "3ff5c78f402c81da4b2ad4bef8f747a13e6fb0ff"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/illuminate/encryption/zipball/3ff5c78f402c81da4b2ad4bef8f747a13e6fb0ff",
- "reference": "3ff5c78f402c81da4b2ad4bef8f747a13e6fb0ff",
- "shasum": ""
- },
- "require": {
- "ext-json": "*",
- "ext-mbstring": "*",
- "ext-openssl": "*",
- "illuminate/contracts": "^8.0",
- "illuminate/support": "^8.0",
- "php": "^7.3|^8.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "8.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Illuminate\\Encryption\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Taylor Otwell",
- "email": "taylor@laravel.com"
- }
- ],
- "description": "The Illuminate Encryption package.",
- "homepage": "https://laravel.com",
- "support": {
- "issues": "https://github.com/laravel/framework/issues",
- "source": "https://github.com/laravel/framework"
- },
- "time": "2021-09-15T14:32:50+00:00"
- },
- {
- "name": "illuminate/events",
- "version": "v8.79.0",
- "source": {
- "type": "git",
- "url": "https://github.com/illuminate/events.git",
- "reference": "b7f06cafb6c09581617f2ca05d69e9b159e5a35d"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/illuminate/events/zipball/b7f06cafb6c09581617f2ca05d69e9b159e5a35d",
- "reference": "b7f06cafb6c09581617f2ca05d69e9b159e5a35d",
- "shasum": ""
- },
- "require": {
- "illuminate/bus": "^8.0",
- "illuminate/collections": "^8.0",
- "illuminate/container": "^8.0",
- "illuminate/contracts": "^8.0",
- "illuminate/macroable": "^8.0",
- "illuminate/support": "^8.0",
- "php": "^7.3|^8.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "8.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Illuminate\\Events\\": ""
- },
- "files": [
- "functions.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Taylor Otwell",
- "email": "taylor@laravel.com"
- }
- ],
- "description": "The Illuminate Events package.",
- "homepage": "https://laravel.com",
- "support": {
- "issues": "https://github.com/laravel/framework/issues",
- "source": "https://github.com/laravel/framework"
- },
- "time": "2021-09-15T14:32:50+00:00"
- },
- {
- "name": "illuminate/filesystem",
- "version": "v8.79.0",
- "source": {
- "type": "git",
- "url": "https://github.com/illuminate/filesystem.git",
- "reference": "def8901b69cd04902de0c2752683bab5e4d121b5"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/illuminate/filesystem/zipball/def8901b69cd04902de0c2752683bab5e4d121b5",
- "reference": "def8901b69cd04902de0c2752683bab5e4d121b5",
- "shasum": ""
- },
- "require": {
- "illuminate/collections": "^8.0",
- "illuminate/contracts": "^8.0",
- "illuminate/macroable": "^8.0",
- "illuminate/support": "^8.0",
- "php": "^7.3|^8.0",
- "symfony/finder": "^5.4"
- },
- "suggest": {
- "ext-ftp": "Required to use the Flysystem FTP driver.",
- "illuminate/http": "Required for handling uploaded files (^7.0).",
- "league/flysystem": "Required to use the Flysystem local and FTP drivers (^1.1).",
- "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^1.0).",
- "league/flysystem-cached-adapter": "Required to use the Flysystem cache (^1.0).",
- "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0).",
- "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).",
- "symfony/filesystem": "Required to enable support for relative symbolic links (^5.4).",
- "symfony/mime": "Required to enable support for guessing extensions (^5.4)."
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "8.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Illuminate\\Filesystem\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Taylor Otwell",
- "email": "taylor@laravel.com"
- }
- ],
- "description": "The Illuminate Filesystem package.",
- "homepage": "https://laravel.com",
- "support": {
- "issues": "https://github.com/laravel/framework/issues",
- "source": "https://github.com/laravel/framework"
- },
- "time": "2022-01-05T14:40:14+00:00"
- },
- {
- "name": "illuminate/hashing",
- "version": "v8.79.0",
- "source": {
- "type": "git",
- "url": "https://github.com/illuminate/hashing.git",
- "reference": "2617f4de8d0150a3f8641b086fafac8c1e0cdbf2"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/illuminate/hashing/zipball/2617f4de8d0150a3f8641b086fafac8c1e0cdbf2",
- "reference": "2617f4de8d0150a3f8641b086fafac8c1e0cdbf2",
- "shasum": ""
- },
- "require": {
- "illuminate/contracts": "^8.0",
- "illuminate/support": "^8.0",
- "php": "^7.3|^8.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "8.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Illuminate\\Hashing\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Taylor Otwell",
- "email": "taylor@laravel.com"
- }
- ],
- "description": "The Illuminate Hashing package.",
- "homepage": "https://laravel.com",
- "support": {
- "issues": "https://github.com/laravel/framework/issues",
- "source": "https://github.com/laravel/framework"
- },
- "time": "2021-10-22T13:20:42+00:00"
- },
- {
- "name": "illuminate/http",
- "version": "v8.79.0",
- "source": {
- "type": "git",
- "url": "https://github.com/illuminate/http.git",
- "reference": "893bd4a1c2d29e063974fe97c6cd7ac65f683266"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/illuminate/http/zipball/893bd4a1c2d29e063974fe97c6cd7ac65f683266",
- "reference": "893bd4a1c2d29e063974fe97c6cd7ac65f683266",
- "shasum": ""
- },
- "require": {
- "ext-json": "*",
- "illuminate/collections": "^8.0",
- "illuminate/macroable": "^8.0",
- "illuminate/session": "^8.0",
- "illuminate/support": "^8.0",
- "php": "^7.3|^8.0",
- "symfony/http-foundation": "^5.4",
- "symfony/http-kernel": "^5.4",
- "symfony/mime": "^5.4"
- },
- "suggest": {
- "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().",
- "guzzlehttp/guzzle": "Required to use the HTTP Client (^6.5.5|^7.0.1)."
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "8.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Illuminate\\Http\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Taylor Otwell",
- "email": "taylor@laravel.com"
- }
- ],
- "description": "The Illuminate Http package.",
- "homepage": "https://laravel.com",
- "support": {
- "issues": "https://github.com/laravel/framework/issues",
- "source": "https://github.com/laravel/framework"
- },
- "time": "2022-01-05T14:49:18+00:00"
- },
- {
- "name": "illuminate/log",
- "version": "v8.79.0",
- "source": {
- "type": "git",
- "url": "https://github.com/illuminate/log.git",
- "reference": "1dbdc6aca24d1d2b5903f865bb206039d4b800b2"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/illuminate/log/zipball/1dbdc6aca24d1d2b5903f865bb206039d4b800b2",
- "reference": "1dbdc6aca24d1d2b5903f865bb206039d4b800b2",
- "shasum": ""
- },
- "require": {
- "illuminate/contracts": "^8.0",
- "illuminate/support": "^8.0",
- "monolog/monolog": "^2.0",
- "php": "^7.3|^8.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "8.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Illuminate\\Log\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Taylor Otwell",
- "email": "taylor@laravel.com"
- }
- ],
- "description": "The Illuminate Log package.",
- "homepage": "https://laravel.com",
- "support": {
- "issues": "https://github.com/laravel/framework/issues",
- "source": "https://github.com/laravel/framework"
- },
- "time": "2022-01-10T15:22:22+00:00"
- },
- {
- "name": "illuminate/macroable",
- "version": "v8.79.0",
- "source": {
- "type": "git",
- "url": "https://github.com/illuminate/macroable.git",
- "reference": "aed81891a6e046fdee72edd497f822190f61c162"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/illuminate/macroable/zipball/aed81891a6e046fdee72edd497f822190f61c162",
- "reference": "aed81891a6e046fdee72edd497f822190f61c162",
- "shasum": ""
- },
- "require": {
- "php": "^7.3|^8.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "8.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Illuminate\\Support\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Taylor Otwell",
- "email": "taylor@laravel.com"
- }
- ],
- "description": "The Illuminate Macroable package.",
- "homepage": "https://laravel.com",
- "support": {
- "issues": "https://github.com/laravel/framework/issues",
- "source": "https://github.com/laravel/framework"
- },
- "time": "2021-11-16T13:57:03+00:00"
- },
- {
- "name": "illuminate/pagination",
- "version": "v8.79.0",
- "source": {
- "type": "git",
- "url": "https://github.com/illuminate/pagination.git",
- "reference": "a0a5784a052663fb044baed95f56801b57c2d002"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/illuminate/pagination/zipball/a0a5784a052663fb044baed95f56801b57c2d002",
- "reference": "a0a5784a052663fb044baed95f56801b57c2d002",
- "shasum": ""
- },
- "require": {
- "ext-json": "*",
- "illuminate/collections": "^8.0",
- "illuminate/contracts": "^8.0",
- "illuminate/support": "^8.0",
- "php": "^7.3|^8.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "8.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Illuminate\\Pagination\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Taylor Otwell",
- "email": "taylor@laravel.com"
- }
- ],
- "description": "The Illuminate Pagination package.",
- "homepage": "https://laravel.com",
- "support": {
- "issues": "https://github.com/laravel/framework/issues",
- "source": "https://github.com/laravel/framework"
- },
- "time": "2022-01-05T15:05:14+00:00"
- },
- {
- "name": "illuminate/pipeline",
- "version": "v8.79.0",
- "source": {
- "type": "git",
- "url": "https://github.com/illuminate/pipeline.git",
- "reference": "23aeff5b26ae4aee3f370835c76bd0f4e93f71d2"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/illuminate/pipeline/zipball/23aeff5b26ae4aee3f370835c76bd0f4e93f71d2",
- "reference": "23aeff5b26ae4aee3f370835c76bd0f4e93f71d2",
- "shasum": ""
- },
- "require": {
- "illuminate/contracts": "^8.0",
- "illuminate/support": "^8.0",
- "php": "^7.3|^8.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "8.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Illuminate\\Pipeline\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Taylor Otwell",
- "email": "taylor@laravel.com"
- }
- ],
- "description": "The Illuminate Pipeline package.",
- "homepage": "https://laravel.com",
- "support": {
- "issues": "https://github.com/laravel/framework/issues",
- "source": "https://github.com/laravel/framework"
- },
- "time": "2021-03-26T18:39:16+00:00"
- },
- {
- "name": "illuminate/queue",
- "version": "v8.79.0",
- "source": {
- "type": "git",
- "url": "https://github.com/illuminate/queue.git",
- "reference": "7111e907b4febe419c512a27ca4ce0510638308d"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/illuminate/queue/zipball/7111e907b4febe419c512a27ca4ce0510638308d",
- "reference": "7111e907b4febe419c512a27ca4ce0510638308d",
- "shasum": ""
- },
- "require": {
- "ext-json": "*",
- "illuminate/collections": "^8.0",
- "illuminate/console": "^8.0",
- "illuminate/container": "^8.0",
- "illuminate/contracts": "^8.0",
- "illuminate/database": "^8.0",
- "illuminate/filesystem": "^8.0",
- "illuminate/pipeline": "^8.0",
- "illuminate/support": "^8.0",
- "laravel/serializable-closure": "^1.0",
- "opis/closure": "^3.6",
- "php": "^7.3|^8.0",
- "ramsey/uuid": "^4.2.2",
- "symfony/process": "^5.4"
- },
- "suggest": {
- "aws/aws-sdk-php": "Required to use the SQS queue driver and DynamoDb failed job storage (^3.198.1).",
- "ext-pcntl": "Required to use all features of the queue worker.",
- "ext-posix": "Required to use all features of the queue worker.",
- "illuminate/redis": "Required to use the Redis queue driver (^8.0).",
- "pda/pheanstalk": "Required to use the Beanstalk queue driver (^4.0)."
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "8.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Illuminate\\Queue\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Taylor Otwell",
- "email": "taylor@laravel.com"
- }
- ],
- "description": "The Illuminate Queue package.",
- "homepage": "https://laravel.com",
- "support": {
- "issues": "https://github.com/laravel/framework/issues",
- "source": "https://github.com/laravel/framework"
- },
- "time": "2021-11-30T14:13:40+00:00"
- },
- {
- "name": "illuminate/session",
- "version": "v8.79.0",
- "source": {
- "type": "git",
- "url": "https://github.com/illuminate/session.git",
- "reference": "c5964a2348354f266fb18aac60eed0b81355c258"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/illuminate/session/zipball/c5964a2348354f266fb18aac60eed0b81355c258",
- "reference": "c5964a2348354f266fb18aac60eed0b81355c258",
- "shasum": ""
- },
- "require": {
- "ext-json": "*",
- "illuminate/collections": "^8.0",
- "illuminate/contracts": "^8.0",
- "illuminate/filesystem": "^8.0",
- "illuminate/support": "^8.0",
- "php": "^7.3|^8.0",
- "symfony/finder": "^5.4",
- "symfony/http-foundation": "^5.4"
- },
- "suggest": {
- "illuminate/console": "Required to use the session:table command (^8.0)."
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "8.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Illuminate\\Session\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Taylor Otwell",
- "email": "taylor@laravel.com"
- }
- ],
- "description": "The Illuminate Session package.",
- "homepage": "https://laravel.com",
- "support": {
- "issues": "https://github.com/laravel/framework/issues",
- "source": "https://github.com/laravel/framework"
- },
- "time": "2021-11-30T14:13:40+00:00"
- },
- {
- "name": "illuminate/support",
- "version": "v8.79.0",
- "source": {
- "type": "git",
- "url": "https://github.com/illuminate/support.git",
- "reference": "250fd3002747e7fe3a78d802b091c867e321087d"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/illuminate/support/zipball/250fd3002747e7fe3a78d802b091c867e321087d",
- "reference": "250fd3002747e7fe3a78d802b091c867e321087d",
- "shasum": ""
- },
- "require": {
- "doctrine/inflector": "^1.4|^2.0",
- "ext-json": "*",
- "ext-mbstring": "*",
- "illuminate/collections": "^8.0",
- "illuminate/contracts": "^8.0",
- "illuminate/macroable": "^8.0",
- "nesbot/carbon": "^2.53.1",
- "php": "^7.3|^8.0",
- "voku/portable-ascii": "^1.4.8"
- },
- "conflict": {
- "tightenco/collect": "<5.5.33"
- },
- "suggest": {
- "illuminate/filesystem": "Required to use the composer class (^8.0).",
- "league/commonmark": "Required to use Str::markdown() and Stringable::markdown() (^1.3|^2.0.2).",
- "ramsey/uuid": "Required to use Str::uuid() (^4.2.2).",
- "symfony/process": "Required to use the composer class (^5.4).",
- "symfony/var-dumper": "Required to use the dd function (^5.4).",
- "vlucas/phpdotenv": "Required to use the Env class and env helper (^5.4.1)."
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "8.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Illuminate\\Support\\": ""
- },
- "files": [
- "helpers.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Taylor Otwell",
- "email": "taylor@laravel.com"
- }
- ],
- "description": "The Illuminate Support package.",
- "homepage": "https://laravel.com",
- "support": {
- "issues": "https://github.com/laravel/framework/issues",
- "source": "https://github.com/laravel/framework"
- },
- "time": "2022-01-11T15:43:56+00:00"
- },
- {
- "name": "illuminate/testing",
- "version": "v8.79.0",
- "source": {
- "type": "git",
- "url": "https://github.com/illuminate/testing.git",
- "reference": "feca7bc8f4de97434e3923ae7b09c5c047d46038"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/illuminate/testing/zipball/feca7bc8f4de97434e3923ae7b09c5c047d46038",
- "reference": "feca7bc8f4de97434e3923ae7b09c5c047d46038",
- "shasum": ""
- },
- "require": {
- "illuminate/collections": "^8.0",
- "illuminate/contracts": "^8.0",
- "illuminate/macroable": "^8.0",
- "illuminate/support": "^8.0",
- "php": "^7.3|^8.0"
- },
- "suggest": {
- "brianium/paratest": "Required to run tests in parallel (^6.0).",
- "illuminate/console": "Required to assert console commands (^8.0).",
- "illuminate/database": "Required to assert databases (^8.0).",
- "illuminate/http": "Required to assert responses (^8.0).",
- "mockery/mockery": "Required to use mocking (^1.4.4).",
- "phpunit/phpunit": "Required to use assertions and run tests (^8.5.19|^9.5.8)."
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "8.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Illuminate\\Testing\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Taylor Otwell",
- "email": "taylor@laravel.com"
- }
- ],
- "description": "The Illuminate Testing package.",
- "homepage": "https://laravel.com",
- "support": {
- "issues": "https://github.com/laravel/framework/issues",
- "source": "https://github.com/laravel/framework"
- },
- "time": "2021-12-01T12:58:42+00:00"
- },
- {
- "name": "illuminate/translation",
- "version": "v8.79.0",
- "source": {
- "type": "git",
- "url": "https://github.com/illuminate/translation.git",
- "reference": "c10a68f37f590dc8c1c1fe5b6ad3f09381282137"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/illuminate/translation/zipball/c10a68f37f590dc8c1c1fe5b6ad3f09381282137",
- "reference": "c10a68f37f590dc8c1c1fe5b6ad3f09381282137",
- "shasum": ""
- },
- "require": {
- "ext-json": "*",
- "illuminate/collections": "^8.0",
- "illuminate/contracts": "^8.0",
- "illuminate/filesystem": "^8.0",
- "illuminate/macroable": "^8.0",
- "illuminate/support": "^8.0",
- "php": "^7.3|^8.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "8.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Illuminate\\Translation\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Taylor Otwell",
- "email": "taylor@laravel.com"
- }
- ],
- "description": "The Illuminate Translation package.",
- "homepage": "https://laravel.com",
- "support": {
- "issues": "https://github.com/laravel/framework/issues",
- "source": "https://github.com/laravel/framework"
- },
- "time": "2021-10-30T16:01:33+00:00"
- },
- {
- "name": "illuminate/validation",
- "version": "v8.79.0",
- "source": {
- "type": "git",
- "url": "https://github.com/illuminate/validation.git",
- "reference": "3ac1eed5b4d5fe355a510893164ecc718febdd54"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/illuminate/validation/zipball/3ac1eed5b4d5fe355a510893164ecc718febdd54",
- "reference": "3ac1eed5b4d5fe355a510893164ecc718febdd54",
- "shasum": ""
- },
- "require": {
- "egulias/email-validator": "^2.1.10",
- "ext-json": "*",
- "illuminate/collections": "^8.0",
- "illuminate/container": "^8.0",
- "illuminate/contracts": "^8.0",
- "illuminate/macroable": "^8.0",
- "illuminate/support": "^8.0",
- "illuminate/translation": "^8.0",
- "php": "^7.3|^8.0",
- "symfony/http-foundation": "^5.4",
- "symfony/mime": "^5.4"
- },
- "suggest": {
- "ext-bcmath": "Required to use the multiple_of validation rule.",
- "illuminate/database": "Required to use the database presence verifier (^8.0)."
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "8.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Illuminate\\Validation\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Taylor Otwell",
- "email": "taylor@laravel.com"
- }
- ],
- "description": "The Illuminate Validation package.",
- "homepage": "https://laravel.com",
- "support": {
- "issues": "https://github.com/laravel/framework/issues",
- "source": "https://github.com/laravel/framework"
- },
- "time": "2022-01-12T13:56:08+00:00"
- },
- {
- "name": "illuminate/view",
- "version": "v8.79.0",
- "source": {
- "type": "git",
- "url": "https://github.com/illuminate/view.git",
- "reference": "ec853721a70c11d51c6162a58410abb319a073b1"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/illuminate/view/zipball/ec853721a70c11d51c6162a58410abb319a073b1",
- "reference": "ec853721a70c11d51c6162a58410abb319a073b1",
- "shasum": ""
- },
- "require": {
- "ext-json": "*",
- "illuminate/collections": "^8.0",
- "illuminate/container": "^8.0",
- "illuminate/contracts": "^8.0",
- "illuminate/events": "^8.0",
- "illuminate/filesystem": "^8.0",
- "illuminate/macroable": "^8.0",
- "illuminate/support": "^8.0",
- "php": "^7.3|^8.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "8.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Illuminate\\View\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Taylor Otwell",
- "email": "taylor@laravel.com"
- }
- ],
- "description": "The Illuminate View package.",
- "homepage": "https://laravel.com",
- "support": {
- "issues": "https://github.com/laravel/framework/issues",
- "source": "https://github.com/laravel/framework"
- },
- "time": "2021-12-16T19:23:48+00:00"
- },
- {
- "name": "laravel/lumen-framework",
- "version": "v8.3.4",
- "source": {
- "type": "git",
- "url": "https://github.com/laravel/lumen-framework.git",
- "reference": "733d1199d3344be337743f11df31b4048ec7fd1c"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/laravel/lumen-framework/zipball/733d1199d3344be337743f11df31b4048ec7fd1c",
- "reference": "733d1199d3344be337743f11df31b4048ec7fd1c",
- "shasum": ""
- },
- "require": {
- "dragonmantank/cron-expression": "^3.0.2",
- "illuminate/auth": "^8.65",
- "illuminate/broadcasting": "^8.65",
- "illuminate/bus": "^8.65",
- "illuminate/cache": "^8.65",
- "illuminate/collections": "^8.65",
- "illuminate/config": "^8.65",
- "illuminate/console": "^8.65",
- "illuminate/container": "^8.65",
- "illuminate/contracts": "^8.65",
- "illuminate/database": "^8.65",
- "illuminate/encryption": "^8.65",
- "illuminate/events": "^8.65",
- "illuminate/filesystem": "^8.65",
- "illuminate/hashing": "^8.65",
- "illuminate/http": "^8.65",
- "illuminate/log": "^8.65",
- "illuminate/macroable": "^8.65",
- "illuminate/pagination": "^8.65",
- "illuminate/pipeline": "^8.65",
- "illuminate/queue": "^8.65",
- "illuminate/support": "^8.65",
- "illuminate/testing": "^8.65",
- "illuminate/translation": "^8.65",
- "illuminate/validation": "^8.65",
- "illuminate/view": "^8.65",
- "nikic/fast-route": "^1.3",
- "php": "^7.3|^8.0",
- "symfony/console": "^5.4",
- "symfony/error-handler": "^5.4",
- "symfony/http-foundation": "^5.4",
- "symfony/http-kernel": "^5.4",
- "symfony/mime": "^5.4",
- "symfony/var-dumper": "^5.4",
- "vlucas/phpdotenv": "^5.2"
- },
- "require-dev": {
- "mockery/mockery": "^1.4.4",
- "phpunit/phpunit": "^8.5.19|^9.5.8"
- },
- "suggest": {
- "laravel/tinker": "Required to use the tinker console command (^2.0).",
- "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).",
- "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0)."
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "8.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Laravel\\Lumen\\": "src/"
- },
- "files": [
- "src/helpers.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Taylor Otwell",
- "email": "taylor@laravel.com"
- }
- ],
- "description": "The Laravel Lumen Framework.",
- "homepage": "https://lumen.laravel.com",
- "keywords": [
- "framework",
- "laravel",
- "lumen"
- ],
- "support": {
- "issues": "https://github.com/laravel/lumen-framework/issues",
- "source": "https://github.com/laravel/lumen-framework"
- },
- "time": "2021-12-22T10:11:35+00:00"
- },
- {
- "name": "laravel/serializable-closure",
- "version": "v1.0.5",
- "source": {
- "type": "git",
- "url": "https://github.com/laravel/serializable-closure.git",
- "reference": "25de3be1bca1b17d52ff0dc02b646c667ac7266c"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/25de3be1bca1b17d52ff0dc02b646c667ac7266c",
- "reference": "25de3be1bca1b17d52ff0dc02b646c667ac7266c",
- "shasum": ""
- },
- "require": {
- "php": "^7.3|^8.0"
- },
- "require-dev": {
- "pestphp/pest": "^1.18",
- "phpstan/phpstan": "^0.12.98",
- "symfony/var-dumper": "^5.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Laravel\\SerializableClosure\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Taylor Otwell",
- "email": "taylor@laravel.com"
- },
- {
- "name": "Nuno Maduro",
- "email": "nuno@laravel.com"
- }
- ],
- "description": "Laravel Serializable Closure provides an easy and secure way to serialize closures in PHP.",
- "keywords": [
- "closure",
- "laravel",
- "serializable"
- ],
- "support": {
- "issues": "https://github.com/laravel/serializable-closure/issues",
- "source": "https://github.com/laravel/serializable-closure"
- },
- "time": "2021-11-30T15:53:04+00:00"
- },
- {
- "name": "lcobucci/jwt",
- "version": "3.3.3",
- "source": {
- "type": "git",
- "url": "https://github.com/lcobucci/jwt.git",
- "reference": "c1123697f6a2ec29162b82f170dd4a491f524773"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/lcobucci/jwt/zipball/c1123697f6a2ec29162b82f170dd4a491f524773",
- "reference": "c1123697f6a2ec29162b82f170dd4a491f524773",
- "shasum": ""
- },
- "require": {
- "ext-mbstring": "*",
- "ext-openssl": "*",
- "php": "^5.6 || ^7.0"
- },
- "require-dev": {
- "mikey179/vfsstream": "~1.5",
- "phpmd/phpmd": "~2.2",
- "phpunit/php-invoker": "~1.1",
- "phpunit/phpunit": "^5.7 || ^7.3",
- "squizlabs/php_codesniffer": "~2.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.1-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Lcobucci\\JWT\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "LuÃs Otávio Cobucci Oblonczyk",
- "email": "lcobucci@gmail.com",
- "role": "Developer"
- }
- ],
- "description": "A simple library to work with JSON Web Token and JSON Web Signature",
- "keywords": [
- "JWS",
- "jwt"
- ],
- "support": {
- "issues": "https://github.com/lcobucci/jwt/issues",
- "source": "https://github.com/lcobucci/jwt/tree/3.3.3"
- },
- "funding": [
- {
- "url": "https://github.com/lcobucci",
- "type": "github"
- },
- {
- "url": "https://www.patreon.com/lcobucci",
- "type": "patreon"
- }
- ],
- "time": "2020-08-20T13:22:28+00:00"
- },
- {
- "name": "monolog/monolog",
- "version": "2.3.5",
- "source": {
- "type": "git",
- "url": "https://github.com/Seldaek/monolog.git",
- "reference": "fd4380d6fc37626e2f799f29d91195040137eba9"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fd4380d6fc37626e2f799f29d91195040137eba9",
- "reference": "fd4380d6fc37626e2f799f29d91195040137eba9",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2",
- "psr/log": "^1.0.1 || ^2.0 || ^3.0"
- },
- "provide": {
- "psr/log-implementation": "1.0.0 || 2.0.0 || 3.0.0"
- },
- "require-dev": {
- "aws/aws-sdk-php": "^2.4.9 || ^3.0",
- "doctrine/couchdb": "~1.0@dev",
- "elasticsearch/elasticsearch": "^7",
- "graylog2/gelf-php": "^1.4.2",
- "mongodb/mongodb": "^1.8",
- "php-amqplib/php-amqplib": "~2.4 || ^3",
- "php-console/php-console": "^3.1.3",
- "phpspec/prophecy": "^1.6.1",
- "phpstan/phpstan": "^0.12.91",
- "phpunit/phpunit": "^8.5",
- "predis/predis": "^1.1",
- "rollbar/rollbar": "^1.3",
- "ruflin/elastica": ">=0.90@dev",
- "swiftmailer/swiftmailer": "^5.3|^6.0"
- },
- "suggest": {
- "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB",
- "doctrine/couchdb": "Allow sending log messages to a CouchDB server",
- "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client",
- "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)",
- "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler",
- "ext-mbstring": "Allow to work properly with unicode symbols",
- "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)",
- "ext-openssl": "Required to send log messages using SSL",
- "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)",
- "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server",
- "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)",
- "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib",
- "php-console/php-console": "Allow sending log messages to Google Chrome",
- "rollbar/rollbar": "Allow sending log messages to Rollbar",
- "ruflin/elastica": "Allow sending log messages to an Elastic Search server"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "2.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Monolog\\": "src/Monolog"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Jordi Boggiano",
- "email": "j.boggiano@seld.be",
- "homepage": "https://seld.be"
- }
- ],
- "description": "Sends your logs to files, sockets, inboxes, databases and various web services",
- "homepage": "https://github.com/Seldaek/monolog",
- "keywords": [
- "log",
- "logging",
- "psr-3"
- ],
- "support": {
- "issues": "https://github.com/Seldaek/monolog/issues",
- "source": "https://github.com/Seldaek/monolog/tree/2.3.5"
- },
- "funding": [
- {
- "url": "https://github.com/Seldaek",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/monolog/monolog",
- "type": "tidelift"
- }
- ],
- "time": "2021-10-01T21:08:31+00:00"
- },
- {
- "name": "namshi/jose",
- "version": "7.2.3",
- "source": {
- "type": "git",
- "url": "https://github.com/namshi/jose.git",
- "reference": "89a24d7eb3040e285dd5925fcad992378b82bcff"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/namshi/jose/zipball/89a24d7eb3040e285dd5925fcad992378b82bcff",
- "reference": "89a24d7eb3040e285dd5925fcad992378b82bcff",
- "shasum": ""
- },
- "require": {
- "ext-date": "*",
- "ext-hash": "*",
- "ext-json": "*",
- "ext-pcre": "*",
- "ext-spl": "*",
- "php": ">=5.5",
- "symfony/polyfill-php56": "^1.0"
- },
- "require-dev": {
- "phpseclib/phpseclib": "^2.0",
- "phpunit/phpunit": "^4.5|^5.0",
- "satooshi/php-coveralls": "^1.0"
- },
- "suggest": {
- "ext-openssl": "Allows to use OpenSSL as crypto engine.",
- "phpseclib/phpseclib": "Allows to use Phpseclib as crypto engine, use version ^2.0."
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Namshi\\JOSE\\": "src/Namshi/JOSE/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Alessandro Nadalin",
- "email": "alessandro.nadalin@gmail.com"
- },
- {
- "name": "Alessandro Cinelli (cirpo)",
- "email": "alessandro.cinelli@gmail.com"
- }
- ],
- "description": "JSON Object Signing and Encryption library for PHP.",
- "keywords": [
- "JSON Web Signature",
- "JSON Web Token",
- "JWS",
- "json",
- "jwt",
- "token"
- ],
- "support": {
- "issues": "https://github.com/namshi/jose/issues",
- "source": "https://github.com/namshi/jose/tree/master"
- },
- "time": "2016-12-05T07:27:31+00:00"
- },
- {
- "name": "nesbot/carbon",
- "version": "2.55.2",
- "source": {
- "type": "git",
- "url": "https://github.com/briannesbitt/Carbon.git",
- "reference": "8c2a18ce3e67c34efc1b29f64fe61304368259a2"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/8c2a18ce3e67c34efc1b29f64fe61304368259a2",
- "reference": "8c2a18ce3e67c34efc1b29f64fe61304368259a2",
- "shasum": ""
- },
- "require": {
- "ext-json": "*",
- "php": "^7.1.8 || ^8.0",
- "symfony/polyfill-mbstring": "^1.0",
- "symfony/polyfill-php80": "^1.16",
- "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0"
- },
- "require-dev": {
- "doctrine/dbal": "^2.0 || ^3.0",
- "doctrine/orm": "^2.7",
- "friendsofphp/php-cs-fixer": "^3.0",
- "kylekatarnls/multi-tester": "^2.0",
- "phpmd/phpmd": "^2.9",
- "phpstan/extension-installer": "^1.0",
- "phpstan/phpstan": "^0.12.54",
- "phpunit/phpunit": "^7.5.20 || ^8.5.14",
- "squizlabs/php_codesniffer": "^3.4"
- },
- "bin": [
- "bin/carbon"
- ],
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-3.x": "3.x-dev",
- "dev-master": "2.x-dev"
- },
- "laravel": {
- "providers": [
- "Carbon\\Laravel\\ServiceProvider"
- ]
- },
- "phpstan": {
- "includes": [
- "extension.neon"
- ]
- }
- },
- "autoload": {
- "psr-4": {
- "Carbon\\": "src/Carbon/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Brian Nesbitt",
- "email": "brian@nesbot.com",
- "homepage": "https://markido.com"
- },
- {
- "name": "kylekatarnls",
- "homepage": "https://github.com/kylekatarnls"
- }
- ],
- "description": "An API extension for DateTime that supports 281 different languages.",
- "homepage": "https://carbon.nesbot.com",
- "keywords": [
- "date",
- "datetime",
- "time"
- ],
- "support": {
- "docs": "https://carbon.nesbot.com/docs",
- "issues": "https://github.com/briannesbitt/Carbon/issues",
- "source": "https://github.com/briannesbitt/Carbon"
- },
- "funding": [
- {
- "url": "https://opencollective.com/Carbon",
- "type": "open_collective"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon",
- "type": "tidelift"
- }
- ],
- "time": "2021-12-03T14:59:52+00:00"
- },
- {
- "name": "nikic/fast-route",
- "version": "v1.3.0",
- "source": {
- "type": "git",
- "url": "https://github.com/nikic/FastRoute.git",
- "reference": "181d480e08d9476e61381e04a71b34dc0432e812"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/nikic/FastRoute/zipball/181d480e08d9476e61381e04a71b34dc0432e812",
- "reference": "181d480e08d9476e61381e04a71b34dc0432e812",
- "shasum": ""
- },
- "require": {
- "php": ">=5.4.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^4.8.35|~5.7"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "FastRoute\\": "src/"
- },
- "files": [
- "src/functions.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Nikita Popov",
- "email": "nikic@php.net"
- }
- ],
- "description": "Fast request router for PHP",
- "keywords": [
- "router",
- "routing"
- ],
- "support": {
- "issues": "https://github.com/nikic/FastRoute/issues",
- "source": "https://github.com/nikic/FastRoute/tree/master"
- },
- "time": "2018-02-13T20:26:39+00:00"
- },
- {
- "name": "nikic/php-parser",
- "version": "v4.13.2",
- "source": {
- "type": "git",
- "url": "https://github.com/nikic/PHP-Parser.git",
- "reference": "210577fe3cf7badcc5814d99455df46564f3c077"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/210577fe3cf7badcc5814d99455df46564f3c077",
- "reference": "210577fe3cf7badcc5814d99455df46564f3c077",
- "shasum": ""
- },
- "require": {
- "ext-tokenizer": "*",
- "php": ">=7.0"
- },
- "require-dev": {
- "ircmaxell/php-yacc": "^0.0.7",
- "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0"
- },
- "bin": [
- "bin/php-parse"
- ],
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "4.9-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "PhpParser\\": "lib/PhpParser"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Nikita Popov"
- }
- ],
- "description": "A PHP parser written in PHP",
- "keywords": [
- "parser",
- "php"
- ],
- "support": {
- "issues": "https://github.com/nikic/PHP-Parser/issues",
- "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.2"
- },
- "time": "2021-11-30T19:35:32+00:00"
- },
- {
- "name": "opis/closure",
- "version": "3.6.2",
- "source": {
- "type": "git",
- "url": "https://github.com/opis/closure.git",
- "reference": "06e2ebd25f2869e54a306dda991f7db58066f7f6"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/opis/closure/zipball/06e2ebd25f2869e54a306dda991f7db58066f7f6",
- "reference": "06e2ebd25f2869e54a306dda991f7db58066f7f6",
- "shasum": ""
- },
- "require": {
- "php": "^5.4 || ^7.0 || ^8.0"
- },
- "require-dev": {
- "jeremeamia/superclosure": "^2.0",
- "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.6.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Opis\\Closure\\": "src/"
- },
- "files": [
- "functions.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Marius Sarca",
- "email": "marius.sarca@gmail.com"
- },
- {
- "name": "Sorin Sarca",
- "email": "sarca_sorin@hotmail.com"
- }
- ],
- "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.",
- "homepage": "https://opis.io/closure",
- "keywords": [
- "anonymous functions",
- "closure",
- "function",
- "serializable",
- "serialization",
- "serialize"
- ],
- "support": {
- "issues": "https://github.com/opis/closure/issues",
- "source": "https://github.com/opis/closure/tree/3.6.2"
- },
- "time": "2021-04-09T13:42:10+00:00"
- },
- {
- "name": "phpoption/phpoption",
- "version": "1.8.1",
- "source": {
- "type": "git",
- "url": "https://github.com/schmittjoh/php-option.git",
- "reference": "eab7a0df01fe2344d172bff4cd6dbd3f8b84ad15"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/eab7a0df01fe2344d172bff4cd6dbd3f8b84ad15",
- "reference": "eab7a0df01fe2344d172bff4cd6dbd3f8b84ad15",
- "shasum": ""
- },
- "require": {
- "php": "^7.0 || ^8.0"
- },
- "require-dev": {
- "bamarni/composer-bin-plugin": "^1.4.1",
- "phpunit/phpunit": "^6.5.14 || ^7.5.20 || ^8.5.19 || ^9.5.8"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.8-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "PhpOption\\": "src/PhpOption/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "Apache-2.0"
- ],
- "authors": [
- {
- "name": "Johannes M. Schmitt",
- "email": "schmittjoh@gmail.com",
- "homepage": "https://github.com/schmittjoh"
- },
- {
- "name": "Graham Campbell",
- "email": "hello@gjcampbell.co.uk",
- "homepage": "https://github.com/GrahamCampbell"
- }
- ],
- "description": "Option Type for PHP",
- "keywords": [
- "language",
- "option",
- "php",
- "type"
- ],
- "support": {
- "issues": "https://github.com/schmittjoh/php-option/issues",
- "source": "https://github.com/schmittjoh/php-option/tree/1.8.1"
- },
- "funding": [
- {
- "url": "https://github.com/GrahamCampbell",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption",
- "type": "tidelift"
- }
- ],
- "time": "2021-12-04T23:24:31+00:00"
- },
- {
- "name": "psr/container",
- "version": "1.1.2",
- "source": {
- "type": "git",
- "url": "https://github.com/php-fig/container.git",
- "reference": "513e0666f7216c7459170d56df27dfcefe1689ea"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea",
- "reference": "513e0666f7216c7459170d56df27dfcefe1689ea",
- "shasum": ""
- },
- "require": {
- "php": ">=7.4.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Psr\\Container\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "PHP-FIG",
- "homepage": "https://www.php-fig.org/"
- }
- ],
- "description": "Common Container Interface (PHP FIG PSR-11)",
- "homepage": "https://github.com/php-fig/container",
- "keywords": [
- "PSR-11",
- "container",
- "container-interface",
- "container-interop",
- "psr"
- ],
- "support": {
- "issues": "https://github.com/php-fig/container/issues",
- "source": "https://github.com/php-fig/container/tree/1.1.2"
- },
- "time": "2021-11-05T16:50:12+00:00"
- },
- {
- "name": "psr/event-dispatcher",
- "version": "1.0.0",
- "source": {
- "type": "git",
- "url": "https://github.com/php-fig/event-dispatcher.git",
- "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0",
- "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Psr\\EventDispatcher\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "PHP-FIG",
- "homepage": "http://www.php-fig.org/"
- }
- ],
- "description": "Standard interfaces for event handling.",
- "keywords": [
- "events",
- "psr",
- "psr-14"
- ],
- "support": {
- "issues": "https://github.com/php-fig/event-dispatcher/issues",
- "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0"
- },
- "time": "2019-01-08T18:20:26+00:00"
- },
- {
- "name": "psr/log",
- "version": "1.1.4",
- "source": {
- "type": "git",
- "url": "https://github.com/php-fig/log.git",
- "reference": "d49695b909c3b7628b6289db5479a1c204601f11"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11",
- "reference": "d49695b909c3b7628b6289db5479a1c204601f11",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.1.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Psr\\Log\\": "Psr/Log/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "PHP-FIG",
- "homepage": "https://www.php-fig.org/"
- }
- ],
- "description": "Common interface for logging libraries",
- "homepage": "https://github.com/php-fig/log",
- "keywords": [
- "log",
- "psr",
- "psr-3"
- ],
- "support": {
- "source": "https://github.com/php-fig/log/tree/1.1.4"
- },
- "time": "2021-05-03T11:20:27+00:00"
- },
- {
- "name": "psr/simple-cache",
- "version": "1.0.1",
- "source": {
- "type": "git",
- "url": "https://github.com/php-fig/simple-cache.git",
- "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b",
- "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Psr\\SimpleCache\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "PHP-FIG",
- "homepage": "http://www.php-fig.org/"
- }
- ],
- "description": "Common interfaces for simple caching",
- "keywords": [
- "cache",
- "caching",
- "psr",
- "psr-16",
- "simple-cache"
- ],
- "support": {
- "source": "https://github.com/php-fig/simple-cache/tree/master"
- },
- "time": "2017-10-23T01:57:42+00:00"
- },
- {
- "name": "psy/psysh",
- "version": "v0.10.12",
- "source": {
- "type": "git",
- "url": "https://github.com/bobthecow/psysh.git",
- "reference": "a0d9981aa07ecfcbea28e4bfa868031cca121e7d"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/bobthecow/psysh/zipball/a0d9981aa07ecfcbea28e4bfa868031cca121e7d",
- "reference": "a0d9981aa07ecfcbea28e4bfa868031cca121e7d",
- "shasum": ""
- },
- "require": {
- "ext-json": "*",
- "ext-tokenizer": "*",
- "nikic/php-parser": "~4.0|~3.0|~2.0|~1.3",
- "php": "^8.0 || ^7.0 || ^5.5.9",
- "symfony/console": "~5.0|~4.0|~3.0|^2.4.2|~2.3.10",
- "symfony/var-dumper": "~5.0|~4.0|~3.0|~2.7"
- },
- "require-dev": {
- "bamarni/composer-bin-plugin": "^1.2",
- "hoa/console": "3.17.*"
- },
- "suggest": {
- "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)",
- "ext-pdo-sqlite": "The doc command requires SQLite to work.",
- "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.",
- "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history.",
- "hoa/console": "A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit."
- },
- "bin": [
- "bin/psysh"
- ],
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "0.10.x-dev"
- }
- },
- "autoload": {
- "files": [
- "src/functions.php"
- ],
- "psr-4": {
- "Psy\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Justin Hileman",
- "email": "justin@justinhileman.info",
- "homepage": "http://justinhileman.com"
- }
- ],
- "description": "An interactive shell for modern PHP.",
- "homepage": "http://psysh.org",
- "keywords": [
- "REPL",
- "console",
- "interactive",
- "shell"
- ],
- "support": {
- "issues": "https://github.com/bobthecow/psysh/issues",
- "source": "https://github.com/bobthecow/psysh/tree/v0.10.12"
- },
- "time": "2021-11-30T14:05:36+00:00"
- },
- {
- "name": "ramsey/collection",
- "version": "1.2.2",
- "source": {
- "type": "git",
- "url": "https://github.com/ramsey/collection.git",
- "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/ramsey/collection/zipball/cccc74ee5e328031b15640b51056ee8d3bb66c0a",
- "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a",
- "shasum": ""
- },
- "require": {
- "php": "^7.3 || ^8",
- "symfony/polyfill-php81": "^1.23"
- },
- "require-dev": {
- "captainhook/captainhook": "^5.3",
- "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
- "ergebnis/composer-normalize": "^2.6",
- "fakerphp/faker": "^1.5",
- "hamcrest/hamcrest-php": "^2",
- "jangregor/phpstan-prophecy": "^0.8",
- "mockery/mockery": "^1.3",
- "phpspec/prophecy-phpunit": "^2.0",
- "phpstan/extension-installer": "^1",
- "phpstan/phpstan": "^0.12.32",
- "phpstan/phpstan-mockery": "^0.12.5",
- "phpstan/phpstan-phpunit": "^0.12.11",
- "phpunit/phpunit": "^8.5 || ^9",
- "psy/psysh": "^0.10.4",
- "slevomat/coding-standard": "^6.3",
- "squizlabs/php_codesniffer": "^3.5",
- "vimeo/psalm": "^4.4"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Ramsey\\Collection\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Ben Ramsey",
- "email": "ben@benramsey.com",
- "homepage": "https://benramsey.com"
- }
- ],
- "description": "A PHP library for representing and manipulating collections.",
- "keywords": [
- "array",
- "collection",
- "hash",
- "map",
- "queue",
- "set"
- ],
- "support": {
- "issues": "https://github.com/ramsey/collection/issues",
- "source": "https://github.com/ramsey/collection/tree/1.2.2"
- },
- "funding": [
- {
- "url": "https://github.com/ramsey",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/ramsey/collection",
- "type": "tidelift"
- }
- ],
- "time": "2021-10-10T03:01:02+00:00"
- },
- {
- "name": "ramsey/uuid",
- "version": "4.2.3",
- "source": {
- "type": "git",
- "url": "https://github.com/ramsey/uuid.git",
- "reference": "fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/ramsey/uuid/zipball/fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df",
- "reference": "fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df",
- "shasum": ""
- },
- "require": {
- "brick/math": "^0.8 || ^0.9",
- "ext-json": "*",
- "php": "^7.2 || ^8.0",
- "ramsey/collection": "^1.0",
- "symfony/polyfill-ctype": "^1.8",
- "symfony/polyfill-php80": "^1.14"
- },
- "replace": {
- "rhumsaa/uuid": "self.version"
- },
- "require-dev": {
- "captainhook/captainhook": "^5.10",
- "captainhook/plugin-composer": "^5.3",
- "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
- "doctrine/annotations": "^1.8",
- "ergebnis/composer-normalize": "^2.15",
- "mockery/mockery": "^1.3",
- "moontoast/math": "^1.1",
- "paragonie/random-lib": "^2",
- "php-mock/php-mock": "^2.2",
- "php-mock/php-mock-mockery": "^1.3",
- "php-parallel-lint/php-parallel-lint": "^1.1",
- "phpbench/phpbench": "^1.0",
- "phpstan/extension-installer": "^1.0",
- "phpstan/phpstan": "^0.12",
- "phpstan/phpstan-mockery": "^0.12",
- "phpstan/phpstan-phpunit": "^0.12",
- "phpunit/phpunit": "^8.5 || ^9",
- "slevomat/coding-standard": "^7.0",
- "squizlabs/php_codesniffer": "^3.5",
- "vimeo/psalm": "^4.9"
- },
- "suggest": {
- "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.",
- "ext-ctype": "Enables faster processing of character classification using ctype functions.",
- "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.",
- "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.",
- "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter",
- "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type."
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "4.x-dev"
- },
- "captainhook": {
- "force-install": true
- }
- },
- "autoload": {
- "psr-4": {
- "Ramsey\\Uuid\\": "src/"
- },
- "files": [
- "src/functions.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).",
- "keywords": [
- "guid",
- "identifier",
- "uuid"
- ],
- "support": {
- "issues": "https://github.com/ramsey/uuid/issues",
- "source": "https://github.com/ramsey/uuid/tree/4.2.3"
- },
- "funding": [
- {
- "url": "https://github.com/ramsey",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid",
- "type": "tidelift"
- }
- ],
- "time": "2021-09-25T23:10:38+00:00"
- },
- {
- "name": "symfony/console",
- "version": "v5.4.2",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/console.git",
- "reference": "a2c6b7ced2eb7799a35375fb9022519282b5405e"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/a2c6b7ced2eb7799a35375fb9022519282b5405e",
- "reference": "a2c6b7ced2eb7799a35375fb9022519282b5405e",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.5",
- "symfony/deprecation-contracts": "^2.1|^3",
- "symfony/polyfill-mbstring": "~1.0",
- "symfony/polyfill-php73": "^1.9",
- "symfony/polyfill-php80": "^1.16",
- "symfony/service-contracts": "^1.1|^2|^3",
- "symfony/string": "^5.1|^6.0"
- },
- "conflict": {
- "psr/log": ">=3",
- "symfony/dependency-injection": "<4.4",
- "symfony/dotenv": "<5.1",
- "symfony/event-dispatcher": "<4.4",
- "symfony/lock": "<4.4",
- "symfony/process": "<4.4"
- },
- "provide": {
- "psr/log-implementation": "1.0|2.0"
- },
- "require-dev": {
- "psr/log": "^1|^2",
- "symfony/config": "^4.4|^5.0|^6.0",
- "symfony/dependency-injection": "^4.4|^5.0|^6.0",
- "symfony/event-dispatcher": "^4.4|^5.0|^6.0",
- "symfony/lock": "^4.4|^5.0|^6.0",
- "symfony/process": "^4.4|^5.0|^6.0",
- "symfony/var-dumper": "^4.4|^5.0|^6.0"
- },
- "suggest": {
- "psr/log": "For using the console logger",
- "symfony/event-dispatcher": "",
- "symfony/lock": "",
- "symfony/process": ""
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\Console\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Eases the creation of beautiful and testable command line interfaces",
- "homepage": "https://symfony.com",
- "keywords": [
- "cli",
- "command line",
- "console",
- "terminal"
- ],
- "support": {
- "source": "https://github.com/symfony/console/tree/v5.4.2"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-12-20T16:11:12+00:00"
- },
- {
- "name": "symfony/deprecation-contracts",
- "version": "v2.5.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/deprecation-contracts.git",
- "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/6f981ee24cf69ee7ce9736146d1c57c2780598a8",
- "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "2.5-dev"
- },
- "thanks": {
- "name": "symfony/contracts",
- "url": "https://github.com/symfony/contracts"
- }
- },
- "autoload": {
- "files": [
- "function.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "A generic function and convention to trigger deprecation notices",
- "homepage": "https://symfony.com",
- "support": {
- "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.0"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-07-12T14:48:14+00:00"
- },
- {
- "name": "symfony/error-handler",
- "version": "v5.4.2",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/error-handler.git",
- "reference": "e0c0dd0f9d4120a20158fc9aec2367d07d38bc56"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/error-handler/zipball/e0c0dd0f9d4120a20158fc9aec2367d07d38bc56",
- "reference": "e0c0dd0f9d4120a20158fc9aec2367d07d38bc56",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.5",
- "psr/log": "^1|^2|^3",
- "symfony/var-dumper": "^4.4|^5.0|^6.0"
- },
- "require-dev": {
- "symfony/deprecation-contracts": "^2.1|^3",
- "symfony/http-kernel": "^4.4|^5.0|^6.0",
- "symfony/serializer": "^4.4|^5.0|^6.0"
- },
- "bin": [
- "Resources/bin/patch-type-declarations"
- ],
- "type": "library",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\ErrorHandler\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Provides tools to manage errors and ease debugging PHP code",
- "homepage": "https://symfony.com",
- "support": {
- "source": "https://github.com/symfony/error-handler/tree/v5.4.2"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-12-19T20:02:00+00:00"
- },
- {
- "name": "symfony/event-dispatcher",
- "version": "v5.4.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/event-dispatcher.git",
- "reference": "27d39ae126352b9fa3be5e196ccf4617897be3eb"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/27d39ae126352b9fa3be5e196ccf4617897be3eb",
- "reference": "27d39ae126352b9fa3be5e196ccf4617897be3eb",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.5",
- "symfony/deprecation-contracts": "^2.1|^3",
- "symfony/event-dispatcher-contracts": "^2|^3",
- "symfony/polyfill-php80": "^1.16"
- },
- "conflict": {
- "symfony/dependency-injection": "<4.4"
- },
- "provide": {
- "psr/event-dispatcher-implementation": "1.0",
- "symfony/event-dispatcher-implementation": "2.0"
- },
- "require-dev": {
- "psr/log": "^1|^2|^3",
- "symfony/config": "^4.4|^5.0|^6.0",
- "symfony/dependency-injection": "^4.4|^5.0|^6.0",
- "symfony/error-handler": "^4.4|^5.0|^6.0",
- "symfony/expression-language": "^4.4|^5.0|^6.0",
- "symfony/http-foundation": "^4.4|^5.0|^6.0",
- "symfony/service-contracts": "^1.1|^2|^3",
- "symfony/stopwatch": "^4.4|^5.0|^6.0"
- },
- "suggest": {
- "symfony/dependency-injection": "",
- "symfony/http-kernel": ""
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\EventDispatcher\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
- "homepage": "https://symfony.com",
- "support": {
- "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.0"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-11-23T10:19:22+00:00"
- },
- {
- "name": "symfony/event-dispatcher-contracts",
- "version": "v2.5.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/event-dispatcher-contracts.git",
- "reference": "66bea3b09be61613cd3b4043a65a8ec48cfa6d2a"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/66bea3b09be61613cd3b4043a65a8ec48cfa6d2a",
- "reference": "66bea3b09be61613cd3b4043a65a8ec48cfa6d2a",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.5",
- "psr/event-dispatcher": "^1"
- },
- "suggest": {
- "symfony/event-dispatcher-implementation": ""
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "2.5-dev"
- },
- "thanks": {
- "name": "symfony/contracts",
- "url": "https://github.com/symfony/contracts"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Contracts\\EventDispatcher\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Generic abstractions related to dispatching event",
- "homepage": "https://symfony.com",
- "keywords": [
- "abstractions",
- "contracts",
- "decoupling",
- "interfaces",
- "interoperability",
- "standards"
- ],
- "support": {
- "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.5.0"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-07-12T14:48:14+00:00"
- },
- {
- "name": "symfony/finder",
- "version": "v5.4.2",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/finder.git",
- "reference": "e77046c252be48c48a40816187ed527703c8f76c"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/finder/zipball/e77046c252be48c48a40816187ed527703c8f76c",
- "reference": "e77046c252be48c48a40816187ed527703c8f76c",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.5",
- "symfony/deprecation-contracts": "^2.1|^3",
- "symfony/polyfill-php80": "^1.16"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\Finder\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Finds files and directories via an intuitive fluent interface",
- "homepage": "https://symfony.com",
- "support": {
- "source": "https://github.com/symfony/finder/tree/v5.4.2"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-12-15T11:06:13+00:00"
- },
- {
- "name": "symfony/http-foundation",
- "version": "v5.4.2",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/http-foundation.git",
- "reference": "ce952af52877eaf3eab5d0c08cc0ea865ed37313"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ce952af52877eaf3eab5d0c08cc0ea865ed37313",
- "reference": "ce952af52877eaf3eab5d0c08cc0ea865ed37313",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.5",
- "symfony/deprecation-contracts": "^2.1|^3",
- "symfony/polyfill-mbstring": "~1.1",
- "symfony/polyfill-php80": "^1.16"
- },
- "require-dev": {
- "predis/predis": "~1.0",
- "symfony/cache": "^4.4|^5.0|^6.0",
- "symfony/expression-language": "^4.4|^5.0|^6.0",
- "symfony/mime": "^4.4|^5.0|^6.0"
- },
- "suggest": {
- "symfony/mime": "To use the file extension guesser"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\HttpFoundation\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Defines an object-oriented layer for the HTTP specification",
- "homepage": "https://symfony.com",
- "support": {
- "source": "https://github.com/symfony/http-foundation/tree/v5.4.2"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-12-28T17:15:56+00:00"
- },
- {
- "name": "symfony/http-kernel",
- "version": "v5.4.2",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/http-kernel.git",
- "reference": "35b7e9868953e0d1df84320bb063543369e43ef5"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/http-kernel/zipball/35b7e9868953e0d1df84320bb063543369e43ef5",
- "reference": "35b7e9868953e0d1df84320bb063543369e43ef5",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.5",
- "psr/log": "^1|^2",
- "symfony/deprecation-contracts": "^2.1|^3",
- "symfony/error-handler": "^4.4|^5.0|^6.0",
- "symfony/event-dispatcher": "^5.0|^6.0",
- "symfony/http-foundation": "^5.3.7|^6.0",
- "symfony/polyfill-ctype": "^1.8",
- "symfony/polyfill-php73": "^1.9",
- "symfony/polyfill-php80": "^1.16"
- },
- "conflict": {
- "symfony/browser-kit": "<5.4",
- "symfony/cache": "<5.0",
- "symfony/config": "<5.0",
- "symfony/console": "<4.4",
- "symfony/dependency-injection": "<5.3",
- "symfony/doctrine-bridge": "<5.0",
- "symfony/form": "<5.0",
- "symfony/http-client": "<5.0",
- "symfony/mailer": "<5.0",
- "symfony/messenger": "<5.0",
- "symfony/translation": "<5.0",
- "symfony/twig-bridge": "<5.0",
- "symfony/validator": "<5.0",
- "twig/twig": "<2.13"
- },
- "provide": {
- "psr/log-implementation": "1.0|2.0"
- },
- "require-dev": {
- "psr/cache": "^1.0|^2.0|^3.0",
- "symfony/browser-kit": "^5.4|^6.0",
- "symfony/config": "^5.0|^6.0",
- "symfony/console": "^4.4|^5.0|^6.0",
- "symfony/css-selector": "^4.4|^5.0|^6.0",
- "symfony/dependency-injection": "^5.3|^6.0",
- "symfony/dom-crawler": "^4.4|^5.0|^6.0",
- "symfony/expression-language": "^4.4|^5.0|^6.0",
- "symfony/finder": "^4.4|^5.0|^6.0",
- "symfony/http-client-contracts": "^1.1|^2|^3",
- "symfony/process": "^4.4|^5.0|^6.0",
- "symfony/routing": "^4.4|^5.0|^6.0",
- "symfony/stopwatch": "^4.4|^5.0|^6.0",
- "symfony/translation": "^4.4|^5.0|^6.0",
- "symfony/translation-contracts": "^1.1|^2|^3",
- "twig/twig": "^2.13|^3.0.4"
- },
- "suggest": {
- "symfony/browser-kit": "",
- "symfony/config": "",
- "symfony/console": "",
- "symfony/dependency-injection": ""
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\HttpKernel\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Provides a structured process for converting a Request into a Response",
- "homepage": "https://symfony.com",
- "support": {
- "source": "https://github.com/symfony/http-kernel/tree/v5.4.2"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-12-29T13:20:26+00:00"
- },
- {
- "name": "symfony/mime",
- "version": "v5.4.2",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/mime.git",
- "reference": "1bfd938cf9562822c05c4d00e8f92134d3c8e42d"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/mime/zipball/1bfd938cf9562822c05c4d00e8f92134d3c8e42d",
- "reference": "1bfd938cf9562822c05c4d00e8f92134d3c8e42d",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.5",
- "symfony/deprecation-contracts": "^2.1|^3",
- "symfony/polyfill-intl-idn": "^1.10",
- "symfony/polyfill-mbstring": "^1.0",
- "symfony/polyfill-php80": "^1.16"
- },
- "conflict": {
- "egulias/email-validator": "~3.0.0",
- "phpdocumentor/reflection-docblock": "<3.2.2",
- "phpdocumentor/type-resolver": "<1.4.0",
- "symfony/mailer": "<4.4"
- },
- "require-dev": {
- "egulias/email-validator": "^2.1.10|^3.1",
- "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0",
- "symfony/dependency-injection": "^4.4|^5.0|^6.0",
- "symfony/property-access": "^4.4|^5.1|^6.0",
- "symfony/property-info": "^4.4|^5.1|^6.0",
- "symfony/serializer": "^5.2|^6.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\Mime\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Allows manipulating MIME messages",
- "homepage": "https://symfony.com",
- "keywords": [
- "mime",
- "mime-type"
- ],
- "support": {
- "source": "https://github.com/symfony/mime/tree/v5.4.2"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-12-28T17:15:56+00:00"
- },
- {
- "name": "symfony/polyfill-ctype",
- "version": "v1.24.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-ctype.git",
- "reference": "30885182c981ab175d4d034db0f6f469898070ab"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab",
- "reference": "30885182c981ab175d4d034db0f6f469898070ab",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1"
- },
- "provide": {
- "ext-ctype": "*"
- },
- "suggest": {
- "ext-ctype": "For best performance"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.23-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Ctype\\": ""
- },
- "files": [
- "bootstrap.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Gert de Pagter",
- "email": "BackEndTea@gmail.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill for ctype functions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "ctype",
- "polyfill",
- "portable"
- ],
- "support": {
- "source": "https://github.com/symfony/polyfill-ctype/tree/v1.24.0"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-10-20T20:35:02+00:00"
- },
- {
- "name": "symfony/polyfill-intl-grapheme",
- "version": "v1.24.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-intl-grapheme.git",
- "reference": "81b86b50cf841a64252b439e738e97f4a34e2783"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/81b86b50cf841a64252b439e738e97f4a34e2783",
- "reference": "81b86b50cf841a64252b439e738e97f4a34e2783",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1"
- },
- "suggest": {
- "ext-intl": "For best performance"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.23-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Intl\\Grapheme\\": ""
- },
- "files": [
- "bootstrap.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill for intl's grapheme_* functions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "grapheme",
- "intl",
- "polyfill",
- "portable",
- "shim"
- ],
- "support": {
- "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.24.0"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-11-23T21:10:46+00:00"
- },
- {
- "name": "symfony/polyfill-intl-idn",
- "version": "v1.24.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-intl-idn.git",
- "reference": "749045c69efb97c70d25d7463abba812e91f3a44"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/749045c69efb97c70d25d7463abba812e91f3a44",
- "reference": "749045c69efb97c70d25d7463abba812e91f3a44",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1",
- "symfony/polyfill-intl-normalizer": "^1.10",
- "symfony/polyfill-php72": "^1.10"
- },
- "suggest": {
- "ext-intl": "For best performance"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.23-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Intl\\Idn\\": ""
- },
- "files": [
- "bootstrap.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Laurent Bassin",
- "email": "laurent@bassin.info"
- },
- {
- "name": "Trevor Rowbotham",
- "email": "trevor.rowbotham@pm.me"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "idn",
- "intl",
- "polyfill",
- "portable",
- "shim"
- ],
- "support": {
- "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.24.0"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-09-14T14:02:44+00:00"
- },
- {
- "name": "symfony/polyfill-intl-normalizer",
- "version": "v1.24.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-intl-normalizer.git",
- "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8",
- "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1"
- },
- "suggest": {
- "ext-intl": "For best performance"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.23-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
- },
- "files": [
- "bootstrap.php"
- ],
- "classmap": [
- "Resources/stubs"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill for intl's Normalizer class and related functions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "intl",
- "normalizer",
- "polyfill",
- "portable",
- "shim"
- ],
- "support": {
- "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.24.0"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-02-19T12:13:01+00:00"
- },
- {
- "name": "symfony/polyfill-mbstring",
- "version": "v1.24.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-mbstring.git",
- "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825",
- "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1"
- },
- "provide": {
- "ext-mbstring": "*"
- },
- "suggest": {
- "ext-mbstring": "For best performance"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.23-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Mbstring\\": ""
- },
- "files": [
- "bootstrap.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill for the Mbstring extension",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "mbstring",
- "polyfill",
- "portable",
- "shim"
- ],
- "support": {
- "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.24.0"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-11-30T18:21:41+00:00"
- },
- {
- "name": "symfony/polyfill-php56",
- "version": "v1.20.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-php56.git",
- "reference": "54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675",
- "reference": "54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1"
- },
- "type": "metapackage",
- "extra": {
- "branch-alias": {
- "dev-main": "1.20-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill backporting some PHP 5.6+ features to lower PHP versions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "polyfill",
- "portable",
- "shim"
- ],
- "support": {
- "source": "https://github.com/symfony/polyfill-php56/tree/v1.20.0"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2020-10-23T14:02:19+00:00"
- },
- {
- "name": "symfony/polyfill-php72",
- "version": "v1.24.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-php72.git",
- "reference": "9a142215a36a3888e30d0a9eeea9766764e96976"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/9a142215a36a3888e30d0a9eeea9766764e96976",
- "reference": "9a142215a36a3888e30d0a9eeea9766764e96976",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.23-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Php72\\": ""
- },
- "files": [
- "bootstrap.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "polyfill",
- "portable",
- "shim"
- ],
- "support": {
- "source": "https://github.com/symfony/polyfill-php72/tree/v1.24.0"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-05-27T09:17:38+00:00"
- },
- {
- "name": "symfony/polyfill-php73",
- "version": "v1.24.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-php73.git",
- "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/cc5db0e22b3cb4111010e48785a97f670b350ca5",
- "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.23-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Php73\\": ""
- },
- "files": [
- "bootstrap.php"
- ],
- "classmap": [
- "Resources/stubs"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "polyfill",
- "portable",
- "shim"
- ],
- "support": {
- "source": "https://github.com/symfony/polyfill-php73/tree/v1.24.0"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-06-05T21:20:04+00:00"
- },
- {
- "name": "symfony/polyfill-php80",
- "version": "v1.24.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-php80.git",
- "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/57b712b08eddb97c762a8caa32c84e037892d2e9",
- "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.23-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Php80\\": ""
- },
- "files": [
- "bootstrap.php"
- ],
- "classmap": [
- "Resources/stubs"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Ion Bazan",
- "email": "ion.bazan@gmail.com"
- },
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "polyfill",
- "portable",
- "shim"
- ],
- "support": {
- "source": "https://github.com/symfony/polyfill-php80/tree/v1.24.0"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-09-13T13:58:33+00:00"
- },
- {
- "name": "symfony/polyfill-php81",
- "version": "v1.24.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-php81.git",
- "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/5de4ba2d41b15f9bd0e19b2ab9674135813ec98f",
- "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.23-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Php81\\": ""
- },
- "files": [
- "bootstrap.php"
- ],
- "classmap": [
- "Resources/stubs"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "polyfill",
- "portable",
- "shim"
- ],
- "support": {
- "source": "https://github.com/symfony/polyfill-php81/tree/v1.24.0"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-09-13T13:58:11+00:00"
- },
- {
- "name": "symfony/process",
- "version": "v5.4.2",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/process.git",
- "reference": "2b3ba8722c4aaf3e88011be5e7f48710088fb5e4"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/process/zipball/2b3ba8722c4aaf3e88011be5e7f48710088fb5e4",
- "reference": "2b3ba8722c4aaf3e88011be5e7f48710088fb5e4",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.5",
- "symfony/polyfill-php80": "^1.16"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\Process\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Executes commands in sub-processes",
- "homepage": "https://symfony.com",
- "support": {
- "source": "https://github.com/symfony/process/tree/v5.4.2"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-12-27T21:01:00+00:00"
- },
- {
- "name": "symfony/service-contracts",
- "version": "v2.5.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/service-contracts.git",
- "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/service-contracts/zipball/1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc",
- "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.5",
- "psr/container": "^1.1",
- "symfony/deprecation-contracts": "^2.1"
- },
- "conflict": {
- "ext-psr": "<1.1|>=2"
- },
- "suggest": {
- "symfony/service-implementation": ""
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "2.5-dev"
- },
- "thanks": {
- "name": "symfony/contracts",
- "url": "https://github.com/symfony/contracts"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Contracts\\Service\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Generic abstractions related to writing services",
- "homepage": "https://symfony.com",
- "keywords": [
- "abstractions",
- "contracts",
- "decoupling",
- "interfaces",
- "interoperability",
- "standards"
- ],
- "support": {
- "source": "https://github.com/symfony/service-contracts/tree/v2.5.0"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-11-04T16:48:04+00:00"
- },
- {
- "name": "symfony/string",
- "version": "v5.4.2",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/string.git",
- "reference": "e6a5d5ecf6589c5247d18e0e74e30b11dfd51a3d"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/string/zipball/e6a5d5ecf6589c5247d18e0e74e30b11dfd51a3d",
- "reference": "e6a5d5ecf6589c5247d18e0e74e30b11dfd51a3d",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.5",
- "symfony/polyfill-ctype": "~1.8",
- "symfony/polyfill-intl-grapheme": "~1.0",
- "symfony/polyfill-intl-normalizer": "~1.0",
- "symfony/polyfill-mbstring": "~1.0",
- "symfony/polyfill-php80": "~1.15"
- },
- "conflict": {
- "symfony/translation-contracts": ">=3.0"
- },
- "require-dev": {
- "symfony/error-handler": "^4.4|^5.0|^6.0",
- "symfony/http-client": "^4.4|^5.0|^6.0",
- "symfony/translation-contracts": "^1.1|^2",
- "symfony/var-exporter": "^4.4|^5.0|^6.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\String\\": ""
- },
- "files": [
- "Resources/functions.php"
- ],
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way",
- "homepage": "https://symfony.com",
- "keywords": [
- "grapheme",
- "i18n",
- "string",
- "unicode",
- "utf-8",
- "utf8"
- ],
- "support": {
- "source": "https://github.com/symfony/string/tree/v5.4.2"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-12-16T21:52:00+00:00"
- },
- {
- "name": "symfony/translation",
- "version": "v5.4.2",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/translation.git",
- "reference": "ff8bb2107b6a549dc3c5dd9c498dcc82c9c098ca"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/translation/zipball/ff8bb2107b6a549dc3c5dd9c498dcc82c9c098ca",
- "reference": "ff8bb2107b6a549dc3c5dd9c498dcc82c9c098ca",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.5",
- "symfony/deprecation-contracts": "^2.1|^3",
- "symfony/polyfill-mbstring": "~1.0",
- "symfony/polyfill-php80": "^1.16",
- "symfony/translation-contracts": "^2.3"
- },
- "conflict": {
- "symfony/config": "<4.4",
- "symfony/console": "<5.3",
- "symfony/dependency-injection": "<5.0",
- "symfony/http-kernel": "<5.0",
- "symfony/twig-bundle": "<5.0",
- "symfony/yaml": "<4.4"
- },
- "provide": {
- "symfony/translation-implementation": "2.3"
- },
- "require-dev": {
- "psr/log": "^1|^2|^3",
- "symfony/config": "^4.4|^5.0|^6.0",
- "symfony/console": "^5.4|^6.0",
- "symfony/dependency-injection": "^5.0|^6.0",
- "symfony/finder": "^4.4|^5.0|^6.0",
- "symfony/http-client-contracts": "^1.1|^2.0|^3.0",
- "symfony/http-kernel": "^5.0|^6.0",
- "symfony/intl": "^4.4|^5.0|^6.0",
- "symfony/polyfill-intl-icu": "^1.21",
- "symfony/service-contracts": "^1.1.2|^2|^3",
- "symfony/yaml": "^4.4|^5.0|^6.0"
- },
- "suggest": {
- "psr/log-implementation": "To use logging capability in translator",
- "symfony/config": "",
- "symfony/yaml": ""
- },
- "type": "library",
- "autoload": {
- "files": [
- "Resources/functions.php"
- ],
- "psr-4": {
- "Symfony\\Component\\Translation\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Provides tools to internationalize your application",
- "homepage": "https://symfony.com",
- "support": {
- "source": "https://github.com/symfony/translation/tree/v5.4.2"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-12-25T19:45:36+00:00"
- },
- {
- "name": "symfony/translation-contracts",
- "version": "v2.5.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/translation-contracts.git",
- "reference": "d28150f0f44ce854e942b671fc2620a98aae1b1e"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/d28150f0f44ce854e942b671fc2620a98aae1b1e",
- "reference": "d28150f0f44ce854e942b671fc2620a98aae1b1e",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.5"
- },
- "suggest": {
- "symfony/translation-implementation": ""
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "2.5-dev"
- },
- "thanks": {
- "name": "symfony/contracts",
- "url": "https://github.com/symfony/contracts"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Contracts\\Translation\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Generic abstractions related to translation",
- "homepage": "https://symfony.com",
- "keywords": [
- "abstractions",
- "contracts",
- "decoupling",
- "interfaces",
- "interoperability",
- "standards"
- ],
- "support": {
- "source": "https://github.com/symfony/translation-contracts/tree/v2.5.0"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-08-17T14:20:01+00:00"
- },
- {
- "name": "symfony/var-dumper",
- "version": "v5.4.2",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/var-dumper.git",
- "reference": "1b56c32c3679002b3a42384a580e16e2600f41c1"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/var-dumper/zipball/1b56c32c3679002b3a42384a580e16e2600f41c1",
- "reference": "1b56c32c3679002b3a42384a580e16e2600f41c1",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.5",
- "symfony/polyfill-mbstring": "~1.0",
- "symfony/polyfill-php80": "^1.16"
- },
- "conflict": {
- "phpunit/phpunit": "<5.4.3",
- "symfony/console": "<4.4"
- },
- "require-dev": {
- "ext-iconv": "*",
- "symfony/console": "^4.4|^5.0|^6.0",
- "symfony/process": "^4.4|^5.0|^6.0",
- "symfony/uid": "^5.1|^6.0",
- "twig/twig": "^2.13|^3.0.4"
- },
- "suggest": {
- "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).",
- "ext-intl": "To show region name in time zone dump",
- "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script"
- },
- "bin": [
- "Resources/bin/var-dump-server"
- ],
- "type": "library",
- "autoload": {
- "files": [
- "Resources/functions/dump.php"
- ],
- "psr-4": {
- "Symfony\\Component\\VarDumper\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Provides mechanisms for walking through any arbitrary PHP variable",
- "homepage": "https://symfony.com",
- "keywords": [
- "debug",
- "dump"
- ],
- "support": {
- "source": "https://github.com/symfony/var-dumper/tree/v5.4.2"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-12-29T10:10:35+00:00"
- },
- {
- "name": "tymon/jwt-auth",
- "version": "1.0.2",
- "source": {
- "type": "git",
- "url": "https://github.com/tymondesigns/jwt-auth.git",
- "reference": "e588cb719539366c0e2f6017f975379cb73e9680"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/tymondesigns/jwt-auth/zipball/e588cb719539366c0e2f6017f975379cb73e9680",
- "reference": "e588cb719539366c0e2f6017f975379cb73e9680",
- "shasum": ""
- },
- "require": {
- "illuminate/auth": "^5.2|^6|^7|^8",
- "illuminate/contracts": "^5.2|^6|^7|^8",
- "illuminate/http": "^5.2|^6|^7|^8",
- "illuminate/support": "^5.2|^6|^7|^8",
- "lcobucci/jwt": "<3.4",
- "namshi/jose": "^7.0",
- "nesbot/carbon": "^1.0|^2.0",
- "php": "^5.5.9|^7.0"
- },
- "require-dev": {
- "illuminate/console": "^5.2|^6|^7|^8",
- "illuminate/database": "^5.2|^6|^7|^8",
- "illuminate/routing": "^5.2|^6|^7|^8",
- "mockery/mockery": ">=0.9.9",
- "phpunit/phpunit": "~4.8|~6.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-develop": "1.0-dev"
- },
- "laravel": {
- "aliases": {
- "JWTAuth": "Tymon\\JWTAuth\\Facades\\JWTAuth",
- "JWTFactory": "Tymon\\JWTAuth\\Facades\\JWTFactory"
- },
- "providers": [
- "Tymon\\JWTAuth\\Providers\\LaravelServiceProvider"
- ]
- }
- },
- "autoload": {
- "psr-4": {
- "Tymon\\JWTAuth\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Sean Tymon",
- "email": "tymon148@gmail.com",
- "homepage": "https://tymon.xyz",
- "role": "Developer"
- }
- ],
- "description": "JSON Web Token Authentication for Laravel and Lumen",
- "homepage": "https://github.com/tymondesigns/jwt-auth",
- "keywords": [
- "Authentication",
- "JSON Web Token",
- "auth",
- "jwt",
- "laravel"
- ],
- "support": {
- "issues": "https://github.com/tymondesigns/jwt-auth/issues",
- "source": "https://github.com/tymondesigns/jwt-auth"
- },
- "funding": [
- {
- "url": "https://www.patreon.com/seantymon",
- "type": "patreon"
- }
- ],
- "time": "2020-11-27T12:32:42+00:00"
- },
- {
- "name": "vlucas/phpdotenv",
- "version": "v5.4.1",
- "source": {
- "type": "git",
- "url": "https://github.com/vlucas/phpdotenv.git",
- "reference": "264dce589e7ce37a7ba99cb901eed8249fbec92f"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/264dce589e7ce37a7ba99cb901eed8249fbec92f",
- "reference": "264dce589e7ce37a7ba99cb901eed8249fbec92f",
- "shasum": ""
- },
- "require": {
- "ext-pcre": "*",
- "graham-campbell/result-type": "^1.0.2",
- "php": "^7.1.3 || ^8.0",
- "phpoption/phpoption": "^1.8",
- "symfony/polyfill-ctype": "^1.23",
- "symfony/polyfill-mbstring": "^1.23.1",
- "symfony/polyfill-php80": "^1.23.1"
- },
- "require-dev": {
- "bamarni/composer-bin-plugin": "^1.4.1",
- "ext-filter": "*",
- "phpunit/phpunit": "^7.5.20 || ^8.5.21 || ^9.5.10"
- },
- "suggest": {
- "ext-filter": "Required to use the boolean validator."
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "5.4-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Dotenv\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Graham Campbell",
- "email": "hello@gjcampbell.co.uk",
- "homepage": "https://github.com/GrahamCampbell"
- },
- {
- "name": "Vance Lucas",
- "email": "vance@vancelucas.com",
- "homepage": "https://github.com/vlucas"
- }
- ],
- "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.",
- "keywords": [
- "dotenv",
- "env",
- "environment"
- ],
- "support": {
- "issues": "https://github.com/vlucas/phpdotenv/issues",
- "source": "https://github.com/vlucas/phpdotenv/tree/v5.4.1"
- },
- "funding": [
- {
- "url": "https://github.com/GrahamCampbell",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv",
- "type": "tidelift"
- }
- ],
- "time": "2021-12-12T23:22:04+00:00"
- },
- {
- "name": "voku/portable-ascii",
- "version": "1.5.6",
- "source": {
- "type": "git",
- "url": "https://github.com/voku/portable-ascii.git",
- "reference": "80953678b19901e5165c56752d087fc11526017c"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/voku/portable-ascii/zipball/80953678b19901e5165c56752d087fc11526017c",
- "reference": "80953678b19901e5165c56752d087fc11526017c",
- "shasum": ""
- },
- "require": {
- "php": ">=7.0.0"
- },
- "require-dev": {
- "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0"
- },
- "suggest": {
- "ext-intl": "Use Intl for transliterator_transliterate() support"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "voku\\": "src/voku/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Lars Moelleken",
- "homepage": "http://www.moelleken.org/"
- }
- ],
- "description": "Portable ASCII library - performance optimized (ascii) string functions for php.",
- "homepage": "https://github.com/voku/portable-ascii",
- "keywords": [
- "ascii",
- "clean",
- "php"
- ],
- "support": {
- "issues": "https://github.com/voku/portable-ascii/issues",
- "source": "https://github.com/voku/portable-ascii/tree/1.5.6"
- },
- "funding": [
- {
- "url": "https://www.paypal.me/moelleken",
- "type": "custom"
- },
- {
- "url": "https://github.com/voku",
- "type": "github"
- },
- {
- "url": "https://opencollective.com/portable-ascii",
- "type": "open_collective"
- },
- {
- "url": "https://www.patreon.com/voku",
- "type": "patreon"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii",
- "type": "tidelift"
- }
- ],
- "time": "2020-11-12T00:07:28+00:00"
- },
- {
- "name": "webmozart/assert",
- "version": "1.10.0",
- "source": {
- "type": "git",
- "url": "https://github.com/webmozarts/assert.git",
- "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25",
- "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25",
- "shasum": ""
- },
- "require": {
- "php": "^7.2 || ^8.0",
- "symfony/polyfill-ctype": "^1.8"
- },
- "conflict": {
- "phpstan/phpstan": "<0.12.20",
- "vimeo/psalm": "<4.6.1 || 4.6.2"
- },
- "require-dev": {
- "phpunit/phpunit": "^8.5.13"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.10-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Webmozart\\Assert\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Bernhard Schussek",
- "email": "bschussek@gmail.com"
- }
- ],
- "description": "Assertions to validate method input/output with nice error messages.",
- "keywords": [
- "assert",
- "check",
- "validate"
- ],
- "support": {
- "issues": "https://github.com/webmozarts/assert/issues",
- "source": "https://github.com/webmozarts/assert/tree/1.10.0"
- },
- "time": "2021-03-09T10:59:23+00:00"
- },
- {
- "name": "yajra/laravel-datatables-oracle",
- "version": "v9.18.2",
- "source": {
- "type": "git",
- "url": "https://github.com/yajra/laravel-datatables.git",
- "reference": "f4eebc1dc2b067058dfb91e7c067de862353c40f"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/yajra/laravel-datatables/zipball/f4eebc1dc2b067058dfb91e7c067de862353c40f",
- "reference": "f4eebc1dc2b067058dfb91e7c067de862353c40f",
- "shasum": ""
- },
- "require": {
- "illuminate/database": "5.8.*|^6|^7|^8",
- "illuminate/filesystem": "5.8.*|^6|^7|^8",
- "illuminate/http": "5.8.*|^6|^7|^8",
- "illuminate/support": "5.8.*|^6|^7|^8",
- "illuminate/view": "5.8.*|^6|^7|^8",
- "php": "^7.1.3|^8"
- },
- "require-dev": {
- "orchestra/testbench": "^3.8"
- },
- "suggest": {
- "yajra/laravel-datatables-buttons": "Plugin for server-side exporting of dataTables.",
- "yajra/laravel-datatables-editor": "Plugin to use DataTables Editor (requires a license).",
- "yajra/laravel-datatables-fractal": "Plugin for server-side response using Fractal.",
- "yajra/laravel-datatables-html": "Plugin for server-side HTML builder of dataTables."
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "9.0-dev"
- },
- "laravel": {
- "providers": [
- "Yajra\\DataTables\\DataTablesServiceProvider"
- ],
- "aliases": {
- "DataTables": "Yajra\\DataTables\\Facades\\DataTables"
- }
- }
- },
- "autoload": {
- "psr-4": {
- "Yajra\\DataTables\\": "src/"
- },
- "files": [
- "src/helper.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Arjay Angeles",
- "email": "aqangeles@gmail.com"
- }
- ],
- "description": "jQuery DataTables API for Laravel 4|5|6|7",
- "keywords": [
- "datatables",
- "jquery",
- "laravel"
- ],
- "support": {
- "issues": "https://github.com/yajra/laravel-datatables/issues",
- "source": "https://github.com/yajra/laravel-datatables/tree/v9.18.2"
- },
- "funding": [
- {
- "url": "https://www.paypal.me/yajra",
- "type": "custom"
- },
- {
- "url": "https://www.patreon.com/yajra",
- "type": "patreon"
- }
- ],
- "time": "2021-10-27T12:38:21+00:00"
- }
- ],
- "packages-dev": [
- {
- "name": "doctrine/instantiator",
- "version": "1.4.0",
- "source": {
- "type": "git",
- "url": "https://github.com/doctrine/instantiator.git",
- "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b",
- "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b",
- "shasum": ""
- },
- "require": {
- "php": "^7.1 || ^8.0"
- },
- "require-dev": {
- "doctrine/coding-standard": "^8.0",
- "ext-pdo": "*",
- "ext-phar": "*",
- "phpbench/phpbench": "^0.13 || 1.0.0-alpha2",
- "phpstan/phpstan": "^0.12",
- "phpstan/phpstan-phpunit": "^0.12",
- "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Marco Pivetta",
- "email": "ocramius@gmail.com",
- "homepage": "https://ocramius.github.io/"
- }
- ],
- "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
- "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
- "keywords": [
- "constructor",
- "instantiate"
- ],
- "support": {
- "issues": "https://github.com/doctrine/instantiator/issues",
- "source": "https://github.com/doctrine/instantiator/tree/1.4.0"
- },
- "funding": [
- {
- "url": "https://www.doctrine-project.org/sponsorship.html",
- "type": "custom"
- },
- {
- "url": "https://www.patreon.com/phpdoctrine",
- "type": "patreon"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
- "type": "tidelift"
- }
- ],
- "time": "2020-11-10T18:47:58+00:00"
- },
- {
- "name": "fakerphp/faker",
- "version": "v1.17.0",
- "source": {
- "type": "git",
- "url": "https://github.com/FakerPHP/Faker.git",
- "reference": "b85e9d44eae8c52cca7aa0939483611f7232b669"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/b85e9d44eae8c52cca7aa0939483611f7232b669",
- "reference": "b85e9d44eae8c52cca7aa0939483611f7232b669",
- "shasum": ""
- },
- "require": {
- "php": "^7.1 || ^8.0",
- "psr/container": "^1.0 || ^2.0",
- "symfony/deprecation-contracts": "^2.2 || ^3.0"
- },
- "conflict": {
- "fzaninotto/faker": "*"
- },
- "require-dev": {
- "bamarni/composer-bin-plugin": "^1.4.1",
- "ext-intl": "*",
- "symfony/phpunit-bridge": "^4.4 || ^5.2"
- },
- "suggest": {
- "ext-curl": "Required by Faker\\Provider\\Image to download images.",
- "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.",
- "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.",
- "ext-mbstring": "Required for multibyte Unicode string functionality."
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "v1.17-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Faker\\": "src/Faker/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "François Zaninotto"
- }
- ],
- "description": "Faker is a PHP library that generates fake data for you.",
- "keywords": [
- "data",
- "faker",
- "fixtures"
- ],
- "support": {
- "issues": "https://github.com/FakerPHP/Faker/issues",
- "source": "https://github.com/FakerPHP/Faker/tree/v1.17.0"
- },
- "time": "2021-12-05T17:14:47+00:00"
- },
- {
- "name": "hamcrest/hamcrest-php",
- "version": "v2.0.1",
- "source": {
- "type": "git",
- "url": "https://github.com/hamcrest/hamcrest-php.git",
- "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3",
- "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3",
- "shasum": ""
- },
- "require": {
- "php": "^5.3|^7.0|^8.0"
- },
- "replace": {
- "cordoval/hamcrest-php": "*",
- "davedevelopment/hamcrest-php": "*",
- "kodova/hamcrest-php": "*"
- },
- "require-dev": {
- "phpunit/php-file-iterator": "^1.4 || ^2.0",
- "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.1-dev"
- }
- },
- "autoload": {
- "classmap": [
- "hamcrest"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "description": "This is the PHP port of Hamcrest Matchers",
- "keywords": [
- "test"
- ],
- "support": {
- "issues": "https://github.com/hamcrest/hamcrest-php/issues",
- "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1"
- },
- "time": "2020-07-09T08:09:16+00:00"
- },
- {
- "name": "mockery/mockery",
- "version": "1.4.4",
- "source": {
- "type": "git",
- "url": "https://github.com/mockery/mockery.git",
- "reference": "e01123a0e847d52d186c5eb4b9bf58b0c6d00346"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/mockery/mockery/zipball/e01123a0e847d52d186c5eb4b9bf58b0c6d00346",
- "reference": "e01123a0e847d52d186c5eb4b9bf58b0c6d00346",
- "shasum": ""
- },
- "require": {
- "hamcrest/hamcrest-php": "^2.0.1",
- "lib-pcre": ">=7.0",
- "php": "^7.3 || ^8.0"
- },
- "conflict": {
- "phpunit/phpunit": "<8.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^8.5 || ^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.4.x-dev"
- }
- },
- "autoload": {
- "psr-0": {
- "Mockery": "library/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Pádraic Brady",
- "email": "padraic.brady@gmail.com",
- "homepage": "http://blog.astrumfutura.com"
- },
- {
- "name": "Dave Marshall",
- "email": "dave.marshall@atstsolutions.co.uk",
- "homepage": "http://davedevelopment.co.uk"
- }
- ],
- "description": "Mockery is a simple yet flexible PHP mock object framework",
- "homepage": "https://github.com/mockery/mockery",
- "keywords": [
- "BDD",
- "TDD",
- "library",
- "mock",
- "mock objects",
- "mockery",
- "stub",
- "test",
- "test double",
- "testing"
- ],
- "support": {
- "issues": "https://github.com/mockery/mockery/issues",
- "source": "https://github.com/mockery/mockery/tree/1.4.4"
- },
- "time": "2021-09-13T15:28:59+00:00"
- },
- {
- "name": "myclabs/deep-copy",
- "version": "1.10.2",
- "source": {
- "type": "git",
- "url": "https://github.com/myclabs/DeepCopy.git",
- "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220",
- "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220",
- "shasum": ""
- },
- "require": {
- "php": "^7.1 || ^8.0"
- },
- "replace": {
- "myclabs/deep-copy": "self.version"
- },
- "require-dev": {
- "doctrine/collections": "^1.0",
- "doctrine/common": "^2.6",
- "phpunit/phpunit": "^7.1"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "DeepCopy\\": "src/DeepCopy/"
- },
- "files": [
- "src/DeepCopy/deep_copy.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "Create deep copies (clones) of your objects",
- "keywords": [
- "clone",
- "copy",
- "duplicate",
- "object",
- "object graph"
- ],
- "support": {
- "issues": "https://github.com/myclabs/DeepCopy/issues",
- "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2"
- },
- "funding": [
- {
- "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
- "type": "tidelift"
- }
- ],
- "time": "2020-11-13T09:40:50+00:00"
- },
- {
- "name": "phar-io/manifest",
- "version": "2.0.3",
- "source": {
- "type": "git",
- "url": "https://github.com/phar-io/manifest.git",
- "reference": "97803eca37d319dfa7826cc2437fc020857acb53"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53",
- "reference": "97803eca37d319dfa7826cc2437fc020857acb53",
- "shasum": ""
- },
- "require": {
- "ext-dom": "*",
- "ext-phar": "*",
- "ext-xmlwriter": "*",
- "phar-io/version": "^3.0.1",
- "php": "^7.2 || ^8.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0.x-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Arne Blankerts",
- "email": "arne@blankerts.de",
- "role": "Developer"
- },
- {
- "name": "Sebastian Heuer",
- "email": "sebastian@phpeople.de",
- "role": "Developer"
- },
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "Developer"
- }
- ],
- "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
- "support": {
- "issues": "https://github.com/phar-io/manifest/issues",
- "source": "https://github.com/phar-io/manifest/tree/2.0.3"
- },
- "time": "2021-07-20T11:28:43+00:00"
- },
- {
- "name": "phar-io/version",
- "version": "3.1.0",
- "source": {
- "type": "git",
- "url": "https://github.com/phar-io/version.git",
- "reference": "bae7c545bef187884426f042434e561ab1ddb182"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182",
- "reference": "bae7c545bef187884426f042434e561ab1ddb182",
- "shasum": ""
- },
- "require": {
- "php": "^7.2 || ^8.0"
- },
- "type": "library",
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Arne Blankerts",
- "email": "arne@blankerts.de",
- "role": "Developer"
- },
- {
- "name": "Sebastian Heuer",
- "email": "sebastian@phpeople.de",
- "role": "Developer"
- },
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "Developer"
- }
- ],
- "description": "Library for handling version information and constraints",
- "support": {
- "issues": "https://github.com/phar-io/version/issues",
- "source": "https://github.com/phar-io/version/tree/3.1.0"
- },
- "time": "2021-02-23T14:00:09+00:00"
- },
- {
- "name": "phpdocumentor/reflection-common",
- "version": "2.2.0",
- "source": {
- "type": "git",
- "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
- "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b",
- "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b",
- "shasum": ""
- },
- "require": {
- "php": "^7.2 || ^8.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-2.x": "2.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "phpDocumentor\\Reflection\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Jaap van Otterdijk",
- "email": "opensource@ijaap.nl"
- }
- ],
- "description": "Common reflection classes used by phpdocumentor to reflect the code structure",
- "homepage": "http://www.phpdoc.org",
- "keywords": [
- "FQSEN",
- "phpDocumentor",
- "phpdoc",
- "reflection",
- "static analysis"
- ],
- "support": {
- "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues",
- "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x"
- },
- "time": "2020-06-27T09:03:43+00:00"
- },
- {
- "name": "phpdocumentor/reflection-docblock",
- "version": "5.3.0",
- "source": {
- "type": "git",
- "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
- "reference": "622548b623e81ca6d78b721c5e029f4ce664f170"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170",
- "reference": "622548b623e81ca6d78b721c5e029f4ce664f170",
- "shasum": ""
- },
- "require": {
- "ext-filter": "*",
- "php": "^7.2 || ^8.0",
- "phpdocumentor/reflection-common": "^2.2",
- "phpdocumentor/type-resolver": "^1.3",
- "webmozart/assert": "^1.9.1"
- },
- "require-dev": {
- "mockery/mockery": "~1.3.2",
- "psalm/phar": "^4.8"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "5.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "phpDocumentor\\Reflection\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Mike van Riel",
- "email": "me@mikevanriel.com"
- },
- {
- "name": "Jaap van Otterdijk",
- "email": "account@ijaap.nl"
- }
- ],
- "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
- "support": {
- "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
- "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0"
- },
- "time": "2021-10-19T17:43:47+00:00"
- },
- {
- "name": "phpdocumentor/type-resolver",
- "version": "1.6.0",
- "source": {
- "type": "git",
- "url": "https://github.com/phpDocumentor/TypeResolver.git",
- "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/93ebd0014cab80c4ea9f5e297ea48672f1b87706",
- "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706",
- "shasum": ""
- },
- "require": {
- "php": "^7.2 || ^8.0",
- "phpdocumentor/reflection-common": "^2.0"
- },
- "require-dev": {
- "ext-tokenizer": "*",
- "psalm/phar": "^4.8"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-1.x": "1.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "phpDocumentor\\Reflection\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Mike van Riel",
- "email": "me@mikevanriel.com"
- }
- ],
- "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
- "support": {
- "issues": "https://github.com/phpDocumentor/TypeResolver/issues",
- "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.0"
- },
- "time": "2022-01-04T19:58:01+00:00"
- },
- {
- "name": "phpspec/prophecy",
- "version": "v1.15.0",
- "source": {
- "type": "git",
- "url": "https://github.com/phpspec/prophecy.git",
- "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13",
- "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13",
- "shasum": ""
- },
- "require": {
- "doctrine/instantiator": "^1.2",
- "php": "^7.2 || ~8.0, <8.2",
- "phpdocumentor/reflection-docblock": "^5.2",
- "sebastian/comparator": "^3.0 || ^4.0",
- "sebastian/recursion-context": "^3.0 || ^4.0"
- },
- "require-dev": {
- "phpspec/phpspec": "^6.0 || ^7.0",
- "phpunit/phpunit": "^8.0 || ^9.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Prophecy\\": "src/Prophecy"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Konstantin Kudryashov",
- "email": "ever.zet@gmail.com",
- "homepage": "http://everzet.com"
- },
- {
- "name": "Marcello Duarte",
- "email": "marcello.duarte@gmail.com"
- }
- ],
- "description": "Highly opinionated mocking framework for PHP 5.3+",
- "homepage": "https://github.com/phpspec/prophecy",
- "keywords": [
- "Double",
- "Dummy",
- "fake",
- "mock",
- "spy",
- "stub"
- ],
- "support": {
- "issues": "https://github.com/phpspec/prophecy/issues",
- "source": "https://github.com/phpspec/prophecy/tree/v1.15.0"
- },
- "time": "2021-12-08T12:19:24+00:00"
- },
- {
- "name": "phpunit/php-code-coverage",
- "version": "9.2.10",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
- "reference": "d5850aaf931743067f4bfc1ae4cbd06468400687"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/d5850aaf931743067f4bfc1ae4cbd06468400687",
- "reference": "d5850aaf931743067f4bfc1ae4cbd06468400687",
- "shasum": ""
- },
- "require": {
- "ext-dom": "*",
- "ext-libxml": "*",
- "ext-xmlwriter": "*",
- "nikic/php-parser": "^4.13.0",
- "php": ">=7.3",
- "phpunit/php-file-iterator": "^3.0.3",
- "phpunit/php-text-template": "^2.0.2",
- "sebastian/code-unit-reverse-lookup": "^2.0.2",
- "sebastian/complexity": "^2.0",
- "sebastian/environment": "^5.1.2",
- "sebastian/lines-of-code": "^1.0.3",
- "sebastian/version": "^3.0.1",
- "theseer/tokenizer": "^1.2.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "suggest": {
- "ext-pcov": "*",
- "ext-xdebug": "*"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "9.2-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
- "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
- "keywords": [
- "coverage",
- "testing",
- "xunit"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
- "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.10"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2021-12-05T09:12:13+00:00"
- },
- {
- "name": "phpunit/php-file-iterator",
- "version": "3.0.6",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
- "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
- "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "FilterIterator implementation that filters files based on a list of suffixes.",
- "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
- "keywords": [
- "filesystem",
- "iterator"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
- "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2021-12-02T12:48:52+00:00"
- },
- {
- "name": "phpunit/php-invoker",
- "version": "3.1.1",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/php-invoker.git",
- "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
- "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "ext-pcntl": "*",
- "phpunit/phpunit": "^9.3"
- },
- "suggest": {
- "ext-pcntl": "*"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.1-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Invoke callables with a timeout",
- "homepage": "https://github.com/sebastianbergmann/php-invoker/",
- "keywords": [
- "process"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/php-invoker/issues",
- "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-09-28T05:58:55+00:00"
- },
- {
- "name": "phpunit/php-text-template",
- "version": "2.0.4",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/php-text-template.git",
- "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
- "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Simple template engine.",
- "homepage": "https://github.com/sebastianbergmann/php-text-template/",
- "keywords": [
- "template"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/php-text-template/issues",
- "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-10-26T05:33:50+00:00"
- },
- {
- "name": "phpunit/php-timer",
- "version": "5.0.3",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/php-timer.git",
- "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
- "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "5.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Utility class for timing",
- "homepage": "https://github.com/sebastianbergmann/php-timer/",
- "keywords": [
- "timer"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/php-timer/issues",
- "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-10-26T13:16:10+00:00"
- },
- {
- "name": "phpunit/phpunit",
- "version": "9.5.11",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "2406855036db1102126125537adb1406f7242fdd"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/2406855036db1102126125537adb1406f7242fdd",
- "reference": "2406855036db1102126125537adb1406f7242fdd",
- "shasum": ""
- },
- "require": {
- "doctrine/instantiator": "^1.3.1",
- "ext-dom": "*",
- "ext-json": "*",
- "ext-libxml": "*",
- "ext-mbstring": "*",
- "ext-xml": "*",
- "ext-xmlwriter": "*",
- "myclabs/deep-copy": "^1.10.1",
- "phar-io/manifest": "^2.0.3",
- "phar-io/version": "^3.0.2",
- "php": ">=7.3",
- "phpspec/prophecy": "^1.12.1",
- "phpunit/php-code-coverage": "^9.2.7",
- "phpunit/php-file-iterator": "^3.0.5",
- "phpunit/php-invoker": "^3.1.1",
- "phpunit/php-text-template": "^2.0.3",
- "phpunit/php-timer": "^5.0.2",
- "sebastian/cli-parser": "^1.0.1",
- "sebastian/code-unit": "^1.0.6",
- "sebastian/comparator": "^4.0.5",
- "sebastian/diff": "^4.0.3",
- "sebastian/environment": "^5.1.3",
- "sebastian/exporter": "^4.0.3",
- "sebastian/global-state": "^5.0.1",
- "sebastian/object-enumerator": "^4.0.3",
- "sebastian/resource-operations": "^3.0.3",
- "sebastian/type": "^2.3.4",
- "sebastian/version": "^3.0.2"
- },
- "require-dev": {
- "ext-pdo": "*",
- "phpspec/prophecy-phpunit": "^2.0.1"
- },
- "suggest": {
- "ext-soap": "*",
- "ext-xdebug": "*"
- },
- "bin": [
- "phpunit"
- ],
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "9.5-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ],
- "files": [
- "src/Framework/Assert/Functions.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "The PHP Unit Testing framework.",
- "homepage": "https://phpunit.de/",
- "keywords": [
- "phpunit",
- "testing",
- "xunit"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/phpunit/issues",
- "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.11"
- },
- "funding": [
- {
- "url": "https://phpunit.de/sponsors.html",
- "type": "custom"
- },
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2021-12-25T07:07:57+00:00"
- },
- {
- "name": "sebastian/cli-parser",
- "version": "1.0.1",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/cli-parser.git",
- "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2",
- "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Library for parsing CLI options",
- "homepage": "https://github.com/sebastianbergmann/cli-parser",
- "support": {
- "issues": "https://github.com/sebastianbergmann/cli-parser/issues",
- "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-09-28T06:08:49+00:00"
- },
- {
- "name": "sebastian/code-unit",
- "version": "1.0.8",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/code-unit.git",
- "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120",
- "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Collection of value objects that represent the PHP code units",
- "homepage": "https://github.com/sebastianbergmann/code-unit",
- "support": {
- "issues": "https://github.com/sebastianbergmann/code-unit/issues",
- "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-10-26T13:08:54+00:00"
- },
- {
- "name": "sebastian/code-unit-reverse-lookup",
- "version": "2.0.3",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
- "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
- "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Looks up which function or method a line of code belongs to",
- "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
- "support": {
- "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues",
- "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-09-28T05:30:19+00:00"
- },
- {
- "name": "sebastian/comparator",
- "version": "4.0.6",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/comparator.git",
- "reference": "55f4261989e546dc112258c7a75935a81a7ce382"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382",
- "reference": "55f4261989e546dc112258c7a75935a81a7ce382",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3",
- "sebastian/diff": "^4.0",
- "sebastian/exporter": "^4.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "4.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- },
- {
- "name": "Jeff Welch",
- "email": "whatthejeff@gmail.com"
- },
- {
- "name": "Volker Dusch",
- "email": "github@wallbash.com"
- },
- {
- "name": "Bernhard Schussek",
- "email": "bschussek@2bepublished.at"
- }
- ],
- "description": "Provides the functionality to compare PHP values for equality",
- "homepage": "https://github.com/sebastianbergmann/comparator",
- "keywords": [
- "comparator",
- "compare",
- "equality"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/comparator/issues",
- "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-10-26T15:49:45+00:00"
- },
- {
- "name": "sebastian/complexity",
- "version": "2.0.2",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/complexity.git",
- "reference": "739b35e53379900cc9ac327b2147867b8b6efd88"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88",
- "reference": "739b35e53379900cc9ac327b2147867b8b6efd88",
- "shasum": ""
- },
- "require": {
- "nikic/php-parser": "^4.7",
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Library for calculating the complexity of PHP code units",
- "homepage": "https://github.com/sebastianbergmann/complexity",
- "support": {
- "issues": "https://github.com/sebastianbergmann/complexity/issues",
- "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-10-26T15:52:27+00:00"
- },
- {
- "name": "sebastian/diff",
- "version": "4.0.4",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/diff.git",
- "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d",
- "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3",
- "symfony/process": "^4.2 || ^5"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "4.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- },
- {
- "name": "Kore Nordmann",
- "email": "mail@kore-nordmann.de"
- }
- ],
- "description": "Diff implementation",
- "homepage": "https://github.com/sebastianbergmann/diff",
- "keywords": [
- "diff",
- "udiff",
- "unidiff",
- "unified diff"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/diff/issues",
- "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-10-26T13:10:38+00:00"
- },
- {
- "name": "sebastian/environment",
- "version": "5.1.3",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/environment.git",
- "reference": "388b6ced16caa751030f6a69e588299fa09200ac"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac",
- "reference": "388b6ced16caa751030f6a69e588299fa09200ac",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "suggest": {
- "ext-posix": "*"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "5.1-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Provides functionality to handle HHVM/PHP environments",
- "homepage": "http://www.github.com/sebastianbergmann/environment",
- "keywords": [
- "Xdebug",
- "environment",
- "hhvm"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/environment/issues",
- "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-09-28T05:52:38+00:00"
- },
- {
- "name": "sebastian/exporter",
- "version": "4.0.4",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/exporter.git",
- "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9",
- "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3",
- "sebastian/recursion-context": "^4.0"
- },
- "require-dev": {
- "ext-mbstring": "*",
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "4.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- },
- {
- "name": "Jeff Welch",
- "email": "whatthejeff@gmail.com"
- },
- {
- "name": "Volker Dusch",
- "email": "github@wallbash.com"
- },
- {
- "name": "Adam Harvey",
- "email": "aharvey@php.net"
- },
- {
- "name": "Bernhard Schussek",
- "email": "bschussek@gmail.com"
- }
- ],
- "description": "Provides the functionality to export PHP variables for visualization",
- "homepage": "https://www.github.com/sebastianbergmann/exporter",
- "keywords": [
- "export",
- "exporter"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/exporter/issues",
- "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2021-11-11T14:18:36+00:00"
- },
- {
- "name": "sebastian/global-state",
- "version": "5.0.3",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/global-state.git",
- "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/23bd5951f7ff26f12d4e3242864df3e08dec4e49",
- "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3",
- "sebastian/object-reflector": "^2.0",
- "sebastian/recursion-context": "^4.0"
- },
- "require-dev": {
- "ext-dom": "*",
- "phpunit/phpunit": "^9.3"
- },
- "suggest": {
- "ext-uopz": "*"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "5.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Snapshotting of global state",
- "homepage": "http://www.github.com/sebastianbergmann/global-state",
- "keywords": [
- "global state"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/global-state/issues",
- "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.3"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2021-06-11T13:31:12+00:00"
- },
- {
- "name": "sebastian/lines-of-code",
- "version": "1.0.3",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/lines-of-code.git",
- "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc",
- "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc",
- "shasum": ""
- },
- "require": {
- "nikic/php-parser": "^4.6",
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Library for counting the lines of code in PHP source code",
- "homepage": "https://github.com/sebastianbergmann/lines-of-code",
- "support": {
- "issues": "https://github.com/sebastianbergmann/lines-of-code/issues",
- "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-11-28T06:42:11+00:00"
- },
- {
- "name": "sebastian/object-enumerator",
- "version": "4.0.4",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/object-enumerator.git",
- "reference": "5c9eeac41b290a3712d88851518825ad78f45c71"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71",
- "reference": "5c9eeac41b290a3712d88851518825ad78f45c71",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3",
- "sebastian/object-reflector": "^2.0",
- "sebastian/recursion-context": "^4.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "4.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Traverses array structures and object graphs to enumerate all referenced objects",
- "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
- "support": {
- "issues": "https://github.com/sebastianbergmann/object-enumerator/issues",
- "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-10-26T13:12:34+00:00"
- },
- {
- "name": "sebastian/object-reflector",
- "version": "2.0.4",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/object-reflector.git",
- "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
- "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Allows reflection of object attributes, including inherited and non-public ones",
- "homepage": "https://github.com/sebastianbergmann/object-reflector/",
- "support": {
- "issues": "https://github.com/sebastianbergmann/object-reflector/issues",
- "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-10-26T13:14:26+00:00"
- },
- {
- "name": "sebastian/recursion-context",
- "version": "4.0.4",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/recursion-context.git",
- "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172",
- "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "4.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- },
- {
- "name": "Jeff Welch",
- "email": "whatthejeff@gmail.com"
- },
- {
- "name": "Adam Harvey",
- "email": "aharvey@php.net"
- }
- ],
- "description": "Provides functionality to recursively process PHP variables",
- "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
- "support": {
- "issues": "https://github.com/sebastianbergmann/recursion-context/issues",
- "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-10-26T13:17:30+00:00"
- },
- {
- "name": "sebastian/resource-operations",
- "version": "3.0.3",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/resource-operations.git",
- "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8",
- "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Provides a list of PHP built-in functions that operate on resources",
- "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
- "support": {
- "issues": "https://github.com/sebastianbergmann/resource-operations/issues",
- "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-09-28T06:45:17+00:00"
- },
- {
- "name": "sebastian/type",
- "version": "2.3.4",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/type.git",
- "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b8cd8a1c753c90bc1a0f5372170e3e489136f914",
- "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.3-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Collection of value objects that represent the types of the PHP type system",
- "homepage": "https://github.com/sebastianbergmann/type",
- "support": {
- "issues": "https://github.com/sebastianbergmann/type/issues",
- "source": "https://github.com/sebastianbergmann/type/tree/2.3.4"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2021-06-15T12:49:02+00:00"
- },
- {
- "name": "sebastian/version",
- "version": "3.0.2",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/version.git",
- "reference": "c6c1022351a901512170118436c764e473f6de8c"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c",
- "reference": "c6c1022351a901512170118436c764e473f6de8c",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Library that helps with managing the version number of Git-hosted PHP projects",
- "homepage": "https://github.com/sebastianbergmann/version",
- "support": {
- "issues": "https://github.com/sebastianbergmann/version/issues",
- "source": "https://github.com/sebastianbergmann/version/tree/3.0.2"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-09-28T06:39:44+00:00"
- },
- {
- "name": "theseer/tokenizer",
- "version": "1.2.1",
- "source": {
- "type": "git",
- "url": "https://github.com/theseer/tokenizer.git",
- "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e",
- "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e",
- "shasum": ""
- },
- "require": {
- "ext-dom": "*",
- "ext-tokenizer": "*",
- "ext-xmlwriter": "*",
- "php": "^7.2 || ^8.0"
- },
- "type": "library",
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Arne Blankerts",
- "email": "arne@blankerts.de",
- "role": "Developer"
- }
- ],
- "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
- "support": {
- "issues": "https://github.com/theseer/tokenizer/issues",
- "source": "https://github.com/theseer/tokenizer/tree/1.2.1"
- },
- "funding": [
- {
- "url": "https://github.com/theseer",
- "type": "github"
- }
- ],
- "time": "2021-07-28T10:34:58+00:00"
- }
- ],
- "aliases": [],
- "minimum-stability": "dev",
- "stability-flags": [],
- "prefer-stable": true,
- "prefer-lowest": false,
- "platform": {
- "php": "^7.3|^8.0"
- },
- "platform-dev": [],
- "plugin-api-version": "2.0.0"
-}
+{
+ "_readme": [
+ "This file locks the dependencies of your project to a known state",
+ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
+ "This file is @generated automatically"
+ ],
+ "content-hash": "5786843a0231b1c697264b0d752d8529",
+ "packages": [
+ {
+ "name": "brick/math",
+ "version": "0.11.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/brick/math.git",
+ "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/brick/math/zipball/0ad82ce168c82ba30d1c01ec86116ab52f589478",
+ "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^8.0"
+ },
+ "require-dev": {
+ "php-coveralls/php-coveralls": "^2.2",
+ "phpunit/phpunit": "^9.0",
+ "vimeo/psalm": "5.0.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Brick\\Math\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Arbitrary-precision arithmetic library",
+ "keywords": [
+ "Arbitrary-precision",
+ "BigInteger",
+ "BigRational",
+ "arithmetic",
+ "bigdecimal",
+ "bignum",
+ "brick",
+ "math"
+ ],
+ "support": {
+ "issues": "https://github.com/brick/math/issues",
+ "source": "https://github.com/brick/math/tree/0.11.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/BenMorel",
+ "type": "github"
+ }
+ ],
+ "time": "2023-01-15T23:15:59+00:00"
+ },
+ {
+ "name": "carbonphp/carbon-doctrine-types",
+ "version": "3.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/CarbonPHP/carbon-doctrine-types.git",
+ "reference": "a31d3358a2a5d6ae947df1691d1f321418a5f3d5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/CarbonPHP/carbon-doctrine-types/zipball/a31d3358a2a5d6ae947df1691d1f321418a5f3d5",
+ "reference": "a31d3358a2a5d6ae947df1691d1f321418a5f3d5",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^8.1"
+ },
+ "conflict": {
+ "doctrine/dbal": "<4.0.0 || >=5.0.0"
+ },
+ "require-dev": {
+ "doctrine/dbal": "^4.0.0",
+ "nesbot/carbon": "^2.71.0 || ^3.0.0",
+ "phpunit/phpunit": "^10.3"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Carbon\\Doctrine\\": "src/Carbon/Doctrine/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "KyleKatarn",
+ "email": "kylekatarnls@gmail.com"
+ }
+ ],
+ "description": "Types to use Carbon in Doctrine",
+ "keywords": [
+ "carbon",
+ "date",
+ "datetime",
+ "doctrine",
+ "time"
+ ],
+ "support": {
+ "issues": "https://github.com/CarbonPHP/carbon-doctrine-types/issues",
+ "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/3.1.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/kylekatarnls",
+ "type": "github"
+ },
+ {
+ "url": "https://opencollective.com/Carbon",
+ "type": "open_collective"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-12-10T15:33:53+00:00"
+ },
+ {
+ "name": "classpreloader/classpreloader",
+ "version": "4.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ClassPreloader/ClassPreloader.git",
+ "reference": "af9284543aedb45ed58359374918141c0ac7ae34"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ClassPreloader/ClassPreloader/zipball/af9284543aedb45ed58359374918141c0ac7ae34",
+ "reference": "af9284543aedb45ed58359374918141c0ac7ae34",
+ "shasum": ""
+ },
+ "require": {
+ "ext-tokenizer": "*",
+ "nikic/php-parser": "^4.10.3",
+ "php": "^7.0.8 || ^8.0"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.4.1",
+ "graham-campbell/analyzer": "^2.4.3 || ^3.0.4",
+ "phpunit/phpunit": "^6.5.14 || ^7.5.20 || ^8.5.19"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "ClassPreloader\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com"
+ },
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk"
+ }
+ ],
+ "description": "Helps class loading performance by generating a single PHP file containing all of the autoloaded files for a specific use case",
+ "keywords": [
+ "autoload",
+ "class",
+ "preload",
+ "preloader"
+ ],
+ "support": {
+ "issues": "https://github.com/ClassPreloader/ClassPreloader/issues",
+ "source": "https://github.com/ClassPreloader/ClassPreloader/tree/4.2.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/classpreloader/classpreloader",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-08-28T21:56:17+00:00"
+ },
+ {
+ "name": "doctrine/inflector",
+ "version": "2.0.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/inflector.git",
+ "reference": "f9301a5b2fb1216b2b08f02ba04dc45423db6bff"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/inflector/zipball/f9301a5b2fb1216b2b08f02ba04dc45423db6bff",
+ "reference": "f9301a5b2fb1216b2b08f02ba04dc45423db6bff",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 || ^8.0"
+ },
+ "require-dev": {
+ "doctrine/coding-standard": "^11.0",
+ "phpstan/phpstan": "^1.8",
+ "phpstan/phpstan-phpunit": "^1.1",
+ "phpstan/phpstan-strict-rules": "^1.3",
+ "phpunit/phpunit": "^8.5 || ^9.5",
+ "vimeo/psalm": "^4.25 || ^5.4"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Inflector\\": "lib/Doctrine/Inflector"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Benjamin Eberlei",
+ "email": "kontakt@beberlei.de"
+ },
+ {
+ "name": "Jonathan Wage",
+ "email": "jonwage@gmail.com"
+ },
+ {
+ "name": "Johannes Schmitt",
+ "email": "schmittjoh@gmail.com"
+ }
+ ],
+ "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.",
+ "homepage": "https://www.doctrine-project.org/projects/inflector.html",
+ "keywords": [
+ "inflection",
+ "inflector",
+ "lowercase",
+ "manipulation",
+ "php",
+ "plural",
+ "singular",
+ "strings",
+ "uppercase",
+ "words"
+ ],
+ "support": {
+ "issues": "https://github.com/doctrine/inflector/issues",
+ "source": "https://github.com/doctrine/inflector/tree/2.0.8"
+ },
+ "funding": [
+ {
+ "url": "https://www.doctrine-project.org/sponsorship.html",
+ "type": "custom"
+ },
+ {
+ "url": "https://www.patreon.com/phpdoctrine",
+ "type": "patreon"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-06-16T13:40:37+00:00"
+ },
+ {
+ "name": "doctrine/lexer",
+ "version": "1.2.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/lexer.git",
+ "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/lexer/zipball/c268e882d4dbdd85e36e4ad69e02dc284f89d229",
+ "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1 || ^8.0"
+ },
+ "require-dev": {
+ "doctrine/coding-standard": "^9.0",
+ "phpstan/phpstan": "^1.3",
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
+ "vimeo/psalm": "^4.11"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Johannes Schmitt",
+ "email": "schmittjoh@gmail.com"
+ }
+ ],
+ "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.",
+ "homepage": "https://www.doctrine-project.org/projects/lexer.html",
+ "keywords": [
+ "annotations",
+ "docblock",
+ "lexer",
+ "parser",
+ "php"
+ ],
+ "support": {
+ "issues": "https://github.com/doctrine/lexer/issues",
+ "source": "https://github.com/doctrine/lexer/tree/1.2.3"
+ },
+ "funding": [
+ {
+ "url": "https://www.doctrine-project.org/sponsorship.html",
+ "type": "custom"
+ },
+ {
+ "url": "https://www.patreon.com/phpdoctrine",
+ "type": "patreon"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-02-28T11:07:21+00:00"
+ },
+ {
+ "name": "dragonmantank/cron-expression",
+ "version": "v3.3.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/dragonmantank/cron-expression.git",
+ "reference": "adfb1f505deb6384dc8b39804c5065dd3c8c8c0a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/adfb1f505deb6384dc8b39804c5065dd3c8c8c0a",
+ "reference": "adfb1f505deb6384dc8b39804c5065dd3c8c8c0a",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2|^8.0",
+ "webmozart/assert": "^1.0"
+ },
+ "replace": {
+ "mtdowling/cron-expression": "^1.0"
+ },
+ "require-dev": {
+ "phpstan/extension-installer": "^1.0",
+ "phpstan/phpstan": "^1.0",
+ "phpstan/phpstan-webmozart-assert": "^1.0",
+ "phpunit/phpunit": "^7.0|^8.0|^9.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Cron\\": "src/Cron/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Chris Tankersley",
+ "email": "chris@ctankersley.com",
+ "homepage": "https://github.com/dragonmantank"
+ }
+ ],
+ "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due",
+ "keywords": [
+ "cron",
+ "schedule"
+ ],
+ "support": {
+ "issues": "https://github.com/dragonmantank/cron-expression/issues",
+ "source": "https://github.com/dragonmantank/cron-expression/tree/v3.3.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/dragonmantank",
+ "type": "github"
+ }
+ ],
+ "time": "2023-08-10T19:36:49+00:00"
+ },
+ {
+ "name": "egulias/email-validator",
+ "version": "2.1.25",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/egulias/EmailValidator.git",
+ "reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/0dbf5d78455d4d6a41d186da50adc1122ec066f4",
+ "reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/lexer": "^1.0.1",
+ "php": ">=5.5",
+ "symfony/polyfill-intl-idn": "^1.10"
+ },
+ "require-dev": {
+ "dominicsayers/isemail": "^3.0.7",
+ "phpunit/phpunit": "^4.8.36|^7.5.15",
+ "satooshi/php-coveralls": "^1.0.1"
+ },
+ "suggest": {
+ "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Egulias\\EmailValidator\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Eduardo Gulias Davis"
+ }
+ ],
+ "description": "A library for validating emails against several RFCs",
+ "homepage": "https://github.com/egulias/EmailValidator",
+ "keywords": [
+ "email",
+ "emailvalidation",
+ "emailvalidator",
+ "validation",
+ "validator"
+ ],
+ "support": {
+ "issues": "https://github.com/egulias/EmailValidator/issues",
+ "source": "https://github.com/egulias/EmailValidator/tree/2.1.25"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/egulias",
+ "type": "github"
+ }
+ ],
+ "time": "2020-12-29T14:50:06+00:00"
+ },
+ {
+ "name": "flipbox/lumen-generator",
+ "version": "8.2.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/flipboxstudio/lumen-generator.git",
+ "reference": "d9946a97e1ac5534ff1506184db674c1850c2ece"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/flipboxstudio/lumen-generator/zipball/d9946a97e1ac5534ff1506184db674c1850c2ece",
+ "reference": "d9946a97e1ac5534ff1506184db674c1850c2ece",
+ "shasum": ""
+ },
+ "require": {
+ "classpreloader/classpreloader": "^3.0|^4.0",
+ "illuminate/console": "^5.5|^6.0|^7.0|^8.0|^8.17",
+ "illuminate/filesystem": "^5.5|^6.0|^7.0|^8.0|^8.17",
+ "illuminate/support": "^5.5|^6.0|^7.0|^8.0|^8.17",
+ "psy/psysh": "0.9.*|0.10.*",
+ "symfony/var-dumper": "^4.2|^4.3|^5.0|^5.1|^5.2"
+ },
+ "suggest": {
+ "anik/form-request": "Required to use form request in Lumen."
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Flipbox\\LumenGenerator\\": "src/LumenGenerator/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Krisan Alfa Timur",
+ "email": "krisan47@gmail.com"
+ }
+ ],
+ "description": "A Lumen Generator You Are Missing",
+ "support": {
+ "issues": "https://github.com/flipboxstudio/lumen-generator/issues",
+ "source": "https://github.com/flipboxstudio/lumen-generator/tree/8.2.2"
+ },
+ "time": "2021-10-18T12:30:09+00:00"
+ },
+ {
+ "name": "graham-campbell/result-type",
+ "version": "v1.1.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/GrahamCampbell/Result-Type.git",
+ "reference": "fbd48bce38f73f8a4ec8583362e732e4095e5862"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/fbd48bce38f73f8a4ec8583362e732e4095e5862",
+ "reference": "fbd48bce38f73f8a4ec8583362e732e4095e5862",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2.5 || ^8.0",
+ "phpoption/phpoption": "^1.9.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "GrahamCampbell\\ResultType\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ }
+ ],
+ "description": "An Implementation Of The Result Type",
+ "keywords": [
+ "Graham Campbell",
+ "GrahamCampbell",
+ "Result Type",
+ "Result-Type",
+ "result"
+ ],
+ "support": {
+ "issues": "https://github.com/GrahamCampbell/Result-Type/issues",
+ "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-11-12T22:16:48+00:00"
+ },
+ {
+ "name": "guzzlehttp/guzzle",
+ "version": "7.8.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/guzzle/guzzle.git",
+ "reference": "41042bc7ab002487b876a0683fc8dce04ddce104"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/guzzle/guzzle/zipball/41042bc7ab002487b876a0683fc8dce04ddce104",
+ "reference": "41042bc7ab002487b876a0683fc8dce04ddce104",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "guzzlehttp/promises": "^1.5.3 || ^2.0.1",
+ "guzzlehttp/psr7": "^1.9.1 || ^2.5.1",
+ "php": "^7.2.5 || ^8.0",
+ "psr/http-client": "^1.0",
+ "symfony/deprecation-contracts": "^2.2 || ^3.0"
+ },
+ "provide": {
+ "psr/http-client-implementation": "1.0"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.8.2",
+ "ext-curl": "*",
+ "php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999",
+ "php-http/message-factory": "^1.1",
+ "phpunit/phpunit": "^8.5.36 || ^9.6.15",
+ "psr/log": "^1.1 || ^2.0 || ^3.0"
+ },
+ "suggest": {
+ "ext-curl": "Required for CURL handler support",
+ "ext-intl": "Required for Internationalized Domain Name (IDN) support",
+ "psr/log": "Required for using the Log middleware"
+ },
+ "type": "library",
+ "extra": {
+ "bamarni-bin": {
+ "bin-links": true,
+ "forward-command": false
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/functions_include.php"
+ ],
+ "psr-4": {
+ "GuzzleHttp\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ },
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ },
+ {
+ "name": "Jeremy Lindblom",
+ "email": "jeremeamia@gmail.com",
+ "homepage": "https://github.com/jeremeamia"
+ },
+ {
+ "name": "George Mponos",
+ "email": "gmponos@gmail.com",
+ "homepage": "https://github.com/gmponos"
+ },
+ {
+ "name": "Tobias Nyholm",
+ "email": "tobias.nyholm@gmail.com",
+ "homepage": "https://github.com/Nyholm"
+ },
+ {
+ "name": "Márk Sági-Kazár",
+ "email": "mark.sagikazar@gmail.com",
+ "homepage": "https://github.com/sagikazarmark"
+ },
+ {
+ "name": "Tobias Schultze",
+ "email": "webmaster@tubo-world.de",
+ "homepage": "https://github.com/Tobion"
+ }
+ ],
+ "description": "Guzzle is a PHP HTTP client library",
+ "keywords": [
+ "client",
+ "curl",
+ "framework",
+ "http",
+ "http client",
+ "psr-18",
+ "psr-7",
+ "rest",
+ "web service"
+ ],
+ "support": {
+ "issues": "https://github.com/guzzle/guzzle/issues",
+ "source": "https://github.com/guzzle/guzzle/tree/7.8.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/Nyholm",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-12-03T20:35:24+00:00"
+ },
+ {
+ "name": "guzzlehttp/promises",
+ "version": "2.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/guzzle/promises.git",
+ "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/guzzle/promises/zipball/bbff78d96034045e58e13dedd6ad91b5d1253223",
+ "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2.5 || ^8.0"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.8.2",
+ "phpunit/phpunit": "^8.5.36 || ^9.6.15"
+ },
+ "type": "library",
+ "extra": {
+ "bamarni-bin": {
+ "bin-links": true,
+ "forward-command": false
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "GuzzleHttp\\Promise\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ },
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ },
+ {
+ "name": "Tobias Nyholm",
+ "email": "tobias.nyholm@gmail.com",
+ "homepage": "https://github.com/Nyholm"
+ },
+ {
+ "name": "Tobias Schultze",
+ "email": "webmaster@tubo-world.de",
+ "homepage": "https://github.com/Tobion"
+ }
+ ],
+ "description": "Guzzle promises library",
+ "keywords": [
+ "promise"
+ ],
+ "support": {
+ "issues": "https://github.com/guzzle/promises/issues",
+ "source": "https://github.com/guzzle/promises/tree/2.0.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/Nyholm",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-12-03T20:19:20+00:00"
+ },
+ {
+ "name": "guzzlehttp/psr7",
+ "version": "2.6.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/guzzle/psr7.git",
+ "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/guzzle/psr7/zipball/45b30f99ac27b5ca93cb4831afe16285f57b8221",
+ "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2.5 || ^8.0",
+ "psr/http-factory": "^1.0",
+ "psr/http-message": "^1.1 || ^2.0",
+ "ralouphie/getallheaders": "^3.0"
+ },
+ "provide": {
+ "psr/http-factory-implementation": "1.0",
+ "psr/http-message-implementation": "1.0"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.8.2",
+ "http-interop/http-factory-tests": "^0.9",
+ "phpunit/phpunit": "^8.5.36 || ^9.6.15"
+ },
+ "suggest": {
+ "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
+ },
+ "type": "library",
+ "extra": {
+ "bamarni-bin": {
+ "bin-links": true,
+ "forward-command": false
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "GuzzleHttp\\Psr7\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ },
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ },
+ {
+ "name": "George Mponos",
+ "email": "gmponos@gmail.com",
+ "homepage": "https://github.com/gmponos"
+ },
+ {
+ "name": "Tobias Nyholm",
+ "email": "tobias.nyholm@gmail.com",
+ "homepage": "https://github.com/Nyholm"
+ },
+ {
+ "name": "Márk Sági-Kazár",
+ "email": "mark.sagikazar@gmail.com",
+ "homepage": "https://github.com/sagikazarmark"
+ },
+ {
+ "name": "Tobias Schultze",
+ "email": "webmaster@tubo-world.de",
+ "homepage": "https://github.com/Tobion"
+ },
+ {
+ "name": "Márk Sági-Kazár",
+ "email": "mark.sagikazar@gmail.com",
+ "homepage": "https://sagikazarmark.hu"
+ }
+ ],
+ "description": "PSR-7 message implementation that also provides common utility methods",
+ "keywords": [
+ "http",
+ "message",
+ "psr-7",
+ "request",
+ "response",
+ "stream",
+ "uri",
+ "url"
+ ],
+ "support": {
+ "issues": "https://github.com/guzzle/psr7/issues",
+ "source": "https://github.com/guzzle/psr7/tree/2.6.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/Nyholm",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-12-03T20:05:35+00:00"
+ },
+ {
+ "name": "illuminate/auth",
+ "version": "v8.83.27",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/illuminate/auth.git",
+ "reference": "28e3e57f777685018374bb59bbaa54598dbdf441"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/illuminate/auth/zipball/28e3e57f777685018374bb59bbaa54598dbdf441",
+ "reference": "28e3e57f777685018374bb59bbaa54598dbdf441",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/collections": "^8.0",
+ "illuminate/contracts": "^8.0",
+ "illuminate/http": "^8.0",
+ "illuminate/macroable": "^8.0",
+ "illuminate/queue": "^8.0",
+ "illuminate/support": "^8.0",
+ "php": "^7.3|^8.0"
+ },
+ "suggest": {
+ "illuminate/console": "Required to use the auth:clear-resets command (^8.0).",
+ "illuminate/queue": "Required to fire login / logout events (^8.0).",
+ "illuminate/session": "Required to use the session based guard (^8.0)."
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "8.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Illuminate\\Auth\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ }
+ ],
+ "description": "The Illuminate Auth package.",
+ "homepage": "https://laravel.com",
+ "support": {
+ "issues": "https://github.com/laravel/framework/issues",
+ "source": "https://github.com/laravel/framework"
+ },
+ "time": "2022-09-21T21:30:03+00:00"
+ },
+ {
+ "name": "illuminate/broadcasting",
+ "version": "v8.83.27",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/illuminate/broadcasting.git",
+ "reference": "d7c0c81bcc679c294746b161f4b834997e904cf4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/illuminate/broadcasting/zipball/d7c0c81bcc679c294746b161f4b834997e904cf4",
+ "reference": "d7c0c81bcc679c294746b161f4b834997e904cf4",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "illuminate/bus": "^8.0",
+ "illuminate/collections": "^8.0",
+ "illuminate/contracts": "^8.0",
+ "illuminate/queue": "^8.0",
+ "illuminate/support": "^8.0",
+ "php": "^7.3|^8.0",
+ "psr/log": "^1.0|^2.0"
+ },
+ "suggest": {
+ "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).",
+ "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^4.0|^5.0|^6.0|^7.0)."
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "8.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Illuminate\\Broadcasting\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ }
+ ],
+ "description": "The Illuminate Broadcasting package.",
+ "homepage": "https://laravel.com",
+ "support": {
+ "issues": "https://github.com/laravel/framework/issues",
+ "source": "https://github.com/laravel/framework"
+ },
+ "time": "2022-01-06T14:28:26+00:00"
+ },
+ {
+ "name": "illuminate/bus",
+ "version": "v8.83.27",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/illuminate/bus.git",
+ "reference": "d2a8ae4bfd881086e55455e470776358eab27eae"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/illuminate/bus/zipball/d2a8ae4bfd881086e55455e470776358eab27eae",
+ "reference": "d2a8ae4bfd881086e55455e470776358eab27eae",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/collections": "^8.0",
+ "illuminate/contracts": "^8.0",
+ "illuminate/pipeline": "^8.0",
+ "illuminate/support": "^8.0",
+ "php": "^7.3|^8.0"
+ },
+ "suggest": {
+ "illuminate/queue": "Required to use closures when chaining jobs (^7.0)."
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "8.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Illuminate\\Bus\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ }
+ ],
+ "description": "The Illuminate Bus package.",
+ "homepage": "https://laravel.com",
+ "support": {
+ "issues": "https://github.com/laravel/framework/issues",
+ "source": "https://github.com/laravel/framework"
+ },
+ "time": "2022-03-07T15:02:42+00:00"
+ },
+ {
+ "name": "illuminate/cache",
+ "version": "v8.83.27",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/illuminate/cache.git",
+ "reference": "7ae5b3661413dad7264b5c69037190d766bae50f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/illuminate/cache/zipball/7ae5b3661413dad7264b5c69037190d766bae50f",
+ "reference": "7ae5b3661413dad7264b5c69037190d766bae50f",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/collections": "^8.0",
+ "illuminate/contracts": "^8.0",
+ "illuminate/macroable": "^8.0",
+ "illuminate/support": "^8.0",
+ "php": "^7.3|^8.0"
+ },
+ "provide": {
+ "psr/simple-cache-implementation": "1.0"
+ },
+ "suggest": {
+ "ext-memcached": "Required to use the memcache cache driver.",
+ "illuminate/database": "Required to use the database cache driver (^8.0).",
+ "illuminate/filesystem": "Required to use the file cache driver (^8.0).",
+ "illuminate/redis": "Required to use the redis cache driver (^8.0).",
+ "symfony/cache": "Required to PSR-6 cache bridge (^5.4)."
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "8.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Illuminate\\Cache\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ }
+ ],
+ "description": "The Illuminate Cache package.",
+ "homepage": "https://laravel.com",
+ "support": {
+ "issues": "https://github.com/laravel/framework/issues",
+ "source": "https://github.com/laravel/framework"
+ },
+ "time": "2022-07-22T14:58:32+00:00"
+ },
+ {
+ "name": "illuminate/collections",
+ "version": "v8.83.27",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/illuminate/collections.git",
+ "reference": "705a4e1ef93cd492c45b9b3e7911cccc990a07f4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/illuminate/collections/zipball/705a4e1ef93cd492c45b9b3e7911cccc990a07f4",
+ "reference": "705a4e1ef93cd492c45b9b3e7911cccc990a07f4",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/contracts": "^8.0",
+ "illuminate/macroable": "^8.0",
+ "php": "^7.3|^8.0"
+ },
+ "suggest": {
+ "symfony/var-dumper": "Required to use the dump method (^5.4)."
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "8.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "helpers.php"
+ ],
+ "psr-4": {
+ "Illuminate\\Support\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ }
+ ],
+ "description": "The Illuminate Collections package.",
+ "homepage": "https://laravel.com",
+ "support": {
+ "issues": "https://github.com/laravel/framework/issues",
+ "source": "https://github.com/laravel/framework"
+ },
+ "time": "2022-06-23T15:29:49+00:00"
+ },
+ {
+ "name": "illuminate/config",
+ "version": "v8.83.27",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/illuminate/config.git",
+ "reference": "feac56ab7a5c70cf2dc60dffe4323eb9851f51a8"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/illuminate/config/zipball/feac56ab7a5c70cf2dc60dffe4323eb9851f51a8",
+ "reference": "feac56ab7a5c70cf2dc60dffe4323eb9851f51a8",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/collections": "^8.0",
+ "illuminate/contracts": "^8.0",
+ "php": "^7.3|^8.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "8.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Illuminate\\Config\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ }
+ ],
+ "description": "The Illuminate Config package.",
+ "homepage": "https://laravel.com",
+ "support": {
+ "issues": "https://github.com/laravel/framework/issues",
+ "source": "https://github.com/laravel/framework"
+ },
+ "time": "2022-01-31T15:57:46+00:00"
+ },
+ {
+ "name": "illuminate/console",
+ "version": "v8.83.27",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/illuminate/console.git",
+ "reference": "4aaa93223eb3bd8119157c95f58c022967826035"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/illuminate/console/zipball/4aaa93223eb3bd8119157c95f58c022967826035",
+ "reference": "4aaa93223eb3bd8119157c95f58c022967826035",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/collections": "^8.0",
+ "illuminate/contracts": "^8.0",
+ "illuminate/macroable": "^8.0",
+ "illuminate/support": "^8.0",
+ "php": "^7.3|^8.0",
+ "symfony/console": "^5.4",
+ "symfony/process": "^5.4"
+ },
+ "suggest": {
+ "dragonmantank/cron-expression": "Required to use scheduler (^3.0.2).",
+ "guzzlehttp/guzzle": "Required to use the ping methods on schedules (^6.5.5|^7.0.1).",
+ "illuminate/bus": "Required to use the scheduled job dispatcher (^8.0).",
+ "illuminate/container": "Required to use the scheduler (^8.0).",
+ "illuminate/filesystem": "Required to use the generator command (^8.0).",
+ "illuminate/queue": "Required to use closures for scheduled jobs (^8.0)."
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "8.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Illuminate\\Console\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ }
+ ],
+ "description": "The Illuminate Console package.",
+ "homepage": "https://laravel.com",
+ "support": {
+ "issues": "https://github.com/laravel/framework/issues",
+ "source": "https://github.com/laravel/framework"
+ },
+ "time": "2022-04-21T22:14:18+00:00"
+ },
+ {
+ "name": "illuminate/container",
+ "version": "v8.83.27",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/illuminate/container.git",
+ "reference": "14062628d05f75047c5a1360b9350028427d568e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/illuminate/container/zipball/14062628d05f75047c5a1360b9350028427d568e",
+ "reference": "14062628d05f75047c5a1360b9350028427d568e",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/contracts": "^8.0",
+ "php": "^7.3|^8.0",
+ "psr/container": "^1.0"
+ },
+ "provide": {
+ "psr/container-implementation": "1.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "8.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Illuminate\\Container\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ }
+ ],
+ "description": "The Illuminate Container package.",
+ "homepage": "https://laravel.com",
+ "support": {
+ "issues": "https://github.com/laravel/framework/issues",
+ "source": "https://github.com/laravel/framework"
+ },
+ "time": "2022-02-02T21:03:35+00:00"
+ },
+ {
+ "name": "illuminate/contracts",
+ "version": "v8.83.27",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/illuminate/contracts.git",
+ "reference": "5e0fd287a1b22a6b346a9f7cd484d8cf0234585d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/illuminate/contracts/zipball/5e0fd287a1b22a6b346a9f7cd484d8cf0234585d",
+ "reference": "5e0fd287a1b22a6b346a9f7cd484d8cf0234585d",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.3|^8.0",
+ "psr/container": "^1.0",
+ "psr/simple-cache": "^1.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "8.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Illuminate\\Contracts\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ }
+ ],
+ "description": "The Illuminate Contracts package.",
+ "homepage": "https://laravel.com",
+ "support": {
+ "issues": "https://github.com/laravel/framework/issues",
+ "source": "https://github.com/laravel/framework"
+ },
+ "time": "2022-01-13T14:47:47+00:00"
+ },
+ {
+ "name": "illuminate/database",
+ "version": "v8.83.27",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/illuminate/database.git",
+ "reference": "1a5b0e4e6913415464fa2aab554a38b9e6fa44b1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/illuminate/database/zipball/1a5b0e4e6913415464fa2aab554a38b9e6fa44b1",
+ "reference": "1a5b0e4e6913415464fa2aab554a38b9e6fa44b1",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "illuminate/collections": "^8.0",
+ "illuminate/container": "^8.0",
+ "illuminate/contracts": "^8.0",
+ "illuminate/macroable": "^8.0",
+ "illuminate/support": "^8.0",
+ "php": "^7.3|^8.0",
+ "symfony/console": "^5.4"
+ },
+ "suggest": {
+ "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.13.3|^3.1.4).",
+ "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).",
+ "illuminate/console": "Required to use the database commands (^8.0).",
+ "illuminate/events": "Required to use the observers with Eloquent (^8.0).",
+ "illuminate/filesystem": "Required to use the migrations (^8.0).",
+ "illuminate/pagination": "Required to paginate the result set (^8.0).",
+ "symfony/finder": "Required to use Eloquent model factories (^5.4)."
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "8.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Illuminate\\Database\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ }
+ ],
+ "description": "The Illuminate Database package.",
+ "homepage": "https://laravel.com",
+ "keywords": [
+ "database",
+ "laravel",
+ "orm",
+ "sql"
+ ],
+ "support": {
+ "issues": "https://github.com/laravel/framework/issues",
+ "source": "https://github.com/laravel/framework"
+ },
+ "time": "2022-08-31T16:16:06+00:00"
+ },
+ {
+ "name": "illuminate/encryption",
+ "version": "v8.83.27",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/illuminate/encryption.git",
+ "reference": "00280dc6aa204b1b6c6d4bf75936d122bd856c15"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/illuminate/encryption/zipball/00280dc6aa204b1b6c6d4bf75936d122bd856c15",
+ "reference": "00280dc6aa204b1b6c6d4bf75936d122bd856c15",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "ext-mbstring": "*",
+ "ext-openssl": "*",
+ "illuminate/contracts": "^8.0",
+ "illuminate/support": "^8.0",
+ "php": "^7.3|^8.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "8.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Illuminate\\Encryption\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ }
+ ],
+ "description": "The Illuminate Encryption package.",
+ "homepage": "https://laravel.com",
+ "support": {
+ "issues": "https://github.com/laravel/framework/issues",
+ "source": "https://github.com/laravel/framework"
+ },
+ "time": "2022-03-14T18:47:47+00:00"
+ },
+ {
+ "name": "illuminate/events",
+ "version": "v8.83.27",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/illuminate/events.git",
+ "reference": "b7f06cafb6c09581617f2ca05d69e9b159e5a35d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/illuminate/events/zipball/b7f06cafb6c09581617f2ca05d69e9b159e5a35d",
+ "reference": "b7f06cafb6c09581617f2ca05d69e9b159e5a35d",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/bus": "^8.0",
+ "illuminate/collections": "^8.0",
+ "illuminate/container": "^8.0",
+ "illuminate/contracts": "^8.0",
+ "illuminate/macroable": "^8.0",
+ "illuminate/support": "^8.0",
+ "php": "^7.3|^8.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "8.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "functions.php"
+ ],
+ "psr-4": {
+ "Illuminate\\Events\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ }
+ ],
+ "description": "The Illuminate Events package.",
+ "homepage": "https://laravel.com",
+ "support": {
+ "issues": "https://github.com/laravel/framework/issues",
+ "source": "https://github.com/laravel/framework"
+ },
+ "time": "2021-09-15T14:32:50+00:00"
+ },
+ {
+ "name": "illuminate/filesystem",
+ "version": "v8.83.27",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/illuminate/filesystem.git",
+ "reference": "73db3e9a233ed587ba54f52ab8580f3c7bc872b2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/illuminate/filesystem/zipball/73db3e9a233ed587ba54f52ab8580f3c7bc872b2",
+ "reference": "73db3e9a233ed587ba54f52ab8580f3c7bc872b2",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/collections": "^8.0",
+ "illuminate/contracts": "^8.0",
+ "illuminate/macroable": "^8.0",
+ "illuminate/support": "^8.0",
+ "php": "^7.3|^8.0",
+ "symfony/finder": "^5.4"
+ },
+ "suggest": {
+ "ext-ftp": "Required to use the Flysystem FTP driver.",
+ "illuminate/http": "Required for handling uploaded files (^7.0).",
+ "league/flysystem": "Required to use the Flysystem local and FTP drivers (^1.1).",
+ "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^1.0).",
+ "league/flysystem-cached-adapter": "Required to use the Flysystem cache (^1.0).",
+ "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0).",
+ "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).",
+ "symfony/filesystem": "Required to enable support for relative symbolic links (^5.4).",
+ "symfony/mime": "Required to enable support for guessing extensions (^5.4)."
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "8.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Illuminate\\Filesystem\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ }
+ ],
+ "description": "The Illuminate Filesystem package.",
+ "homepage": "https://laravel.com",
+ "support": {
+ "issues": "https://github.com/laravel/framework/issues",
+ "source": "https://github.com/laravel/framework"
+ },
+ "time": "2022-01-15T15:00:40+00:00"
+ },
+ {
+ "name": "illuminate/hashing",
+ "version": "v8.83.27",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/illuminate/hashing.git",
+ "reference": "2617f4de8d0150a3f8641b086fafac8c1e0cdbf2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/illuminate/hashing/zipball/2617f4de8d0150a3f8641b086fafac8c1e0cdbf2",
+ "reference": "2617f4de8d0150a3f8641b086fafac8c1e0cdbf2",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/contracts": "^8.0",
+ "illuminate/support": "^8.0",
+ "php": "^7.3|^8.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "8.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Illuminate\\Hashing\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ }
+ ],
+ "description": "The Illuminate Hashing package.",
+ "homepage": "https://laravel.com",
+ "support": {
+ "issues": "https://github.com/laravel/framework/issues",
+ "source": "https://github.com/laravel/framework"
+ },
+ "time": "2021-10-22T13:20:42+00:00"
+ },
+ {
+ "name": "illuminate/http",
+ "version": "v8.83.27",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/illuminate/http.git",
+ "reference": "38b8b0c8ca5d5231df9c515f3a3e7aac5f0da9f4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/illuminate/http/zipball/38b8b0c8ca5d5231df9c515f3a3e7aac5f0da9f4",
+ "reference": "38b8b0c8ca5d5231df9c515f3a3e7aac5f0da9f4",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "illuminate/collections": "^8.0",
+ "illuminate/macroable": "^8.0",
+ "illuminate/session": "^8.0",
+ "illuminate/support": "^8.0",
+ "php": "^7.3|^8.0",
+ "symfony/http-foundation": "^5.4",
+ "symfony/http-kernel": "^5.4",
+ "symfony/mime": "^5.4"
+ },
+ "suggest": {
+ "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().",
+ "guzzlehttp/guzzle": "Required to use the HTTP Client (^6.5.5|^7.0.1)."
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "8.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Illuminate\\Http\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ }
+ ],
+ "description": "The Illuminate Http package.",
+ "homepage": "https://laravel.com",
+ "support": {
+ "issues": "https://github.com/laravel/framework/issues",
+ "source": "https://github.com/laravel/framework"
+ },
+ "time": "2022-06-10T18:50:29+00:00"
+ },
+ {
+ "name": "illuminate/log",
+ "version": "v8.83.27",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/illuminate/log.git",
+ "reference": "1dbdc6aca24d1d2b5903f865bb206039d4b800b2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/illuminate/log/zipball/1dbdc6aca24d1d2b5903f865bb206039d4b800b2",
+ "reference": "1dbdc6aca24d1d2b5903f865bb206039d4b800b2",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/contracts": "^8.0",
+ "illuminate/support": "^8.0",
+ "monolog/monolog": "^2.0",
+ "php": "^7.3|^8.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "8.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Illuminate\\Log\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ }
+ ],
+ "description": "The Illuminate Log package.",
+ "homepage": "https://laravel.com",
+ "support": {
+ "issues": "https://github.com/laravel/framework/issues",
+ "source": "https://github.com/laravel/framework"
+ },
+ "time": "2022-01-10T15:22:22+00:00"
+ },
+ {
+ "name": "illuminate/macroable",
+ "version": "v8.83.27",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/illuminate/macroable.git",
+ "reference": "aed81891a6e046fdee72edd497f822190f61c162"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/illuminate/macroable/zipball/aed81891a6e046fdee72edd497f822190f61c162",
+ "reference": "aed81891a6e046fdee72edd497f822190f61c162",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.3|^8.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "8.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Illuminate\\Support\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ }
+ ],
+ "description": "The Illuminate Macroable package.",
+ "homepage": "https://laravel.com",
+ "support": {
+ "issues": "https://github.com/laravel/framework/issues",
+ "source": "https://github.com/laravel/framework"
+ },
+ "time": "2021-11-16T13:57:03+00:00"
+ },
+ {
+ "name": "illuminate/pagination",
+ "version": "v8.83.27",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/illuminate/pagination.git",
+ "reference": "16fe8dc35f9d18c58a3471469af656a02e9ab692"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/illuminate/pagination/zipball/16fe8dc35f9d18c58a3471469af656a02e9ab692",
+ "reference": "16fe8dc35f9d18c58a3471469af656a02e9ab692",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "illuminate/collections": "^8.0",
+ "illuminate/contracts": "^8.0",
+ "illuminate/support": "^8.0",
+ "php": "^7.3|^8.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "8.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Illuminate\\Pagination\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ }
+ ],
+ "description": "The Illuminate Pagination package.",
+ "homepage": "https://laravel.com",
+ "support": {
+ "issues": "https://github.com/laravel/framework/issues",
+ "source": "https://github.com/laravel/framework"
+ },
+ "time": "2022-06-27T13:26:06+00:00"
+ },
+ {
+ "name": "illuminate/pipeline",
+ "version": "v8.83.27",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/illuminate/pipeline.git",
+ "reference": "23aeff5b26ae4aee3f370835c76bd0f4e93f71d2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/illuminate/pipeline/zipball/23aeff5b26ae4aee3f370835c76bd0f4e93f71d2",
+ "reference": "23aeff5b26ae4aee3f370835c76bd0f4e93f71d2",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/contracts": "^8.0",
+ "illuminate/support": "^8.0",
+ "php": "^7.3|^8.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "8.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Illuminate\\Pipeline\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ }
+ ],
+ "description": "The Illuminate Pipeline package.",
+ "homepage": "https://laravel.com",
+ "support": {
+ "issues": "https://github.com/laravel/framework/issues",
+ "source": "https://github.com/laravel/framework"
+ },
+ "time": "2021-03-26T18:39:16+00:00"
+ },
+ {
+ "name": "illuminate/queue",
+ "version": "v8.83.27",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/illuminate/queue.git",
+ "reference": "0023daabf67743f7a2bd8328ca2b5537d93e4ae7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/illuminate/queue/zipball/0023daabf67743f7a2bd8328ca2b5537d93e4ae7",
+ "reference": "0023daabf67743f7a2bd8328ca2b5537d93e4ae7",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "illuminate/collections": "^8.0",
+ "illuminate/console": "^8.0",
+ "illuminate/container": "^8.0",
+ "illuminate/contracts": "^8.0",
+ "illuminate/database": "^8.0",
+ "illuminate/filesystem": "^8.0",
+ "illuminate/pipeline": "^8.0",
+ "illuminate/support": "^8.0",
+ "laravel/serializable-closure": "^1.0",
+ "opis/closure": "^3.6",
+ "php": "^7.3|^8.0",
+ "ramsey/uuid": "^4.2.2",
+ "symfony/process": "^5.4"
+ },
+ "suggest": {
+ "aws/aws-sdk-php": "Required to use the SQS queue driver and DynamoDb failed job storage (^3.198.1).",
+ "ext-pcntl": "Required to use all features of the queue worker.",
+ "ext-posix": "Required to use all features of the queue worker.",
+ "illuminate/redis": "Required to use the Redis queue driver (^8.0).",
+ "pda/pheanstalk": "Required to use the Beanstalk queue driver (^4.0)."
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "8.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Illuminate\\Queue\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ }
+ ],
+ "description": "The Illuminate Queue package.",
+ "homepage": "https://laravel.com",
+ "support": {
+ "issues": "https://github.com/laravel/framework/issues",
+ "source": "https://github.com/laravel/framework"
+ },
+ "time": "2022-07-21T19:36:12+00:00"
+ },
+ {
+ "name": "illuminate/session",
+ "version": "v8.83.27",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/illuminate/session.git",
+ "reference": "9c9988d7229d888c098eebbbb9fcb8c68580411c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/illuminate/session/zipball/9c9988d7229d888c098eebbbb9fcb8c68580411c",
+ "reference": "9c9988d7229d888c098eebbbb9fcb8c68580411c",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "illuminate/collections": "^8.0",
+ "illuminate/contracts": "^8.0",
+ "illuminate/filesystem": "^8.0",
+ "illuminate/support": "^8.0",
+ "php": "^7.3|^8.0",
+ "symfony/finder": "^5.4",
+ "symfony/http-foundation": "^5.4"
+ },
+ "suggest": {
+ "illuminate/console": "Required to use the session:table command (^8.0)."
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "8.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Illuminate\\Session\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ }
+ ],
+ "description": "The Illuminate Session package.",
+ "homepage": "https://laravel.com",
+ "support": {
+ "issues": "https://github.com/laravel/framework/issues",
+ "source": "https://github.com/laravel/framework"
+ },
+ "time": "2022-01-13T18:28:06+00:00"
+ },
+ {
+ "name": "illuminate/support",
+ "version": "v8.83.27",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/illuminate/support.git",
+ "reference": "1c79242468d3bbd9a0f7477df34f9647dde2a09b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/illuminate/support/zipball/1c79242468d3bbd9a0f7477df34f9647dde2a09b",
+ "reference": "1c79242468d3bbd9a0f7477df34f9647dde2a09b",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/inflector": "^1.4|^2.0",
+ "ext-json": "*",
+ "ext-mbstring": "*",
+ "illuminate/collections": "^8.0",
+ "illuminate/contracts": "^8.0",
+ "illuminate/macroable": "^8.0",
+ "nesbot/carbon": "^2.53.1",
+ "php": "^7.3|^8.0",
+ "voku/portable-ascii": "^1.6.1"
+ },
+ "conflict": {
+ "tightenco/collect": "<5.5.33"
+ },
+ "suggest": {
+ "illuminate/filesystem": "Required to use the composer class (^8.0).",
+ "league/commonmark": "Required to use Str::markdown() and Stringable::markdown() (^1.3|^2.0.2).",
+ "ramsey/uuid": "Required to use Str::uuid() (^4.2.2).",
+ "symfony/process": "Required to use the composer class (^5.4).",
+ "symfony/var-dumper": "Required to use the dd function (^5.4).",
+ "vlucas/phpdotenv": "Required to use the Env class and env helper (^5.4.1)."
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "8.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "helpers.php"
+ ],
+ "psr-4": {
+ "Illuminate\\Support\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ }
+ ],
+ "description": "The Illuminate Support package.",
+ "homepage": "https://laravel.com",
+ "support": {
+ "issues": "https://github.com/laravel/framework/issues",
+ "source": "https://github.com/laravel/framework"
+ },
+ "time": "2022-09-21T21:30:03+00:00"
+ },
+ {
+ "name": "illuminate/testing",
+ "version": "v8.83.27",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/illuminate/testing.git",
+ "reference": "1c9ec9902df3b7a38b983bbf2242ce3c088de400"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/illuminate/testing/zipball/1c9ec9902df3b7a38b983bbf2242ce3c088de400",
+ "reference": "1c9ec9902df3b7a38b983bbf2242ce3c088de400",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/collections": "^8.0",
+ "illuminate/contracts": "^8.0",
+ "illuminate/macroable": "^8.0",
+ "illuminate/support": "^8.0",
+ "php": "^7.3|^8.0"
+ },
+ "suggest": {
+ "brianium/paratest": "Required to run tests in parallel (^6.0).",
+ "illuminate/console": "Required to assert console commands (^8.0).",
+ "illuminate/database": "Required to assert databases (^8.0).",
+ "illuminate/http": "Required to assert responses (^8.0).",
+ "mockery/mockery": "Required to use mocking (^1.4.4).",
+ "phpunit/phpunit": "Required to use assertions and run tests (^8.5.19|^9.5.8)."
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "8.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Illuminate\\Testing\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ }
+ ],
+ "description": "The Illuminate Testing package.",
+ "homepage": "https://laravel.com",
+ "support": {
+ "issues": "https://github.com/laravel/framework/issues",
+ "source": "https://github.com/laravel/framework"
+ },
+ "time": "2022-05-24T14:00:18+00:00"
+ },
+ {
+ "name": "illuminate/translation",
+ "version": "v8.83.27",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/illuminate/translation.git",
+ "reference": "e119d1e55351bd846579c333dd24f9a042b724b2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/illuminate/translation/zipball/e119d1e55351bd846579c333dd24f9a042b724b2",
+ "reference": "e119d1e55351bd846579c333dd24f9a042b724b2",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "illuminate/collections": "^8.0",
+ "illuminate/contracts": "^8.0",
+ "illuminate/filesystem": "^8.0",
+ "illuminate/macroable": "^8.0",
+ "illuminate/support": "^8.0",
+ "php": "^7.3|^8.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "8.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Illuminate\\Translation\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ }
+ ],
+ "description": "The Illuminate Translation package.",
+ "homepage": "https://laravel.com",
+ "support": {
+ "issues": "https://github.com/laravel/framework/issues",
+ "source": "https://github.com/laravel/framework"
+ },
+ "time": "2022-05-02T13:55:33+00:00"
+ },
+ {
+ "name": "illuminate/validation",
+ "version": "v8.83.27",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/illuminate/validation.git",
+ "reference": "bb104f15545a55664755f58a278c7013f835918a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/illuminate/validation/zipball/bb104f15545a55664755f58a278c7013f835918a",
+ "reference": "bb104f15545a55664755f58a278c7013f835918a",
+ "shasum": ""
+ },
+ "require": {
+ "egulias/email-validator": "^2.1.10",
+ "ext-json": "*",
+ "illuminate/collections": "^8.0",
+ "illuminate/container": "^8.0",
+ "illuminate/contracts": "^8.0",
+ "illuminate/macroable": "^8.0",
+ "illuminate/support": "^8.0",
+ "illuminate/translation": "^8.0",
+ "php": "^7.3|^8.0",
+ "symfony/http-foundation": "^5.4",
+ "symfony/mime": "^5.4"
+ },
+ "suggest": {
+ "ext-bcmath": "Required to use the multiple_of validation rule.",
+ "illuminate/database": "Required to use the database presence verifier (^8.0)."
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "8.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Illuminate\\Validation\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ }
+ ],
+ "description": "The Illuminate Validation package.",
+ "homepage": "https://laravel.com",
+ "support": {
+ "issues": "https://github.com/laravel/framework/issues",
+ "source": "https://github.com/laravel/framework"
+ },
+ "time": "2022-05-30T13:21:10+00:00"
+ },
+ {
+ "name": "illuminate/view",
+ "version": "v8.83.27",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/illuminate/view.git",
+ "reference": "5e73eef48d9242532f81fadc14c816a01bfb1388"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/illuminate/view/zipball/5e73eef48d9242532f81fadc14c816a01bfb1388",
+ "reference": "5e73eef48d9242532f81fadc14c816a01bfb1388",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "illuminate/collections": "^8.0",
+ "illuminate/container": "^8.0",
+ "illuminate/contracts": "^8.0",
+ "illuminate/events": "^8.0",
+ "illuminate/filesystem": "^8.0",
+ "illuminate/macroable": "^8.0",
+ "illuminate/support": "^8.0",
+ "php": "^7.3|^8.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "8.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Illuminate\\View\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ }
+ ],
+ "description": "The Illuminate View package.",
+ "homepage": "https://laravel.com",
+ "support": {
+ "issues": "https://github.com/laravel/framework/issues",
+ "source": "https://github.com/laravel/framework"
+ },
+ "time": "2022-04-14T13:47:10+00:00"
+ },
+ {
+ "name": "laravel/lumen-framework",
+ "version": "v8.3.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/laravel/lumen-framework.git",
+ "reference": "733d1199d3344be337743f11df31b4048ec7fd1c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/laravel/lumen-framework/zipball/733d1199d3344be337743f11df31b4048ec7fd1c",
+ "reference": "733d1199d3344be337743f11df31b4048ec7fd1c",
+ "shasum": ""
+ },
+ "require": {
+ "dragonmantank/cron-expression": "^3.0.2",
+ "illuminate/auth": "^8.65",
+ "illuminate/broadcasting": "^8.65",
+ "illuminate/bus": "^8.65",
+ "illuminate/cache": "^8.65",
+ "illuminate/collections": "^8.65",
+ "illuminate/config": "^8.65",
+ "illuminate/console": "^8.65",
+ "illuminate/container": "^8.65",
+ "illuminate/contracts": "^8.65",
+ "illuminate/database": "^8.65",
+ "illuminate/encryption": "^8.65",
+ "illuminate/events": "^8.65",
+ "illuminate/filesystem": "^8.65",
+ "illuminate/hashing": "^8.65",
+ "illuminate/http": "^8.65",
+ "illuminate/log": "^8.65",
+ "illuminate/macroable": "^8.65",
+ "illuminate/pagination": "^8.65",
+ "illuminate/pipeline": "^8.65",
+ "illuminate/queue": "^8.65",
+ "illuminate/support": "^8.65",
+ "illuminate/testing": "^8.65",
+ "illuminate/translation": "^8.65",
+ "illuminate/validation": "^8.65",
+ "illuminate/view": "^8.65",
+ "nikic/fast-route": "^1.3",
+ "php": "^7.3|^8.0",
+ "symfony/console": "^5.4",
+ "symfony/error-handler": "^5.4",
+ "symfony/http-foundation": "^5.4",
+ "symfony/http-kernel": "^5.4",
+ "symfony/mime": "^5.4",
+ "symfony/var-dumper": "^5.4",
+ "vlucas/phpdotenv": "^5.2"
+ },
+ "require-dev": {
+ "mockery/mockery": "^1.4.4",
+ "phpunit/phpunit": "^8.5.19|^9.5.8"
+ },
+ "suggest": {
+ "laravel/tinker": "Required to use the tinker console command (^2.0).",
+ "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).",
+ "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0)."
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "8.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/helpers.php"
+ ],
+ "psr-4": {
+ "Laravel\\Lumen\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ }
+ ],
+ "description": "The Laravel Lumen Framework.",
+ "homepage": "https://lumen.laravel.com",
+ "keywords": [
+ "framework",
+ "laravel",
+ "lumen"
+ ],
+ "support": {
+ "issues": "https://github.com/laravel/lumen-framework/issues",
+ "source": "https://github.com/laravel/lumen-framework"
+ },
+ "time": "2021-12-22T10:11:35+00:00"
+ },
+ {
+ "name": "laravel/serializable-closure",
+ "version": "v1.3.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/laravel/serializable-closure.git",
+ "reference": "3dbf8a8e914634c48d389c1234552666b3d43754"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/3dbf8a8e914634c48d389c1234552666b3d43754",
+ "reference": "3dbf8a8e914634c48d389c1234552666b3d43754",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.3|^8.0"
+ },
+ "require-dev": {
+ "nesbot/carbon": "^2.61",
+ "pestphp/pest": "^1.21.3",
+ "phpstan/phpstan": "^1.8.2",
+ "symfony/var-dumper": "^5.4.11"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Laravel\\SerializableClosure\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ },
+ {
+ "name": "Nuno Maduro",
+ "email": "nuno@laravel.com"
+ }
+ ],
+ "description": "Laravel Serializable Closure provides an easy and secure way to serialize closures in PHP.",
+ "keywords": [
+ "closure",
+ "laravel",
+ "serializable"
+ ],
+ "support": {
+ "issues": "https://github.com/laravel/serializable-closure/issues",
+ "source": "https://github.com/laravel/serializable-closure"
+ },
+ "time": "2023-11-08T14:08:06+00:00"
+ },
+ {
+ "name": "lcobucci/clock",
+ "version": "2.3.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/lcobucci/clock.git",
+ "reference": "c7aadcd6fd97ed9e199114269c0be3f335e38876"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/lcobucci/clock/zipball/c7aadcd6fd97ed9e199114269c0be3f335e38876",
+ "reference": "c7aadcd6fd97ed9e199114269c0be3f335e38876",
+ "shasum": ""
+ },
+ "require": {
+ "php": "~8.1.0 || ~8.2.0",
+ "stella-maris/clock": "^0.1.7"
+ },
+ "provide": {
+ "psr/clock-implementation": "1.0"
+ },
+ "require-dev": {
+ "infection/infection": "^0.26",
+ "lcobucci/coding-standard": "^9.0",
+ "phpstan/extension-installer": "^1.2",
+ "phpstan/phpstan": "^1.9.4",
+ "phpstan/phpstan-deprecation-rules": "^1.1.1",
+ "phpstan/phpstan-phpunit": "^1.3.2",
+ "phpstan/phpstan-strict-rules": "^1.4.4",
+ "phpunit/phpunit": "^9.5.27"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Lcobucci\\Clock\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "LuÃs Cobucci",
+ "email": "lcobucci@gmail.com"
+ }
+ ],
+ "description": "Yet another clock abstraction",
+ "support": {
+ "issues": "https://github.com/lcobucci/clock/issues",
+ "source": "https://github.com/lcobucci/clock/tree/2.3.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/lcobucci",
+ "type": "github"
+ },
+ {
+ "url": "https://www.patreon.com/lcobucci",
+ "type": "patreon"
+ }
+ ],
+ "time": "2022-12-19T14:38:11+00:00"
+ },
+ {
+ "name": "lcobucci/jwt",
+ "version": "4.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/lcobucci/jwt.git",
+ "reference": "55564265fddf810504110bd68ca311932324b0e9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/lcobucci/jwt/zipball/55564265fddf810504110bd68ca311932324b0e9",
+ "reference": "55564265fddf810504110bd68ca311932324b0e9",
+ "shasum": ""
+ },
+ "require": {
+ "ext-mbstring": "*",
+ "ext-openssl": "*",
+ "lcobucci/clock": "^2.0",
+ "php": "^7.4 || ^8.0"
+ },
+ "require-dev": {
+ "infection/infection": "^0.20",
+ "lcobucci/coding-standard": "^6.0",
+ "mikey179/vfsstream": "^1.6",
+ "phpbench/phpbench": "^0.17",
+ "phpstan/extension-installer": "^1.0",
+ "phpstan/phpstan": "^0.12",
+ "phpstan/phpstan-deprecation-rules": "^0.12",
+ "phpstan/phpstan-phpunit": "^0.12",
+ "phpstan/phpstan-strict-rules": "^0.12",
+ "phpunit/php-invoker": "^3.1",
+ "phpunit/phpunit": "^9.4"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Lcobucci\\JWT\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "LuÃs Cobucci",
+ "email": "lcobucci@gmail.com",
+ "role": "Developer"
+ }
+ ],
+ "description": "A simple library to work with JSON Web Token and JSON Web Signature",
+ "keywords": [
+ "JWS",
+ "jwt"
+ ],
+ "support": {
+ "issues": "https://github.com/lcobucci/jwt/issues",
+ "source": "https://github.com/lcobucci/jwt/tree/4.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/lcobucci",
+ "type": "github"
+ },
+ {
+ "url": "https://www.patreon.com/lcobucci",
+ "type": "patreon"
+ }
+ ],
+ "time": "2021-09-28T19:18:28+00:00"
+ },
+ {
+ "name": "monolog/monolog",
+ "version": "2.9.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Seldaek/monolog.git",
+ "reference": "437cb3628f4cf6042cc10ae97fc2b8472e48ca1f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Seldaek/monolog/zipball/437cb3628f4cf6042cc10ae97fc2b8472e48ca1f",
+ "reference": "437cb3628f4cf6042cc10ae97fc2b8472e48ca1f",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2",
+ "psr/log": "^1.0.1 || ^2.0 || ^3.0"
+ },
+ "provide": {
+ "psr/log-implementation": "1.0.0 || 2.0.0 || 3.0.0"
+ },
+ "require-dev": {
+ "aws/aws-sdk-php": "^2.4.9 || ^3.0",
+ "doctrine/couchdb": "~1.0@dev",
+ "elasticsearch/elasticsearch": "^7 || ^8",
+ "ext-json": "*",
+ "graylog2/gelf-php": "^1.4.2 || ^2@dev",
+ "guzzlehttp/guzzle": "^7.4",
+ "guzzlehttp/psr7": "^2.2",
+ "mongodb/mongodb": "^1.8",
+ "php-amqplib/php-amqplib": "~2.4 || ^3",
+ "phpspec/prophecy": "^1.15",
+ "phpstan/phpstan": "^0.12.91",
+ "phpunit/phpunit": "^8.5.14",
+ "predis/predis": "^1.1 || ^2.0",
+ "rollbar/rollbar": "^1.3 || ^2 || ^3",
+ "ruflin/elastica": "^7",
+ "swiftmailer/swiftmailer": "^5.3|^6.0",
+ "symfony/mailer": "^5.4 || ^6",
+ "symfony/mime": "^5.4 || ^6"
+ },
+ "suggest": {
+ "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB",
+ "doctrine/couchdb": "Allow sending log messages to a CouchDB server",
+ "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client",
+ "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)",
+ "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler",
+ "ext-mbstring": "Allow to work properly with unicode symbols",
+ "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)",
+ "ext-openssl": "Required to send log messages using SSL",
+ "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)",
+ "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server",
+ "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)",
+ "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib",
+ "rollbar/rollbar": "Allow sending log messages to Rollbar",
+ "ruflin/elastica": "Allow sending log messages to an Elastic Search server"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "2.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Monolog\\": "src/Monolog"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "https://seld.be"
+ }
+ ],
+ "description": "Sends your logs to files, sockets, inboxes, databases and various web services",
+ "homepage": "https://github.com/Seldaek/monolog",
+ "keywords": [
+ "log",
+ "logging",
+ "psr-3"
+ ],
+ "support": {
+ "issues": "https://github.com/Seldaek/monolog/issues",
+ "source": "https://github.com/Seldaek/monolog/tree/2.9.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/Seldaek",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/monolog/monolog",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-10-27T15:25:26+00:00"
+ },
+ {
+ "name": "namshi/jose",
+ "version": "7.2.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/namshi/jose.git",
+ "reference": "89a24d7eb3040e285dd5925fcad992378b82bcff"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/namshi/jose/zipball/89a24d7eb3040e285dd5925fcad992378b82bcff",
+ "reference": "89a24d7eb3040e285dd5925fcad992378b82bcff",
+ "shasum": ""
+ },
+ "require": {
+ "ext-date": "*",
+ "ext-hash": "*",
+ "ext-json": "*",
+ "ext-pcre": "*",
+ "ext-spl": "*",
+ "php": ">=5.5",
+ "symfony/polyfill-php56": "^1.0"
+ },
+ "require-dev": {
+ "phpseclib/phpseclib": "^2.0",
+ "phpunit/phpunit": "^4.5|^5.0",
+ "satooshi/php-coveralls": "^1.0"
+ },
+ "suggest": {
+ "ext-openssl": "Allows to use OpenSSL as crypto engine.",
+ "phpseclib/phpseclib": "Allows to use Phpseclib as crypto engine, use version ^2.0."
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Namshi\\JOSE\\": "src/Namshi/JOSE/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Alessandro Nadalin",
+ "email": "alessandro.nadalin@gmail.com"
+ },
+ {
+ "name": "Alessandro Cinelli (cirpo)",
+ "email": "alessandro.cinelli@gmail.com"
+ }
+ ],
+ "description": "JSON Object Signing and Encryption library for PHP.",
+ "keywords": [
+ "JSON Web Signature",
+ "JSON Web Token",
+ "JWS",
+ "json",
+ "jwt",
+ "token"
+ ],
+ "support": {
+ "issues": "https://github.com/namshi/jose/issues",
+ "source": "https://github.com/namshi/jose/tree/master"
+ },
+ "time": "2016-12-05T07:27:31+00:00"
+ },
+ {
+ "name": "nesbot/carbon",
+ "version": "2.72.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/briannesbitt/Carbon.git",
+ "reference": "2b3b3db0a2d0556a177392ff1a3bf5608fa09f78"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/2b3b3db0a2d0556a177392ff1a3bf5608fa09f78",
+ "reference": "2b3b3db0a2d0556a177392ff1a3bf5608fa09f78",
+ "shasum": ""
+ },
+ "require": {
+ "carbonphp/carbon-doctrine-types": "*",
+ "ext-json": "*",
+ "php": "^7.1.8 || ^8.0",
+ "psr/clock": "^1.0",
+ "symfony/polyfill-mbstring": "^1.0",
+ "symfony/polyfill-php80": "^1.16",
+ "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0"
+ },
+ "provide": {
+ "psr/clock-implementation": "1.0"
+ },
+ "require-dev": {
+ "doctrine/dbal": "^2.0 || ^3.1.4 || ^4.0",
+ "doctrine/orm": "^2.7 || ^3.0",
+ "friendsofphp/php-cs-fixer": "^3.0",
+ "kylekatarnls/multi-tester": "^2.0",
+ "ondrejmirtes/better-reflection": "*",
+ "phpmd/phpmd": "^2.9",
+ "phpstan/extension-installer": "^1.0",
+ "phpstan/phpstan": "^0.12.99 || ^1.7.14",
+ "phpunit/php-file-iterator": "^2.0.5 || ^3.0.6",
+ "phpunit/phpunit": "^7.5.20 || ^8.5.26 || ^9.5.20",
+ "squizlabs/php_codesniffer": "^3.4"
+ },
+ "bin": [
+ "bin/carbon"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-3.x": "3.x-dev",
+ "dev-master": "2.x-dev"
+ },
+ "laravel": {
+ "providers": [
+ "Carbon\\Laravel\\ServiceProvider"
+ ]
+ },
+ "phpstan": {
+ "includes": [
+ "extension.neon"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Carbon\\": "src/Carbon/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Brian Nesbitt",
+ "email": "brian@nesbot.com",
+ "homepage": "https://markido.com"
+ },
+ {
+ "name": "kylekatarnls",
+ "homepage": "https://github.com/kylekatarnls"
+ }
+ ],
+ "description": "An API extension for DateTime that supports 281 different languages.",
+ "homepage": "https://carbon.nesbot.com",
+ "keywords": [
+ "date",
+ "datetime",
+ "time"
+ ],
+ "support": {
+ "docs": "https://carbon.nesbot.com/docs",
+ "issues": "https://github.com/briannesbitt/Carbon/issues",
+ "source": "https://github.com/briannesbitt/Carbon"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sponsors/kylekatarnls",
+ "type": "github"
+ },
+ {
+ "url": "https://opencollective.com/Carbon#sponsor",
+ "type": "opencollective"
+ },
+ {
+ "url": "https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-12-08T23:47:49+00:00"
+ },
+ {
+ "name": "nikic/fast-route",
+ "version": "v1.3.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/nikic/FastRoute.git",
+ "reference": "181d480e08d9476e61381e04a71b34dc0432e812"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/nikic/FastRoute/zipball/181d480e08d9476e61381e04a71b34dc0432e812",
+ "reference": "181d480e08d9476e61381e04a71b34dc0432e812",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.4.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.8.35|~5.7"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/functions.php"
+ ],
+ "psr-4": {
+ "FastRoute\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Nikita Popov",
+ "email": "nikic@php.net"
+ }
+ ],
+ "description": "Fast request router for PHP",
+ "keywords": [
+ "router",
+ "routing"
+ ],
+ "support": {
+ "issues": "https://github.com/nikic/FastRoute/issues",
+ "source": "https://github.com/nikic/FastRoute/tree/master"
+ },
+ "time": "2018-02-13T20:26:39+00:00"
+ },
+ {
+ "name": "nikic/php-parser",
+ "version": "v4.18.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/nikic/PHP-Parser.git",
+ "reference": "1bcbb2179f97633e98bbbc87044ee2611c7d7999"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/1bcbb2179f97633e98bbbc87044ee2611c7d7999",
+ "reference": "1bcbb2179f97633e98bbbc87044ee2611c7d7999",
+ "shasum": ""
+ },
+ "require": {
+ "ext-tokenizer": "*",
+ "php": ">=7.0"
+ },
+ "require-dev": {
+ "ircmaxell/php-yacc": "^0.0.7",
+ "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0"
+ },
+ "bin": [
+ "bin/php-parse"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.9-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "PhpParser\\": "lib/PhpParser"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Nikita Popov"
+ }
+ ],
+ "description": "A PHP parser written in PHP",
+ "keywords": [
+ "parser",
+ "php"
+ ],
+ "support": {
+ "issues": "https://github.com/nikic/PHP-Parser/issues",
+ "source": "https://github.com/nikic/PHP-Parser/tree/v4.18.0"
+ },
+ "time": "2023-12-10T21:03:43+00:00"
+ },
+ {
+ "name": "opis/closure",
+ "version": "3.6.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/opis/closure.git",
+ "reference": "3d81e4309d2a927abbe66df935f4bb60082805ad"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/opis/closure/zipball/3d81e4309d2a927abbe66df935f4bb60082805ad",
+ "reference": "3d81e4309d2a927abbe66df935f4bb60082805ad",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.4 || ^7.0 || ^8.0"
+ },
+ "require-dev": {
+ "jeremeamia/superclosure": "^2.0",
+ "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.6.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "functions.php"
+ ],
+ "psr-4": {
+ "Opis\\Closure\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Marius Sarca",
+ "email": "marius.sarca@gmail.com"
+ },
+ {
+ "name": "Sorin Sarca",
+ "email": "sarca_sorin@hotmail.com"
+ }
+ ],
+ "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.",
+ "homepage": "https://opis.io/closure",
+ "keywords": [
+ "anonymous functions",
+ "closure",
+ "function",
+ "serializable",
+ "serialization",
+ "serialize"
+ ],
+ "support": {
+ "issues": "https://github.com/opis/closure/issues",
+ "source": "https://github.com/opis/closure/tree/3.6.3"
+ },
+ "time": "2022-01-27T09:35:39+00:00"
+ },
+ {
+ "name": "phpoption/phpoption",
+ "version": "1.9.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/schmittjoh/php-option.git",
+ "reference": "80735db690fe4fc5c76dfa7f9b770634285fa820"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/80735db690fe4fc5c76dfa7f9b770634285fa820",
+ "reference": "80735db690fe4fc5c76dfa7f9b770634285fa820",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2.5 || ^8.0"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.8.2",
+ "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2"
+ },
+ "type": "library",
+ "extra": {
+ "bamarni-bin": {
+ "bin-links": true,
+ "forward-command": true
+ },
+ "branch-alias": {
+ "dev-master": "1.9-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "PhpOption\\": "src/PhpOption/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "Apache-2.0"
+ ],
+ "authors": [
+ {
+ "name": "Johannes M. Schmitt",
+ "email": "schmittjoh@gmail.com",
+ "homepage": "https://github.com/schmittjoh"
+ },
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ }
+ ],
+ "description": "Option Type for PHP",
+ "keywords": [
+ "language",
+ "option",
+ "php",
+ "type"
+ ],
+ "support": {
+ "issues": "https://github.com/schmittjoh/php-option/issues",
+ "source": "https://github.com/schmittjoh/php-option/tree/1.9.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-11-12T21:59:55+00:00"
+ },
+ {
+ "name": "psr/clock",
+ "version": "1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/clock.git",
+ "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d",
+ "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.0 || ^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Psr\\Clock\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for reading the clock.",
+ "homepage": "https://github.com/php-fig/clock",
+ "keywords": [
+ "clock",
+ "now",
+ "psr",
+ "psr-20",
+ "time"
+ ],
+ "support": {
+ "issues": "https://github.com/php-fig/clock/issues",
+ "source": "https://github.com/php-fig/clock/tree/1.0.0"
+ },
+ "time": "2022-11-25T14:36:26+00:00"
+ },
+ {
+ "name": "psr/container",
+ "version": "1.1.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/container.git",
+ "reference": "513e0666f7216c7459170d56df27dfcefe1689ea"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea",
+ "reference": "513e0666f7216c7459170d56df27dfcefe1689ea",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.4.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Psr\\Container\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common Container Interface (PHP FIG PSR-11)",
+ "homepage": "https://github.com/php-fig/container",
+ "keywords": [
+ "PSR-11",
+ "container",
+ "container-interface",
+ "container-interop",
+ "psr"
+ ],
+ "support": {
+ "issues": "https://github.com/php-fig/container/issues",
+ "source": "https://github.com/php-fig/container/tree/1.1.2"
+ },
+ "time": "2021-11-05T16:50:12+00:00"
+ },
+ {
+ "name": "psr/event-dispatcher",
+ "version": "1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/event-dispatcher.git",
+ "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0",
+ "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\EventDispatcher\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Standard interfaces for event handling.",
+ "keywords": [
+ "events",
+ "psr",
+ "psr-14"
+ ],
+ "support": {
+ "issues": "https://github.com/php-fig/event-dispatcher/issues",
+ "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0"
+ },
+ "time": "2019-01-08T18:20:26+00:00"
+ },
+ {
+ "name": "psr/http-client",
+ "version": "1.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-client.git",
+ "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90",
+ "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.0 || ^8.0",
+ "psr/http-message": "^1.0 || ^2.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Http\\Client\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for HTTP clients",
+ "homepage": "https://github.com/php-fig/http-client",
+ "keywords": [
+ "http",
+ "http-client",
+ "psr",
+ "psr-18"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/http-client"
+ },
+ "time": "2023-09-23T14:17:50+00:00"
+ },
+ {
+ "name": "psr/http-factory",
+ "version": "1.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-factory.git",
+ "reference": "e616d01114759c4c489f93b099585439f795fe35"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35",
+ "reference": "e616d01114759c4c489f93b099585439f795fe35",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.0.0",
+ "psr/http-message": "^1.0 || ^2.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Http\\Message\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interfaces for PSR-7 HTTP message factories",
+ "keywords": [
+ "factory",
+ "http",
+ "message",
+ "psr",
+ "psr-17",
+ "psr-7",
+ "request",
+ "response"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/http-factory/tree/1.0.2"
+ },
+ "time": "2023-04-10T20:10:41+00:00"
+ },
+ {
+ "name": "psr/http-message",
+ "version": "2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-message.git",
+ "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71",
+ "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 || ^8.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Http\\Message\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for HTTP messages",
+ "homepage": "https://github.com/php-fig/http-message",
+ "keywords": [
+ "http",
+ "http-message",
+ "psr",
+ "psr-7",
+ "request",
+ "response"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/http-message/tree/2.0"
+ },
+ "time": "2023-04-04T09:54:51+00:00"
+ },
+ {
+ "name": "psr/log",
+ "version": "2.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/log.git",
+ "reference": "ef29f6d262798707a9edd554e2b82517ef3a9376"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/log/zipball/ef29f6d262798707a9edd554e2b82517ef3a9376",
+ "reference": "ef29f6d262798707a9edd554e2b82517ef3a9376",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.0.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Log\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for logging libraries",
+ "homepage": "https://github.com/php-fig/log",
+ "keywords": [
+ "log",
+ "psr",
+ "psr-3"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/log/tree/2.0.0"
+ },
+ "time": "2021-07-14T16:41:46+00:00"
+ },
+ {
+ "name": "psr/simple-cache",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/simple-cache.git",
+ "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b",
+ "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\SimpleCache\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interfaces for simple caching",
+ "keywords": [
+ "cache",
+ "caching",
+ "psr",
+ "psr-16",
+ "simple-cache"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/simple-cache/tree/master"
+ },
+ "time": "2017-10-23T01:57:42+00:00"
+ },
+ {
+ "name": "psy/psysh",
+ "version": "v0.10.12",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/bobthecow/psysh.git",
+ "reference": "a0d9981aa07ecfcbea28e4bfa868031cca121e7d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/bobthecow/psysh/zipball/a0d9981aa07ecfcbea28e4bfa868031cca121e7d",
+ "reference": "a0d9981aa07ecfcbea28e4bfa868031cca121e7d",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "ext-tokenizer": "*",
+ "nikic/php-parser": "~4.0|~3.0|~2.0|~1.3",
+ "php": "^8.0 || ^7.0 || ^5.5.9",
+ "symfony/console": "~5.0|~4.0|~3.0|^2.4.2|~2.3.10",
+ "symfony/var-dumper": "~5.0|~4.0|~3.0|~2.7"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.2",
+ "hoa/console": "3.17.*"
+ },
+ "suggest": {
+ "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)",
+ "ext-pdo-sqlite": "The doc command requires SQLite to work.",
+ "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.",
+ "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history.",
+ "hoa/console": "A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit."
+ },
+ "bin": [
+ "bin/psysh"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "0.10.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/functions.php"
+ ],
+ "psr-4": {
+ "Psy\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Justin Hileman",
+ "email": "justin@justinhileman.info",
+ "homepage": "http://justinhileman.com"
+ }
+ ],
+ "description": "An interactive shell for modern PHP.",
+ "homepage": "http://psysh.org",
+ "keywords": [
+ "REPL",
+ "console",
+ "interactive",
+ "shell"
+ ],
+ "support": {
+ "issues": "https://github.com/bobthecow/psysh/issues",
+ "source": "https://github.com/bobthecow/psysh/tree/v0.10.12"
+ },
+ "time": "2021-11-30T14:05:36+00:00"
+ },
+ {
+ "name": "ralouphie/getallheaders",
+ "version": "3.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ralouphie/getallheaders.git",
+ "reference": "120b605dfeb996808c31b6477290a714d356e822"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822",
+ "reference": "120b605dfeb996808c31b6477290a714d356e822",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.6"
+ },
+ "require-dev": {
+ "php-coveralls/php-coveralls": "^2.1",
+ "phpunit/phpunit": "^5 || ^6.5"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/getallheaders.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ralph Khattar",
+ "email": "ralph.khattar@gmail.com"
+ }
+ ],
+ "description": "A polyfill for getallheaders.",
+ "support": {
+ "issues": "https://github.com/ralouphie/getallheaders/issues",
+ "source": "https://github.com/ralouphie/getallheaders/tree/develop"
+ },
+ "time": "2019-03-08T08:55:37+00:00"
+ },
+ {
+ "name": "ramsey/collection",
+ "version": "2.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ramsey/collection.git",
+ "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ramsey/collection/zipball/a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5",
+ "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^8.1"
+ },
+ "require-dev": {
+ "captainhook/plugin-composer": "^5.3",
+ "ergebnis/composer-normalize": "^2.28.3",
+ "fakerphp/faker": "^1.21",
+ "hamcrest/hamcrest-php": "^2.0",
+ "jangregor/phpstan-prophecy": "^1.0",
+ "mockery/mockery": "^1.5",
+ "php-parallel-lint/php-console-highlighter": "^1.0",
+ "php-parallel-lint/php-parallel-lint": "^1.3",
+ "phpcsstandards/phpcsutils": "^1.0.0-rc1",
+ "phpspec/prophecy-phpunit": "^2.0",
+ "phpstan/extension-installer": "^1.2",
+ "phpstan/phpstan": "^1.9",
+ "phpstan/phpstan-mockery": "^1.1",
+ "phpstan/phpstan-phpunit": "^1.3",
+ "phpunit/phpunit": "^9.5",
+ "psalm/plugin-mockery": "^1.1",
+ "psalm/plugin-phpunit": "^0.18.4",
+ "ramsey/coding-standard": "^2.0.3",
+ "ramsey/conventional-commits": "^1.3",
+ "vimeo/psalm": "^5.4"
+ },
+ "type": "library",
+ "extra": {
+ "captainhook": {
+ "force-install": true
+ },
+ "ramsey/conventional-commits": {
+ "configFile": "conventional-commits.json"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Ramsey\\Collection\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ben Ramsey",
+ "email": "ben@benramsey.com",
+ "homepage": "https://benramsey.com"
+ }
+ ],
+ "description": "A PHP library for representing and manipulating collections.",
+ "keywords": [
+ "array",
+ "collection",
+ "hash",
+ "map",
+ "queue",
+ "set"
+ ],
+ "support": {
+ "issues": "https://github.com/ramsey/collection/issues",
+ "source": "https://github.com/ramsey/collection/tree/2.0.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/ramsey",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/ramsey/collection",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-12-31T21:50:55+00:00"
+ },
+ {
+ "name": "ramsey/uuid",
+ "version": "4.7.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ramsey/uuid.git",
+ "reference": "5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ramsey/uuid/zipball/5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e",
+ "reference": "5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e",
+ "shasum": ""
+ },
+ "require": {
+ "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11",
+ "ext-json": "*",
+ "php": "^8.0",
+ "ramsey/collection": "^1.2 || ^2.0"
+ },
+ "replace": {
+ "rhumsaa/uuid": "self.version"
+ },
+ "require-dev": {
+ "captainhook/captainhook": "^5.10",
+ "captainhook/plugin-composer": "^5.3",
+ "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
+ "doctrine/annotations": "^1.8",
+ "ergebnis/composer-normalize": "^2.15",
+ "mockery/mockery": "^1.3",
+ "paragonie/random-lib": "^2",
+ "php-mock/php-mock": "^2.2",
+ "php-mock/php-mock-mockery": "^1.3",
+ "php-parallel-lint/php-parallel-lint": "^1.1",
+ "phpbench/phpbench": "^1.0",
+ "phpstan/extension-installer": "^1.1",
+ "phpstan/phpstan": "^1.8",
+ "phpstan/phpstan-mockery": "^1.1",
+ "phpstan/phpstan-phpunit": "^1.1",
+ "phpunit/phpunit": "^8.5 || ^9",
+ "ramsey/composer-repl": "^1.4",
+ "slevomat/coding-standard": "^8.4",
+ "squizlabs/php_codesniffer": "^3.5",
+ "vimeo/psalm": "^4.9"
+ },
+ "suggest": {
+ "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.",
+ "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.",
+ "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.",
+ "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter",
+ "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type."
+ },
+ "type": "library",
+ "extra": {
+ "captainhook": {
+ "force-install": true
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/functions.php"
+ ],
+ "psr-4": {
+ "Ramsey\\Uuid\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).",
+ "keywords": [
+ "guid",
+ "identifier",
+ "uuid"
+ ],
+ "support": {
+ "issues": "https://github.com/ramsey/uuid/issues",
+ "source": "https://github.com/ramsey/uuid/tree/4.7.5"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/ramsey",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-11-08T05:53:05+00:00"
+ },
+ {
+ "name": "stella-maris/clock",
+ "version": "0.1.7",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/stella-maris-solutions/clock.git",
+ "reference": "fa23ce16019289a18bb3446fdecd45befcdd94f8"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/stella-maris-solutions/clock/zipball/fa23ce16019289a18bb3446fdecd45befcdd94f8",
+ "reference": "fa23ce16019289a18bb3446fdecd45befcdd94f8",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.0|^8.0",
+ "psr/clock": "^1.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "StellaMaris\\Clock\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Andreas Heigl",
+ "role": "Maintainer"
+ }
+ ],
+ "description": "A pre-release of the proposed PSR-20 Clock-Interface",
+ "homepage": "https://gitlab.com/stella-maris/clock",
+ "keywords": [
+ "clock",
+ "datetime",
+ "point in time",
+ "psr20"
+ ],
+ "support": {
+ "source": "https://github.com/stella-maris-solutions/clock/tree/0.1.7"
+ },
+ "time": "2022-11-25T16:15:06+00:00"
+ },
+ {
+ "name": "symfony/console",
+ "version": "v5.4.32",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/console.git",
+ "reference": "c70df1ffaf23a8d340bded3cfab1b86752ad6ed7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/console/zipball/c70df1ffaf23a8d340bded3cfab1b86752ad6ed7",
+ "reference": "c70df1ffaf23a8d340bded3cfab1b86752ad6ed7",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/deprecation-contracts": "^2.1|^3",
+ "symfony/polyfill-mbstring": "~1.0",
+ "symfony/polyfill-php73": "^1.9",
+ "symfony/polyfill-php80": "^1.16",
+ "symfony/service-contracts": "^1.1|^2|^3",
+ "symfony/string": "^5.1|^6.0"
+ },
+ "conflict": {
+ "psr/log": ">=3",
+ "symfony/dependency-injection": "<4.4",
+ "symfony/dotenv": "<5.1",
+ "symfony/event-dispatcher": "<4.4",
+ "symfony/lock": "<4.4",
+ "symfony/process": "<4.4"
+ },
+ "provide": {
+ "psr/log-implementation": "1.0|2.0"
+ },
+ "require-dev": {
+ "psr/log": "^1|^2",
+ "symfony/config": "^4.4|^5.0|^6.0",
+ "symfony/dependency-injection": "^4.4|^5.0|^6.0",
+ "symfony/event-dispatcher": "^4.4|^5.0|^6.0",
+ "symfony/lock": "^4.4|^5.0|^6.0",
+ "symfony/process": "^4.4|^5.0|^6.0",
+ "symfony/var-dumper": "^4.4|^5.0|^6.0"
+ },
+ "suggest": {
+ "psr/log": "For using the console logger",
+ "symfony/event-dispatcher": "",
+ "symfony/lock": "",
+ "symfony/process": ""
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Console\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Eases the creation of beautiful and testable command line interfaces",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "cli",
+ "command-line",
+ "console",
+ "terminal"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/console/tree/v5.4.32"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-11-18T18:23:04+00:00"
+ },
+ {
+ "name": "symfony/deprecation-contracts",
+ "version": "v3.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/deprecation-contracts.git",
+ "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf",
+ "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "3.4-dev"
+ },
+ "thanks": {
+ "name": "symfony/contracts",
+ "url": "https://github.com/symfony/contracts"
+ }
+ },
+ "autoload": {
+ "files": [
+ "function.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "A generic function and convention to trigger deprecation notices",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/deprecation-contracts/tree/v3.4.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-05-23T14:45:45+00:00"
+ },
+ {
+ "name": "symfony/error-handler",
+ "version": "v5.4.29",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/error-handler.git",
+ "reference": "328c6fcfd2f90b64c16efaf0ea67a311d672f078"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/error-handler/zipball/328c6fcfd2f90b64c16efaf0ea67a311d672f078",
+ "reference": "328c6fcfd2f90b64c16efaf0ea67a311d672f078",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "psr/log": "^1|^2|^3",
+ "symfony/var-dumper": "^4.4|^5.0|^6.0"
+ },
+ "require-dev": {
+ "symfony/deprecation-contracts": "^2.1|^3",
+ "symfony/http-kernel": "^4.4|^5.0|^6.0",
+ "symfony/serializer": "^4.4|^5.0|^6.0"
+ },
+ "bin": [
+ "Resources/bin/patch-type-declarations"
+ ],
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\ErrorHandler\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Provides tools to manage errors and ease debugging PHP code",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/error-handler/tree/v5.4.29"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-09-06T21:54:06+00:00"
+ },
+ {
+ "name": "symfony/event-dispatcher",
+ "version": "v6.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/event-dispatcher.git",
+ "reference": "d76d2632cfc2206eecb5ad2b26cd5934082941b6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/d76d2632cfc2206eecb5ad2b26cd5934082941b6",
+ "reference": "d76d2632cfc2206eecb5ad2b26cd5934082941b6",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1",
+ "symfony/event-dispatcher-contracts": "^2.5|^3"
+ },
+ "conflict": {
+ "symfony/dependency-injection": "<5.4",
+ "symfony/service-contracts": "<2.5"
+ },
+ "provide": {
+ "psr/event-dispatcher-implementation": "1.0",
+ "symfony/event-dispatcher-implementation": "2.0|3.0"
+ },
+ "require-dev": {
+ "psr/log": "^1|^2|^3",
+ "symfony/config": "^5.4|^6.0|^7.0",
+ "symfony/dependency-injection": "^5.4|^6.0|^7.0",
+ "symfony/error-handler": "^5.4|^6.0|^7.0",
+ "symfony/expression-language": "^5.4|^6.0|^7.0",
+ "symfony/http-foundation": "^5.4|^6.0|^7.0",
+ "symfony/service-contracts": "^2.5|^3",
+ "symfony/stopwatch": "^5.4|^6.0|^7.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\EventDispatcher\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/event-dispatcher/tree/v6.4.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-07-27T06:52:43+00:00"
+ },
+ {
+ "name": "symfony/event-dispatcher-contracts",
+ "version": "v3.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/event-dispatcher-contracts.git",
+ "reference": "a76aed96a42d2b521153fb382d418e30d18b59df"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/a76aed96a42d2b521153fb382d418e30d18b59df",
+ "reference": "a76aed96a42d2b521153fb382d418e30d18b59df",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1",
+ "psr/event-dispatcher": "^1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "3.4-dev"
+ },
+ "thanks": {
+ "name": "symfony/contracts",
+ "url": "https://github.com/symfony/contracts"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Contracts\\EventDispatcher\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Generic abstractions related to dispatching event",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "abstractions",
+ "contracts",
+ "decoupling",
+ "interfaces",
+ "interoperability",
+ "standards"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.4.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-05-23T14:45:45+00:00"
+ },
+ {
+ "name": "symfony/finder",
+ "version": "v5.4.27",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/finder.git",
+ "reference": "ff4bce3c33451e7ec778070e45bd23f74214cd5d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/ff4bce3c33451e7ec778070e45bd23f74214cd5d",
+ "reference": "ff4bce3c33451e7ec778070e45bd23f74214cd5d",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/deprecation-contracts": "^2.1|^3",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Finder\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Finds files and directories via an intuitive fluent interface",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/finder/tree/v5.4.27"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-07-31T08:02:31+00:00"
+ },
+ {
+ "name": "symfony/http-foundation",
+ "version": "v5.4.32",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/http-foundation.git",
+ "reference": "cbcd80a4c36f59772d62860fdb0cb6a38da63fd2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/http-foundation/zipball/cbcd80a4c36f59772d62860fdb0cb6a38da63fd2",
+ "reference": "cbcd80a4c36f59772d62860fdb0cb6a38da63fd2",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/deprecation-contracts": "^2.1|^3",
+ "symfony/polyfill-mbstring": "~1.1",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "require-dev": {
+ "predis/predis": "~1.0",
+ "symfony/cache": "^4.4|^5.0|^6.0",
+ "symfony/dependency-injection": "^5.4|^6.0",
+ "symfony/expression-language": "^4.4|^5.0|^6.0",
+ "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4",
+ "symfony/mime": "^4.4|^5.0|^6.0",
+ "symfony/rate-limiter": "^5.2|^6.0"
+ },
+ "suggest": {
+ "symfony/mime": "To use the file extension guesser"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\HttpFoundation\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Defines an object-oriented layer for the HTTP specification",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/http-foundation/tree/v5.4.32"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-11-20T15:40:25+00:00"
+ },
+ {
+ "name": "symfony/http-kernel",
+ "version": "v5.4.33",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/http-kernel.git",
+ "reference": "892636f9279f953dc266dc088f900b03eecb4ffa"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/http-kernel/zipball/892636f9279f953dc266dc088f900b03eecb4ffa",
+ "reference": "892636f9279f953dc266dc088f900b03eecb4ffa",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "psr/log": "^1|^2",
+ "symfony/deprecation-contracts": "^2.1|^3",
+ "symfony/error-handler": "^4.4|^5.0|^6.0",
+ "symfony/event-dispatcher": "^5.0|^6.0",
+ "symfony/http-foundation": "^5.4.21|^6.2.7",
+ "symfony/polyfill-ctype": "^1.8",
+ "symfony/polyfill-php73": "^1.9",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "conflict": {
+ "symfony/browser-kit": "<5.4",
+ "symfony/cache": "<5.0",
+ "symfony/config": "<5.0",
+ "symfony/console": "<4.4",
+ "symfony/dependency-injection": "<5.3",
+ "symfony/doctrine-bridge": "<5.0",
+ "symfony/form": "<5.0",
+ "symfony/http-client": "<5.0",
+ "symfony/mailer": "<5.0",
+ "symfony/messenger": "<5.0",
+ "symfony/translation": "<5.0",
+ "symfony/twig-bridge": "<5.0",
+ "symfony/validator": "<5.0",
+ "twig/twig": "<2.13"
+ },
+ "provide": {
+ "psr/log-implementation": "1.0|2.0"
+ },
+ "require-dev": {
+ "psr/cache": "^1.0|^2.0|^3.0",
+ "symfony/browser-kit": "^5.4|^6.0",
+ "symfony/config": "^5.0|^6.0",
+ "symfony/console": "^4.4|^5.0|^6.0",
+ "symfony/css-selector": "^4.4|^5.0|^6.0",
+ "symfony/dependency-injection": "^5.3|^6.0",
+ "symfony/dom-crawler": "^4.4|^5.0|^6.0",
+ "symfony/expression-language": "^4.4|^5.0|^6.0",
+ "symfony/finder": "^4.4|^5.0|^6.0",
+ "symfony/http-client-contracts": "^1.1|^2|^3",
+ "symfony/process": "^4.4|^5.0|^6.0",
+ "symfony/routing": "^4.4|^5.0|^6.0",
+ "symfony/stopwatch": "^4.4|^5.0|^6.0",
+ "symfony/translation": "^4.4|^5.0|^6.0",
+ "symfony/translation-contracts": "^1.1|^2|^3",
+ "twig/twig": "^2.13|^3.0.4"
+ },
+ "suggest": {
+ "symfony/browser-kit": "",
+ "symfony/config": "",
+ "symfony/console": "",
+ "symfony/dependency-injection": ""
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\HttpKernel\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Provides a structured process for converting a Request into a Response",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/http-kernel/tree/v5.4.33"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-12-01T16:51:11+00:00"
+ },
+ {
+ "name": "symfony/mime",
+ "version": "v5.4.26",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/mime.git",
+ "reference": "2ea06dfeee20000a319d8407cea1d47533d5a9d2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/mime/zipball/2ea06dfeee20000a319d8407cea1d47533d5a9d2",
+ "reference": "2ea06dfeee20000a319d8407cea1d47533d5a9d2",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/deprecation-contracts": "^2.1|^3",
+ "symfony/polyfill-intl-idn": "^1.10",
+ "symfony/polyfill-mbstring": "^1.0",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "conflict": {
+ "egulias/email-validator": "~3.0.0",
+ "phpdocumentor/reflection-docblock": "<3.2.2",
+ "phpdocumentor/type-resolver": "<1.4.0",
+ "symfony/mailer": "<4.4",
+ "symfony/serializer": "<5.4.26|>=6,<6.2.13|>=6.3,<6.3.2"
+ },
+ "require-dev": {
+ "egulias/email-validator": "^2.1.10|^3.1|^4",
+ "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0",
+ "symfony/dependency-injection": "^4.4|^5.0|^6.0",
+ "symfony/property-access": "^4.4|^5.1|^6.0",
+ "symfony/property-info": "^4.4|^5.1|^6.0",
+ "symfony/serializer": "^5.4.26|~6.2.13|^6.3.2"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Mime\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Allows manipulating MIME messages",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "mime",
+ "mime-type"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/mime/tree/v5.4.26"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-07-27T06:29:31+00:00"
+ },
+ {
+ "name": "symfony/polyfill-ctype",
+ "version": "v1.28.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-ctype.git",
+ "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb",
+ "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "provide": {
+ "ext-ctype": "*"
+ },
+ "suggest": {
+ "ext-ctype": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.28-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Ctype\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Gert de Pagter",
+ "email": "BackEndTea@gmail.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for ctype functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "ctype",
+ "polyfill",
+ "portable"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-ctype/tree/v1.28.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-01-26T09:26:14+00:00"
+ },
+ {
+ "name": "symfony/polyfill-intl-grapheme",
+ "version": "v1.28.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-intl-grapheme.git",
+ "reference": "875e90aeea2777b6f135677f618529449334a612"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/875e90aeea2777b6f135677f618529449334a612",
+ "reference": "875e90aeea2777b6f135677f618529449334a612",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "suggest": {
+ "ext-intl": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.28-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Intl\\Grapheme\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for intl's grapheme_* functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "grapheme",
+ "intl",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.28.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-01-26T09:26:14+00:00"
+ },
+ {
+ "name": "symfony/polyfill-intl-idn",
+ "version": "v1.28.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-intl-idn.git",
+ "reference": "ecaafce9f77234a6a449d29e49267ba10499116d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/ecaafce9f77234a6a449d29e49267ba10499116d",
+ "reference": "ecaafce9f77234a6a449d29e49267ba10499116d",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1",
+ "symfony/polyfill-intl-normalizer": "^1.10",
+ "symfony/polyfill-php72": "^1.10"
+ },
+ "suggest": {
+ "ext-intl": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.28-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Intl\\Idn\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Laurent Bassin",
+ "email": "laurent@bassin.info"
+ },
+ {
+ "name": "Trevor Rowbotham",
+ "email": "trevor.rowbotham@pm.me"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "idn",
+ "intl",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.28.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-01-26T09:30:37+00:00"
+ },
+ {
+ "name": "symfony/polyfill-intl-normalizer",
+ "version": "v1.28.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-intl-normalizer.git",
+ "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92",
+ "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "suggest": {
+ "ext-intl": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.28-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for intl's Normalizer class and related functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "intl",
+ "normalizer",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.28.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-01-26T09:26:14+00:00"
+ },
+ {
+ "name": "symfony/polyfill-mbstring",
+ "version": "v1.28.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-mbstring.git",
+ "reference": "42292d99c55abe617799667f454222c54c60e229"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/42292d99c55abe617799667f454222c54c60e229",
+ "reference": "42292d99c55abe617799667f454222c54c60e229",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "provide": {
+ "ext-mbstring": "*"
+ },
+ "suggest": {
+ "ext-mbstring": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.28-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Mbstring\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for the Mbstring extension",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "mbstring",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.28.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-07-28T09:04:16+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php56",
+ "version": "v1.20.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php56.git",
+ "reference": "54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675",
+ "reference": "54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "type": "metapackage",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.20-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting some PHP 5.6+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-php56/tree/v1.20.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2020-10-23T14:02:19+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php72",
+ "version": "v1.28.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php72.git",
+ "reference": "70f4aebd92afca2f865444d30a4d2151c13c3179"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/70f4aebd92afca2f865444d30a4d2151c13c3179",
+ "reference": "70f4aebd92afca2f865444d30a4d2151c13c3179",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.28-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Php72\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-php72/tree/v1.28.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-01-26T09:26:14+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php73",
+ "version": "v1.28.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php73.git",
+ "reference": "fe2f306d1d9d346a7fee353d0d5012e401e984b5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fe2f306d1d9d346a7fee353d0d5012e401e984b5",
+ "reference": "fe2f306d1d9d346a7fee353d0d5012e401e984b5",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.28-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Php73\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-php73/tree/v1.28.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-01-26T09:26:14+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php80",
+ "version": "v1.28.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php80.git",
+ "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/6caa57379c4aec19c0a12a38b59b26487dcfe4b5",
+ "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.28-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Php80\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ion Bazan",
+ "email": "ion.bazan@gmail.com"
+ },
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-php80/tree/v1.28.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-01-26T09:26:14+00:00"
+ },
+ {
+ "name": "symfony/process",
+ "version": "v5.4.28",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/process.git",
+ "reference": "45261e1fccad1b5447a8d7a8e67aa7b4a9798b7b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/process/zipball/45261e1fccad1b5447a8d7a8e67aa7b4a9798b7b",
+ "reference": "45261e1fccad1b5447a8d7a8e67aa7b4a9798b7b",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Process\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Executes commands in sub-processes",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/process/tree/v5.4.28"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-08-07T10:36:04+00:00"
+ },
+ {
+ "name": "symfony/service-contracts",
+ "version": "v2.5.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/service-contracts.git",
+ "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/service-contracts/zipball/4b426aac47d6427cc1a1d0f7e2ac724627f5966c",
+ "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "psr/container": "^1.1",
+ "symfony/deprecation-contracts": "^2.1|^3"
+ },
+ "conflict": {
+ "ext-psr": "<1.1|>=2"
+ },
+ "suggest": {
+ "symfony/service-implementation": ""
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "2.5-dev"
+ },
+ "thanks": {
+ "name": "symfony/contracts",
+ "url": "https://github.com/symfony/contracts"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Contracts\\Service\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Generic abstractions related to writing services",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "abstractions",
+ "contracts",
+ "decoupling",
+ "interfaces",
+ "interoperability",
+ "standards"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/service-contracts/tree/v2.5.2"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-05-30T19:17:29+00:00"
+ },
+ {
+ "name": "symfony/string",
+ "version": "v6.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/string.git",
+ "reference": "b45fcf399ea9c3af543a92edf7172ba21174d809"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/string/zipball/b45fcf399ea9c3af543a92edf7172ba21174d809",
+ "reference": "b45fcf399ea9c3af543a92edf7172ba21174d809",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1",
+ "symfony/polyfill-ctype": "~1.8",
+ "symfony/polyfill-intl-grapheme": "~1.0",
+ "symfony/polyfill-intl-normalizer": "~1.0",
+ "symfony/polyfill-mbstring": "~1.0"
+ },
+ "conflict": {
+ "symfony/translation-contracts": "<2.5"
+ },
+ "require-dev": {
+ "symfony/error-handler": "^5.4|^6.0|^7.0",
+ "symfony/http-client": "^5.4|^6.0|^7.0",
+ "symfony/intl": "^6.2|^7.0",
+ "symfony/translation-contracts": "^2.5|^3.0",
+ "symfony/var-exporter": "^5.4|^6.0|^7.0"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "Resources/functions.php"
+ ],
+ "psr-4": {
+ "Symfony\\Component\\String\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "grapheme",
+ "i18n",
+ "string",
+ "unicode",
+ "utf-8",
+ "utf8"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/string/tree/v6.4.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-11-28T20:41:49+00:00"
+ },
+ {
+ "name": "symfony/translation",
+ "version": "v6.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/translation.git",
+ "reference": "b1035dbc2a344b21f8fa8ac451c7ecec4ea45f37"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/translation/zipball/b1035dbc2a344b21f8fa8ac451c7ecec4ea45f37",
+ "reference": "b1035dbc2a344b21f8fa8ac451c7ecec4ea45f37",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1",
+ "symfony/deprecation-contracts": "^2.5|^3",
+ "symfony/polyfill-mbstring": "~1.0",
+ "symfony/translation-contracts": "^2.5|^3.0"
+ },
+ "conflict": {
+ "symfony/config": "<5.4",
+ "symfony/console": "<5.4",
+ "symfony/dependency-injection": "<5.4",
+ "symfony/http-client-contracts": "<2.5",
+ "symfony/http-kernel": "<5.4",
+ "symfony/service-contracts": "<2.5",
+ "symfony/twig-bundle": "<5.4",
+ "symfony/yaml": "<5.4"
+ },
+ "provide": {
+ "symfony/translation-implementation": "2.3|3.0"
+ },
+ "require-dev": {
+ "nikic/php-parser": "^4.13",
+ "psr/log": "^1|^2|^3",
+ "symfony/config": "^5.4|^6.0|^7.0",
+ "symfony/console": "^5.4|^6.0|^7.0",
+ "symfony/dependency-injection": "^5.4|^6.0|^7.0",
+ "symfony/finder": "^5.4|^6.0|^7.0",
+ "symfony/http-client-contracts": "^2.5|^3.0",
+ "symfony/http-kernel": "^5.4|^6.0|^7.0",
+ "symfony/intl": "^5.4|^6.0|^7.0",
+ "symfony/polyfill-intl-icu": "^1.21",
+ "symfony/routing": "^5.4|^6.0|^7.0",
+ "symfony/service-contracts": "^2.5|^3",
+ "symfony/yaml": "^5.4|^6.0|^7.0"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "Resources/functions.php"
+ ],
+ "psr-4": {
+ "Symfony\\Component\\Translation\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Provides tools to internationalize your application",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/translation/tree/v6.4.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-11-29T08:14:36+00:00"
+ },
+ {
+ "name": "symfony/translation-contracts",
+ "version": "v3.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/translation-contracts.git",
+ "reference": "dee0c6e5b4c07ce851b462530088e64b255ac9c5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/dee0c6e5b4c07ce851b462530088e64b255ac9c5",
+ "reference": "dee0c6e5b4c07ce851b462530088e64b255ac9c5",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "3.4-dev"
+ },
+ "thanks": {
+ "name": "symfony/contracts",
+ "url": "https://github.com/symfony/contracts"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Contracts\\Translation\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Test/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Generic abstractions related to translation",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "abstractions",
+ "contracts",
+ "decoupling",
+ "interfaces",
+ "interoperability",
+ "standards"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/translation-contracts/tree/v3.4.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-07-25T15:08:44+00:00"
+ },
+ {
+ "name": "symfony/var-dumper",
+ "version": "v5.4.29",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/var-dumper.git",
+ "reference": "6172e4ae3534d25ee9e07eb487c20be7760fcc65"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/var-dumper/zipball/6172e4ae3534d25ee9e07eb487c20be7760fcc65",
+ "reference": "6172e4ae3534d25ee9e07eb487c20be7760fcc65",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/polyfill-mbstring": "~1.0",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "conflict": {
+ "symfony/console": "<4.4"
+ },
+ "require-dev": {
+ "ext-iconv": "*",
+ "symfony/console": "^4.4|^5.0|^6.0",
+ "symfony/http-kernel": "^4.4|^5.0|^6.0",
+ "symfony/process": "^4.4|^5.0|^6.0",
+ "symfony/uid": "^5.1|^6.0",
+ "twig/twig": "^2.13|^3.0.4"
+ },
+ "suggest": {
+ "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).",
+ "ext-intl": "To show region name in time zone dump",
+ "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script"
+ },
+ "bin": [
+ "Resources/bin/var-dump-server"
+ ],
+ "type": "library",
+ "autoload": {
+ "files": [
+ "Resources/functions/dump.php"
+ ],
+ "psr-4": {
+ "Symfony\\Component\\VarDumper\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Provides mechanisms for walking through any arbitrary PHP variable",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "debug",
+ "dump"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/var-dumper/tree/v5.4.29"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-09-12T10:09:58+00:00"
+ },
+ {
+ "name": "tymon/jwt-auth",
+ "version": "dev-develop",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/tymondesigns/jwt-auth.git",
+ "reference": "014be8d493d228d14bbc291b24e835d330c092a0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/tymondesigns/jwt-auth/zipball/014be8d493d228d14bbc291b24e835d330c092a0",
+ "reference": "014be8d493d228d14bbc291b24e835d330c092a0",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/auth": "^5.2|^6|^7|^8|^9",
+ "illuminate/contracts": "^5.2|^6|^7|^8|^9",
+ "illuminate/http": "^5.2|^6|^7|^8|^9",
+ "illuminate/support": "^5.2|^6|^7|^8|^9",
+ "lcobucci/jwt": "^3.4|^4.0",
+ "namshi/jose": "^7.0",
+ "nesbot/carbon": "^1.0|^2.0",
+ "php": "^7.4|^8.0"
+ },
+ "require-dev": {
+ "illuminate/console": "^5.2|^6|^7|^8|^9",
+ "illuminate/database": "^5.2|^6|^7|^8|^9",
+ "illuminate/routing": "^5.2|^6|^7|^8|^9",
+ "mockery/mockery": ">=0.9.9",
+ "phpunit/phpunit": "^8.5|^9.4",
+ "yoast/phpunit-polyfills": "^0.2.0"
+ },
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-develop": "1.0-dev"
+ },
+ "laravel": {
+ "aliases": {
+ "JWTAuth": "Tymon\\JWTAuth\\Facades\\JWTAuth",
+ "JWTFactory": "Tymon\\JWTAuth\\Facades\\JWTFactory"
+ },
+ "providers": [
+ "Tymon\\JWTAuth\\Providers\\LaravelServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Tymon\\JWTAuth\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Sean Tymon",
+ "email": "tymon148@gmail.com",
+ "homepage": "https://tymon.xyz",
+ "role": "Developer"
+ }
+ ],
+ "description": "JSON Web Token Authentication for Laravel and Lumen",
+ "homepage": "https://github.com/tymondesigns/jwt-auth",
+ "keywords": [
+ "Authentication",
+ "JSON Web Token",
+ "auth",
+ "jwt",
+ "laravel"
+ ],
+ "support": {
+ "issues": "https://github.com/tymondesigns/jwt-auth/issues",
+ "source": "https://github.com/tymondesigns/jwt-auth"
+ },
+ "funding": [
+ {
+ "url": "https://www.patreon.com/seantymon",
+ "type": "patreon"
+ }
+ ],
+ "time": "2022-04-27T08:53:50+00:00"
+ },
+ {
+ "name": "vlucas/phpdotenv",
+ "version": "v5.6.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/vlucas/phpdotenv.git",
+ "reference": "2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4",
+ "reference": "2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4",
+ "shasum": ""
+ },
+ "require": {
+ "ext-pcre": "*",
+ "graham-campbell/result-type": "^1.1.2",
+ "php": "^7.2.5 || ^8.0",
+ "phpoption/phpoption": "^1.9.2",
+ "symfony/polyfill-ctype": "^1.24",
+ "symfony/polyfill-mbstring": "^1.24",
+ "symfony/polyfill-php80": "^1.24"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.8.2",
+ "ext-filter": "*",
+ "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2"
+ },
+ "suggest": {
+ "ext-filter": "Required to use the boolean validator."
+ },
+ "type": "library",
+ "extra": {
+ "bamarni-bin": {
+ "bin-links": true,
+ "forward-command": true
+ },
+ "branch-alias": {
+ "dev-master": "5.6-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Dotenv\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ },
+ {
+ "name": "Vance Lucas",
+ "email": "vance@vancelucas.com",
+ "homepage": "https://github.com/vlucas"
+ }
+ ],
+ "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.",
+ "keywords": [
+ "dotenv",
+ "env",
+ "environment"
+ ],
+ "support": {
+ "issues": "https://github.com/vlucas/phpdotenv/issues",
+ "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-11-12T22:43:29+00:00"
+ },
+ {
+ "name": "voku/portable-ascii",
+ "version": "1.6.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/voku/portable-ascii.git",
+ "reference": "87337c91b9dfacee02452244ee14ab3c43bc485a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/voku/portable-ascii/zipball/87337c91b9dfacee02452244ee14ab3c43bc485a",
+ "reference": "87337c91b9dfacee02452244ee14ab3c43bc485a",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.0.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0"
+ },
+ "suggest": {
+ "ext-intl": "Use Intl for transliterator_transliterate() support"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "voku\\": "src/voku/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Lars Moelleken",
+ "homepage": "http://www.moelleken.org/"
+ }
+ ],
+ "description": "Portable ASCII library - performance optimized (ascii) string functions for php.",
+ "homepage": "https://github.com/voku/portable-ascii",
+ "keywords": [
+ "ascii",
+ "clean",
+ "php"
+ ],
+ "support": {
+ "issues": "https://github.com/voku/portable-ascii/issues",
+ "source": "https://github.com/voku/portable-ascii/tree/1.6.1"
+ },
+ "funding": [
+ {
+ "url": "https://www.paypal.me/moelleken",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/voku",
+ "type": "github"
+ },
+ {
+ "url": "https://opencollective.com/portable-ascii",
+ "type": "open_collective"
+ },
+ {
+ "url": "https://www.patreon.com/voku",
+ "type": "patreon"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-01-24T18:55:24+00:00"
+ },
+ {
+ "name": "webmozart/assert",
+ "version": "1.11.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/webmozarts/assert.git",
+ "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991",
+ "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991",
+ "shasum": ""
+ },
+ "require": {
+ "ext-ctype": "*",
+ "php": "^7.2 || ^8.0"
+ },
+ "conflict": {
+ "phpstan/phpstan": "<0.12.20",
+ "vimeo/psalm": "<4.6.1 || 4.6.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^8.5.13"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.10-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Webmozart\\Assert\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@gmail.com"
+ }
+ ],
+ "description": "Assertions to validate method input/output with nice error messages.",
+ "keywords": [
+ "assert",
+ "check",
+ "validate"
+ ],
+ "support": {
+ "issues": "https://github.com/webmozarts/assert/issues",
+ "source": "https://github.com/webmozarts/assert/tree/1.11.0"
+ },
+ "time": "2022-06-03T18:03:27+00:00"
+ },
+ {
+ "name": "yajra/laravel-datatables-oracle",
+ "version": "v9.21.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/yajra/laravel-datatables.git",
+ "reference": "a7fd01f06282923e9c63fa27fe6b391e21dc321a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/yajra/laravel-datatables/zipball/a7fd01f06282923e9c63fa27fe6b391e21dc321a",
+ "reference": "a7fd01f06282923e9c63fa27fe6b391e21dc321a",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/database": "5.8.*|^6|^7|^8|^9",
+ "illuminate/filesystem": "5.8.*|^6|^7|^8|^9",
+ "illuminate/http": "5.8.*|^6|^7|^8|^9",
+ "illuminate/support": "5.8.*|^6|^7|^8|^9",
+ "illuminate/view": "5.8.*|^6|^7|^8|^9",
+ "php": "^7.1.3|^8"
+ },
+ "require-dev": {
+ "orchestra/testbench": "^3.8|^4.0|^5.0|^6.0|^7.0"
+ },
+ "suggest": {
+ "yajra/laravel-datatables-buttons": "Plugin for server-side exporting of dataTables.",
+ "yajra/laravel-datatables-editor": "Plugin to use DataTables Editor (requires a license).",
+ "yajra/laravel-datatables-fractal": "Plugin for server-side response using Fractal.",
+ "yajra/laravel-datatables-html": "Plugin for server-side HTML builder of dataTables."
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "9.0-dev"
+ },
+ "laravel": {
+ "providers": [
+ "Yajra\\DataTables\\DataTablesServiceProvider"
+ ],
+ "aliases": {
+ "DataTables": "Yajra\\DataTables\\Facades\\DataTables"
+ }
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/helper.php"
+ ],
+ "psr-4": {
+ "Yajra\\DataTables\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Arjay Angeles",
+ "email": "aqangeles@gmail.com"
+ }
+ ],
+ "description": "jQuery DataTables API for Laravel 5|6|7|8|9",
+ "keywords": [
+ "datatables",
+ "jquery",
+ "laravel"
+ ],
+ "support": {
+ "issues": "https://github.com/yajra/laravel-datatables/issues",
+ "source": "https://github.com/yajra/laravel-datatables/tree/v9.21.2"
+ },
+ "funding": [
+ {
+ "url": "https://www.paypal.me/yajra",
+ "type": "custom"
+ },
+ {
+ "url": "https://www.patreon.com/yajra",
+ "type": "patreon"
+ }
+ ],
+ "time": "2022-07-12T04:48:03+00:00"
+ }
+ ],
+ "packages-dev": [
+ {
+ "name": "doctrine/instantiator",
+ "version": "2.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/instantiator.git",
+ "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0",
+ "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^8.1"
+ },
+ "require-dev": {
+ "doctrine/coding-standard": "^11",
+ "ext-pdo": "*",
+ "ext-phar": "*",
+ "phpbench/phpbench": "^1.2",
+ "phpstan/phpstan": "^1.9.4",
+ "phpstan/phpstan-phpunit": "^1.3",
+ "phpunit/phpunit": "^9.5.27",
+ "vimeo/psalm": "^5.4"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Marco Pivetta",
+ "email": "ocramius@gmail.com",
+ "homepage": "https://ocramius.github.io/"
+ }
+ ],
+ "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
+ "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
+ "keywords": [
+ "constructor",
+ "instantiate"
+ ],
+ "support": {
+ "issues": "https://github.com/doctrine/instantiator/issues",
+ "source": "https://github.com/doctrine/instantiator/tree/2.0.0"
+ },
+ "funding": [
+ {
+ "url": "https://www.doctrine-project.org/sponsorship.html",
+ "type": "custom"
+ },
+ {
+ "url": "https://www.patreon.com/phpdoctrine",
+ "type": "patreon"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-12-30T00:23:10+00:00"
+ },
+ {
+ "name": "fakerphp/faker",
+ "version": "v1.23.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/FakerPHP/Faker.git",
+ "reference": "e3daa170d00fde61ea7719ef47bb09bb8f1d9b01"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/e3daa170d00fde61ea7719ef47bb09bb8f1d9b01",
+ "reference": "e3daa170d00fde61ea7719ef47bb09bb8f1d9b01",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.4 || ^8.0",
+ "psr/container": "^1.0 || ^2.0",
+ "symfony/deprecation-contracts": "^2.2 || ^3.0"
+ },
+ "conflict": {
+ "fzaninotto/faker": "*"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.4.1",
+ "doctrine/persistence": "^1.3 || ^2.0",
+ "ext-intl": "*",
+ "phpunit/phpunit": "^9.5.26",
+ "symfony/phpunit-bridge": "^5.4.16"
+ },
+ "suggest": {
+ "doctrine/orm": "Required to use Faker\\ORM\\Doctrine",
+ "ext-curl": "Required by Faker\\Provider\\Image to download images.",
+ "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.",
+ "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.",
+ "ext-mbstring": "Required for multibyte Unicode string functionality."
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "v1.21-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Faker\\": "src/Faker/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "François Zaninotto"
+ }
+ ],
+ "description": "Faker is a PHP library that generates fake data for you.",
+ "keywords": [
+ "data",
+ "faker",
+ "fixtures"
+ ],
+ "support": {
+ "issues": "https://github.com/FakerPHP/Faker/issues",
+ "source": "https://github.com/FakerPHP/Faker/tree/v1.23.0"
+ },
+ "time": "2023-06-12T08:44:38+00:00"
+ },
+ {
+ "name": "hamcrest/hamcrest-php",
+ "version": "v2.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/hamcrest/hamcrest-php.git",
+ "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3",
+ "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.3|^7.0|^8.0"
+ },
+ "replace": {
+ "cordoval/hamcrest-php": "*",
+ "davedevelopment/hamcrest-php": "*",
+ "kodova/hamcrest-php": "*"
+ },
+ "require-dev": {
+ "phpunit/php-file-iterator": "^1.4 || ^2.0",
+ "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.1-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "hamcrest"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "description": "This is the PHP port of Hamcrest Matchers",
+ "keywords": [
+ "test"
+ ],
+ "support": {
+ "issues": "https://github.com/hamcrest/hamcrest-php/issues",
+ "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1"
+ },
+ "time": "2020-07-09T08:09:16+00:00"
+ },
+ {
+ "name": "mockery/mockery",
+ "version": "1.6.7",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/mockery/mockery.git",
+ "reference": "0cc058854b3195ba21dc6b1f7b1f60f4ef3a9c06"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/mockery/mockery/zipball/0cc058854b3195ba21dc6b1f7b1f60f4ef3a9c06",
+ "reference": "0cc058854b3195ba21dc6b1f7b1f60f4ef3a9c06",
+ "shasum": ""
+ },
+ "require": {
+ "hamcrest/hamcrest-php": "^2.0.1",
+ "lib-pcre": ">=7.0",
+ "php": ">=7.3"
+ },
+ "conflict": {
+ "phpunit/phpunit": "<8.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^8.5 || ^9.6.10",
+ "symplify/easy-coding-standard": "^12.0.8"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "library/helpers.php",
+ "library/Mockery.php"
+ ],
+ "psr-4": {
+ "Mockery\\": "library/Mockery"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Pádraic Brady",
+ "email": "padraic.brady@gmail.com",
+ "homepage": "https://github.com/padraic",
+ "role": "Author"
+ },
+ {
+ "name": "Dave Marshall",
+ "email": "dave.marshall@atstsolutions.co.uk",
+ "homepage": "https://davedevelopment.co.uk",
+ "role": "Developer"
+ },
+ {
+ "name": "Nathanael Esayeas",
+ "email": "nathanael.esayeas@protonmail.com",
+ "homepage": "https://github.com/ghostwriter",
+ "role": "Lead Developer"
+ }
+ ],
+ "description": "Mockery is a simple yet flexible PHP mock object framework",
+ "homepage": "https://github.com/mockery/mockery",
+ "keywords": [
+ "BDD",
+ "TDD",
+ "library",
+ "mock",
+ "mock objects",
+ "mockery",
+ "stub",
+ "test",
+ "test double",
+ "testing"
+ ],
+ "support": {
+ "docs": "https://docs.mockery.io/",
+ "issues": "https://github.com/mockery/mockery/issues",
+ "rss": "https://github.com/mockery/mockery/releases.atom",
+ "security": "https://github.com/mockery/mockery/security/advisories",
+ "source": "https://github.com/mockery/mockery"
+ },
+ "time": "2023-12-10T02:24:34+00:00"
+ },
+ {
+ "name": "myclabs/deep-copy",
+ "version": "1.11.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/myclabs/DeepCopy.git",
+ "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c",
+ "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1 || ^8.0"
+ },
+ "conflict": {
+ "doctrine/collections": "<1.6.8",
+ "doctrine/common": "<2.13.3 || >=3,<3.2.2"
+ },
+ "require-dev": {
+ "doctrine/collections": "^1.6.8",
+ "doctrine/common": "^2.13.3 || ^3.2.2",
+ "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/DeepCopy/deep_copy.php"
+ ],
+ "psr-4": {
+ "DeepCopy\\": "src/DeepCopy/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Create deep copies (clones) of your objects",
+ "keywords": [
+ "clone",
+ "copy",
+ "duplicate",
+ "object",
+ "object graph"
+ ],
+ "support": {
+ "issues": "https://github.com/myclabs/DeepCopy/issues",
+ "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1"
+ },
+ "funding": [
+ {
+ "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-03-08T13:26:56+00:00"
+ },
+ {
+ "name": "phar-io/manifest",
+ "version": "2.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phar-io/manifest.git",
+ "reference": "97803eca37d319dfa7826cc2437fc020857acb53"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53",
+ "reference": "97803eca37d319dfa7826cc2437fc020857acb53",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-phar": "*",
+ "ext-xmlwriter": "*",
+ "phar-io/version": "^3.0.1",
+ "php": "^7.2 || ^8.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Heuer",
+ "email": "sebastian@phpeople.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
+ "support": {
+ "issues": "https://github.com/phar-io/manifest/issues",
+ "source": "https://github.com/phar-io/manifest/tree/2.0.3"
+ },
+ "time": "2021-07-20T11:28:43+00:00"
+ },
+ {
+ "name": "phar-io/version",
+ "version": "3.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phar-io/version.git",
+ "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
+ "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 || ^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Heuer",
+ "email": "sebastian@phpeople.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "Library for handling version information and constraints",
+ "support": {
+ "issues": "https://github.com/phar-io/version/issues",
+ "source": "https://github.com/phar-io/version/tree/3.2.1"
+ },
+ "time": "2022-02-21T01:04:05+00:00"
+ },
+ {
+ "name": "phpunit/php-code-coverage",
+ "version": "9.2.30",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
+ "reference": "ca2bd87d2f9215904682a9cb9bb37dda98e76089"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ca2bd87d2f9215904682a9cb9bb37dda98e76089",
+ "reference": "ca2bd87d2f9215904682a9cb9bb37dda98e76089",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-libxml": "*",
+ "ext-xmlwriter": "*",
+ "nikic/php-parser": "^4.18 || ^5.0",
+ "php": ">=7.3",
+ "phpunit/php-file-iterator": "^3.0.3",
+ "phpunit/php-text-template": "^2.0.2",
+ "sebastian/code-unit-reverse-lookup": "^2.0.2",
+ "sebastian/complexity": "^2.0",
+ "sebastian/environment": "^5.1.2",
+ "sebastian/lines-of-code": "^1.0.3",
+ "sebastian/version": "^3.0.1",
+ "theseer/tokenizer": "^1.2.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "suggest": {
+ "ext-pcov": "PHP extension that provides line coverage",
+ "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "9.2-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
+ "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
+ "keywords": [
+ "coverage",
+ "testing",
+ "xunit"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
+ "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
+ "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.30"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2023-12-22T06:47:57+00:00"
+ },
+ {
+ "name": "phpunit/php-file-iterator",
+ "version": "3.0.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
+ "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
+ "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "FilterIterator implementation that filters files based on a list of suffixes.",
+ "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
+ "keywords": [
+ "filesystem",
+ "iterator"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
+ "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2021-12-02T12:48:52+00:00"
+ },
+ {
+ "name": "phpunit/php-invoker",
+ "version": "3.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-invoker.git",
+ "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
+ "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "ext-pcntl": "*",
+ "phpunit/phpunit": "^9.3"
+ },
+ "suggest": {
+ "ext-pcntl": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.1-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Invoke callables with a timeout",
+ "homepage": "https://github.com/sebastianbergmann/php-invoker/",
+ "keywords": [
+ "process"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-invoker/issues",
+ "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-09-28T05:58:55+00:00"
+ },
+ {
+ "name": "phpunit/php-text-template",
+ "version": "2.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-text-template.git",
+ "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
+ "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Simple template engine.",
+ "homepage": "https://github.com/sebastianbergmann/php-text-template/",
+ "keywords": [
+ "template"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-text-template/issues",
+ "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T05:33:50+00:00"
+ },
+ {
+ "name": "phpunit/php-timer",
+ "version": "5.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-timer.git",
+ "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
+ "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Utility class for timing",
+ "homepage": "https://github.com/sebastianbergmann/php-timer/",
+ "keywords": [
+ "timer"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-timer/issues",
+ "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T13:16:10+00:00"
+ },
+ {
+ "name": "phpunit/phpunit",
+ "version": "9.6.15",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/phpunit.git",
+ "reference": "05017b80304e0eb3f31d90194a563fd53a6021f1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/05017b80304e0eb3f31d90194a563fd53a6021f1",
+ "reference": "05017b80304e0eb3f31d90194a563fd53a6021f1",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/instantiator": "^1.3.1 || ^2",
+ "ext-dom": "*",
+ "ext-json": "*",
+ "ext-libxml": "*",
+ "ext-mbstring": "*",
+ "ext-xml": "*",
+ "ext-xmlwriter": "*",
+ "myclabs/deep-copy": "^1.10.1",
+ "phar-io/manifest": "^2.0.3",
+ "phar-io/version": "^3.0.2",
+ "php": ">=7.3",
+ "phpunit/php-code-coverage": "^9.2.28",
+ "phpunit/php-file-iterator": "^3.0.5",
+ "phpunit/php-invoker": "^3.1.1",
+ "phpunit/php-text-template": "^2.0.3",
+ "phpunit/php-timer": "^5.0.2",
+ "sebastian/cli-parser": "^1.0.1",
+ "sebastian/code-unit": "^1.0.6",
+ "sebastian/comparator": "^4.0.8",
+ "sebastian/diff": "^4.0.3",
+ "sebastian/environment": "^5.1.3",
+ "sebastian/exporter": "^4.0.5",
+ "sebastian/global-state": "^5.0.1",
+ "sebastian/object-enumerator": "^4.0.3",
+ "sebastian/resource-operations": "^3.0.3",
+ "sebastian/type": "^3.2",
+ "sebastian/version": "^3.0.2"
+ },
+ "suggest": {
+ "ext-soap": "To be able to generate mocks based on WSDL files",
+ "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage"
+ },
+ "bin": [
+ "phpunit"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "9.6-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/Framework/Assert/Functions.php"
+ ],
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "The PHP Unit Testing framework.",
+ "homepage": "https://phpunit.de/",
+ "keywords": [
+ "phpunit",
+ "testing",
+ "xunit"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/phpunit/issues",
+ "security": "https://github.com/sebastianbergmann/phpunit/security/policy",
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.15"
+ },
+ "funding": [
+ {
+ "url": "https://phpunit.de/sponsors.html",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-12-01T16:55:19+00:00"
+ },
+ {
+ "name": "sebastian/cli-parser",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/cli-parser.git",
+ "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2",
+ "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library for parsing CLI options",
+ "homepage": "https://github.com/sebastianbergmann/cli-parser",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/cli-parser/issues",
+ "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-09-28T06:08:49+00:00"
+ },
+ {
+ "name": "sebastian/code-unit",
+ "version": "1.0.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/code-unit.git",
+ "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120",
+ "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Collection of value objects that represent the PHP code units",
+ "homepage": "https://github.com/sebastianbergmann/code-unit",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/code-unit/issues",
+ "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T13:08:54+00:00"
+ },
+ {
+ "name": "sebastian/code-unit-reverse-lookup",
+ "version": "2.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
+ "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
+ "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Looks up which function or method a line of code belongs to",
+ "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues",
+ "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-09-28T05:30:19+00:00"
+ },
+ {
+ "name": "sebastian/comparator",
+ "version": "4.0.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/comparator.git",
+ "reference": "fa0f136dd2334583309d32b62544682ee972b51a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a",
+ "reference": "fa0f136dd2334583309d32b62544682ee972b51a",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3",
+ "sebastian/diff": "^4.0",
+ "sebastian/exporter": "^4.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Volker Dusch",
+ "email": "github@wallbash.com"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@2bepublished.at"
+ }
+ ],
+ "description": "Provides the functionality to compare PHP values for equality",
+ "homepage": "https://github.com/sebastianbergmann/comparator",
+ "keywords": [
+ "comparator",
+ "compare",
+ "equality"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/comparator/issues",
+ "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2022-09-14T12:41:17+00:00"
+ },
+ {
+ "name": "sebastian/complexity",
+ "version": "2.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/complexity.git",
+ "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a",
+ "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a",
+ "shasum": ""
+ },
+ "require": {
+ "nikic/php-parser": "^4.18 || ^5.0",
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library for calculating the complexity of PHP code units",
+ "homepage": "https://github.com/sebastianbergmann/complexity",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/complexity/issues",
+ "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2023-12-22T06:19:30+00:00"
+ },
+ {
+ "name": "sebastian/diff",
+ "version": "4.0.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/diff.git",
+ "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/74be17022044ebaaecfdf0c5cd504fc9cd5a7131",
+ "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3",
+ "symfony/process": "^4.2 || ^5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Kore Nordmann",
+ "email": "mail@kore-nordmann.de"
+ }
+ ],
+ "description": "Diff implementation",
+ "homepage": "https://github.com/sebastianbergmann/diff",
+ "keywords": [
+ "diff",
+ "udiff",
+ "unidiff",
+ "unified diff"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/diff/issues",
+ "source": "https://github.com/sebastianbergmann/diff/tree/4.0.5"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2023-05-07T05:35:17+00:00"
+ },
+ {
+ "name": "sebastian/environment",
+ "version": "5.1.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/environment.git",
+ "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed",
+ "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "suggest": {
+ "ext-posix": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.1-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Provides functionality to handle HHVM/PHP environments",
+ "homepage": "http://www.github.com/sebastianbergmann/environment",
+ "keywords": [
+ "Xdebug",
+ "environment",
+ "hhvm"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/environment/issues",
+ "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2023-02-03T06:03:51+00:00"
+ },
+ {
+ "name": "sebastian/exporter",
+ "version": "4.0.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/exporter.git",
+ "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d",
+ "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3",
+ "sebastian/recursion-context": "^4.0"
+ },
+ "require-dev": {
+ "ext-mbstring": "*",
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Volker Dusch",
+ "email": "github@wallbash.com"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@gmail.com"
+ }
+ ],
+ "description": "Provides the functionality to export PHP variables for visualization",
+ "homepage": "https://www.github.com/sebastianbergmann/exporter",
+ "keywords": [
+ "export",
+ "exporter"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/exporter/issues",
+ "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2022-09-14T06:03:37+00:00"
+ },
+ {
+ "name": "sebastian/global-state",
+ "version": "5.0.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/global-state.git",
+ "reference": "bde739e7565280bda77be70044ac1047bc007e34"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bde739e7565280bda77be70044ac1047bc007e34",
+ "reference": "bde739e7565280bda77be70044ac1047bc007e34",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3",
+ "sebastian/object-reflector": "^2.0",
+ "sebastian/recursion-context": "^4.0"
+ },
+ "require-dev": {
+ "ext-dom": "*",
+ "phpunit/phpunit": "^9.3"
+ },
+ "suggest": {
+ "ext-uopz": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Snapshotting of global state",
+ "homepage": "http://www.github.com/sebastianbergmann/global-state",
+ "keywords": [
+ "global state"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/global-state/issues",
+ "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.6"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2023-08-02T09:26:13+00:00"
+ },
+ {
+ "name": "sebastian/lines-of-code",
+ "version": "1.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/lines-of-code.git",
+ "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5",
+ "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5",
+ "shasum": ""
+ },
+ "require": {
+ "nikic/php-parser": "^4.18 || ^5.0",
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library for counting the lines of code in PHP source code",
+ "homepage": "https://github.com/sebastianbergmann/lines-of-code",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/lines-of-code/issues",
+ "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2023-12-22T06:20:34+00:00"
+ },
+ {
+ "name": "sebastian/object-enumerator",
+ "version": "4.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/object-enumerator.git",
+ "reference": "5c9eeac41b290a3712d88851518825ad78f45c71"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71",
+ "reference": "5c9eeac41b290a3712d88851518825ad78f45c71",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3",
+ "sebastian/object-reflector": "^2.0",
+ "sebastian/recursion-context": "^4.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Traverses array structures and object graphs to enumerate all referenced objects",
+ "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/object-enumerator/issues",
+ "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T13:12:34+00:00"
+ },
+ {
+ "name": "sebastian/object-reflector",
+ "version": "2.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/object-reflector.git",
+ "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
+ "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Allows reflection of object attributes, including inherited and non-public ones",
+ "homepage": "https://github.com/sebastianbergmann/object-reflector/",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/object-reflector/issues",
+ "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T13:14:26+00:00"
+ },
+ {
+ "name": "sebastian/recursion-context",
+ "version": "4.0.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/recursion-context.git",
+ "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1",
+ "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
+ }
+ ],
+ "description": "Provides functionality to recursively process PHP variables",
+ "homepage": "https://github.com/sebastianbergmann/recursion-context",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/recursion-context/issues",
+ "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2023-02-03T06:07:39+00:00"
+ },
+ {
+ "name": "sebastian/resource-operations",
+ "version": "3.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/resource-operations.git",
+ "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8",
+ "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Provides a list of PHP built-in functions that operate on resources",
+ "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/resource-operations/issues",
+ "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-09-28T06:45:17+00:00"
+ },
+ {
+ "name": "sebastian/type",
+ "version": "3.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/type.git",
+ "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7",
+ "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.2-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Collection of value objects that represent the types of the PHP type system",
+ "homepage": "https://github.com/sebastianbergmann/type",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/type/issues",
+ "source": "https://github.com/sebastianbergmann/type/tree/3.2.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2023-02-03T06:13:03+00:00"
+ },
+ {
+ "name": "sebastian/version",
+ "version": "3.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/version.git",
+ "reference": "c6c1022351a901512170118436c764e473f6de8c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c",
+ "reference": "c6c1022351a901512170118436c764e473f6de8c",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library that helps with managing the version number of Git-hosted PHP projects",
+ "homepage": "https://github.com/sebastianbergmann/version",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/version/issues",
+ "source": "https://github.com/sebastianbergmann/version/tree/3.0.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-09-28T06:39:44+00:00"
+ },
+ {
+ "name": "theseer/tokenizer",
+ "version": "1.2.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/theseer/tokenizer.git",
+ "reference": "b2ad5003ca10d4ee50a12da31de12a5774ba6b96"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b2ad5003ca10d4ee50a12da31de12a5774ba6b96",
+ "reference": "b2ad5003ca10d4ee50a12da31de12a5774ba6b96",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-tokenizer": "*",
+ "ext-xmlwriter": "*",
+ "php": "^7.2 || ^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
+ "support": {
+ "issues": "https://github.com/theseer/tokenizer/issues",
+ "source": "https://github.com/theseer/tokenizer/tree/1.2.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/theseer",
+ "type": "github"
+ }
+ ],
+ "time": "2023-11-20T00:12:19+00:00"
+ }
+ ],
+ "aliases": [],
+ "minimum-stability": "dev",
+ "stability-flags": [],
+ "prefer-stable": true,
+ "prefer-lowest": false,
+ "platform": {
+ "php": "^7.3|^8.0"
+ },
+ "platform-dev": [],
+ "plugin-api-version": "2.6.0"
+}
diff --git a/rest-client.http b/rest-client.http
index 772aee0..932e596 100644
--- a/rest-client.http
+++ b/rest-client.http
@@ -1,4 +1,5 @@
-@token = eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9sb2NhbGhvc3Q6ODQ0NFwvYXBpXC9sb2dpbiIsImlhdCI6MTY5MTc2MDYyNCwiZXhwIjoxNjkyMzY1NDI0LCJuYmYiOjE2OTE3NjA2MjQsImp0aSI6Ikd2bEFPTE4yZ2FuRFdVbjEiLCJzdWIiOjEsInBydiI6IjIzYmQ1Yzg5NDlmNjAwYWRiMzllNzAxYzQwMDg3MmRiN2E1OTc2ZjcifQ.XNGbsmcgQ-CkV8vLlvnItGKM0R1am5X5b6qUFOR1DRo
+@token = eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9iYWNrZW5kLnRlc3RcL2FwaVwvbG9naW4iLCJpYXQiOjE3MDEzNzMzNzQsImV4cCI6MTcwMTk3ODE3NCwibmJmIjoxNzAxMzczMzc0LCJqdGkiOiJhbkJWOHIwUDZndFRXZk5KIiwic3ViIjoxNzg4LCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.QCiXq-62da7Sdk7sEb_J0apEij_R6IQgZVYG9iL6M8g
+
@tokenS = eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9hZHctYXBpLm9zcHJvLmlkXC9hcGlcL2xvZ2luIiwiaWF0IjoxNjkxNTcyMTIwLCJleHAiOjE2OTIxNzY5MjAsIm5iZiI6MTY5MTU3MjEyMCwianRpIjoiVUdqbnhLRVdlZzYyTTBnayIsInN1YiI6MSwicHJ2IjoiMjNiZDVjODk0OWY2MDBhZGIzOWU3MDFjNDAwODcyZGI3YTU5NzZmNyJ9.5QqK0dLW5jzbVOkSCSW0mFo0K7ycGOBW9NCG_2Zldm4
@@ -6,7 +7,7 @@
# @hostname = https://ospro-api.ospro.id/api
# @hostname = https://api-iu.ospro.id/api
# @hostname = https://api-staging-adw.ospro.id/api
-@hostname = http://localhost:8444/api
+@hostname = http://backend.test/api
# @hostname = http://103.73.125.81:8444/api
# @hostname = http://localhost:8444/adw-backend/api
@@ -17,8 +18,8 @@ POST {{hostname}}/login
content-type: application/json
{
- "username": "admin",
- "password": "1nt3gr4s14"
+ "username": "testing",
+ "password": "testing123"
}
###### Tools Req
@@ -418,7 +419,7 @@ content-type: application/json
"operator": "AND"
}
],
- "select": ["kode_sortname", "nama", "mulai_proyek"],
+ "select": ["id", "nama", "rencana_biaya", "type_proyek_id", "currency_symbol", "mulai_proyek", "akhir_proyek"],
"joins": [
{
"name": "m_users",
@@ -455,7 +456,43 @@ Authorization: Bearer {{tokenS}}
content-type: application/json
{
- "columns":[{"name":"nama","logic_operator":"ilike","value":"","operator":"AND"}],"joins":[{"name":"m_users","column_join":"pm_id","column_results":["name","username"]},{"name":"m_type_proyek","column_join":"type_proyek_id","column_results":["name","description"]}],"orders":{"columns":["id"],"ascending":false},"paging":{"start":0,"length":10}
+ "columns": [
+ {
+ "name": "nama",
+ "logic_operator": "ilike",
+ "value": "",
+ "operator": "AND"
+ }
+ ],
+ "select": ["id", "nama", "rencana_biaya", "color_progress", "currency_symbol", "mulai_proyek", "akhir_proyek"],
+ "joins": [
+ {
+ "name": "m_users",
+ "column_join": "pm_id",
+ "column_results": [
+ "name",
+ "username"
+ ]
+ },
+ {
+ "name": "m_type_proyek",
+ "column_join": "type_proyek_id",
+ "column_results": [
+ "name",
+ "description"
+ ]
+ }
+ ],
+ "orders": {
+ "columns": [
+ "id"
+ ],
+ "ascending": false
+ },
+ "paging": {
+ "start": 0,
+ "length": 10
+ }
}
### add
@@ -529,7 +566,7 @@ content-type: application/json
###### Activity
### get data by id version
-GET {{hostname}}/activity/33/29/get
+GET {{hostname}}/activity/550/137/get
Authorization: Bearer {{token}}
content-type: application/json
@@ -785,24 +822,44 @@ content-type: application/json
###
-POST {{hostname}}/activity/get-curva-s
+POST {{hostname}}/dashboard/curva-s
Authorization: Bearer {{token}}
content-type: application/json
{
- "project_id": [47],
- "period": "week"
+ "project_id": [15]
}
+###
+POST {{hostname}}/project/s-curve-command-test
+Authorization: Bearer {{token}}
+content-type: application/json
+
+# {"period":"week","project_id":"137","gantt_id":"916"}
+# {"period":"week","project_id":"129","gantt_id":"862"}
+{"period":"week","project_id":"140","gantt_id":"1103"}
###
-POST {{hostname}}/dashboard/curva-s
+POST {{hostname}}/project/calculate-s-curve
+Authorization: Bearer {{token}}
+content-type: application/json
+
+{"period":"week","project_id":"129","gantt_id":"862"}
+### {"period":"week","project_id":"135","gantt_id":"891"}
+
+#######
+POST {{hostname}}/project/get-s-curve
+Authorization: Bearer {{token}}
+content-type: application/json
+
+{"project_id":"164","gantt_id":"973","period":"week"}
+### {"period":"week","project_id":"129","gantt_id":"800"}
+
+#######
+GET {{hostname}}/activity/s-curve/137/892
Authorization: Bearer {{token}}
content-type: application/json
-{
- "project_id": [15]
-}
###
GET https://adw-api.ospro.id/api/request-material/get-material-integration?name=c
@@ -957,6 +1014,27 @@ content-type: application/json
"user_id": 1247
}
+
+# -6.226761,106.809311 jkarta
+# -6.465806,106.760559
+# -6.356175,108.336182 indramayu
+# -6.266805,106.468048, tigaraksa
+# -6.205115,106.918373 jatinegara
+######
+POST {{hostname}}/presence/test
+Authorization: Bearer {{token}}
+content-type: application/json
+
+{
+ "clock_in_out": {
+ "clock_out_lat": -6.356175,
+ "clock_out_lng": 108.336182,
+ "type" : "out"
+ },
+ "time": "2023-08-15T14:48:17+07:00",
+ "user_id": 1566
+}
+
######
POST {{hostname}}/presence/add
Authorization: Bearer {{token}}
@@ -1016,9 +1094,7 @@ POST {{hostname}}/map-monitoring/search
Authorization: Bearer {{token}}
content-type: application/json
-{
- "project_id" : [75, 76, 78]
-}
+{"project_id":[140,138,132,130]}
######
POST {{hostname}}/waypoint/add-bulk
@@ -1159,13 +1235,3 @@ content-type: application/json
}
}
-#######
-POST {{hostname}}/project/get-s-curve
-Authorization: Bearer {{token}}
-content-type: application/json
-
-{
- "period":"week",
- "project_id":"118",
- "gantt_id":"287"
-}
\ No newline at end of file
diff --git a/routes/web.php b/routes/web.php
index a629000..9037b16 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -6,6 +6,19 @@ $router->get('/', function () use ($router) {
$router->group(['prefix' => 'api', 'middleware' => 'cors'], function () use ($router) {
$router->post('/login', 'AuthController@login');
+ // Landing Route
+ $router->post('/send-email', 'AuthController@sendEmail');
+ $router->post('/user-register','UserRegisterController@add');
+ $router->post('/company-management-user/add', 'CompanyController@add');
+ $router->post('/product-transaction-user/add', 'ProductTransactionController@add');
+ $router->post('/company-management-user/search', 'CompanyController@search');
+ $router->post('/human-resource-user/add', 'HumanResourceController@add_user');
+ $router->get('/company-management-user/edit/{id}', 'CompanyController@edit');
+ $router->post('/demo-management-user/add', 'DemoController@add');
+ $router->post('/role-user/add', 'RoleController@add');
+ $router->post('/menu-company-user/add-multiple', 'MenuCompanyController@addMultiple');
+ $router->post('/role-menu-user/add-multiple', 'RoleMenuController@addMultiple');
+ $router->post('/refferal-code-user/search', 'RefferalCodeController@search');
$router->post('/menu/add', 'MenuController@add');
$router->get('/menu/edit/{id}', 'MenuController@edit');
@@ -21,18 +34,28 @@ $router->group(['prefix' => 'api', 'middleware' => 'cors'], function () use ($ro
$router->post('/role-menu/search', 'RoleMenuController@search');
$router->get('/role-menu/get-role/{id}', 'RoleMenuController@listMenu');
+ $router->post('/sales-contact/add', 'ContactSalesController@add');
+ $router->get('/sales-contact/edit/{id}', 'ContactSalesController@edit');
+ $router->put('/sales-contact/update/{id}', 'ContactSalesController@update');
+ $router->post('/sales-contact/search', 'ContactSalesController@search');
+ $router->delete('/sales-contact/delete/{id}', 'ContactSalesController@delete');
+
$router->group(['middleware' => ['auth', 'cors']], function () use ($router) {
- $router->get('/dashboard/get-company-cashflow[/{year}]', 'DashboardBoDController@getCompanyCashFlow'); // project expenditure
- $router->get('/dashboard/get-invoice-outstanding[/{year}]', 'DashboardBoDController@getInvoiceOutstanding'); // project invoice vs cash in
- $router->get('/dashboard/get-total-project-per-schedule-health[/{year}]', 'DashboardBoDController@getTotalProjectPerScheduleHealth');
- $router->get('/dashboard/get-total-project-per-budget-health[/{year}]', 'DashboardBoDController@getTotalProjectPerBudgetHealth');
- $router->get('/dashboard/get-total-project-schedule-health-per-division[/{year}]', 'DashboardBoDController@getTotalProjectScheduleHealthPerDivision');
- $router->get('/dashboard/get-total-project-budget-health-per-division[/{year}]', 'DashboardBoDController@getTotalProjectBudgetHealthPerDivision');
- $router->get('/dashboard/get-total-project-per-phase[/{year}]', 'DashboardBoDController@getTotalProjectPerPhase');
- $router->get('/dashboard/get-total-project-per-division[/{year}]', 'DashboardBoDController@getTotalProjectPerDivision');
- $router->get('/dashboard/get-total-project-value-per-division[/{year}]', 'DashboardBoDController@getTotalProjectValuePerDivision');
- $router->get('/dashboard/get-detail-expenditure[/{year}]', 'DashboardBoDController@getDetailExpenditure');
+ $router->get('/dashboard/get-company-cashflow/{company_id}/{all_project}/{hierarchy}/{role_name}', 'DashboardBoDController@getCompanyCashFlow'); // project expenditure
+ $router->get('/dashboard/get-invoice-outstanding/{company_id}/{all_project}/{hierarchy}/{role_name}', 'DashboardBoDController@getInvoiceOutstanding'); // project invoice vs cash in
+ $router->get('/dashboard/get-total-project-per-schedule-health/{company_id}/{all_project}/{hierarchy}/{role_name}', 'DashboardBoDController@getTotalProjectPerScheduleHealth');
+ $router->get('/dashboard/get-total-project-per-budget-health/{company_id}/{all_project}/{hierarchy}/{role_name}', 'DashboardBoDController@getTotalProjectPerBudgetHealth');
+ $router->get('/dashboard/get-total-project-schedule-health-per-division/{company_id}/{all_project}/{hierarchy}/{role_name}', 'DashboardBoDController@getTotalProjectScheduleHealthPerDivision');
+ $router->get('/dashboard/get-total-project-budget-health-per-division/{company_id}/{all_project}/{hierarchy}/{role_name}', 'DashboardBoDController@getTotalProjectBudgetHealthPerDivision');
+ $router->get('/dashboard/get-total-project-per-phase/{company_id}/{all_project}/{hierarchy}/{role_name}', 'DashboardBoDController@getTotalProjectPerPhase');
+ $router->get('/dashboard/get-total-project-per-division/{company_id}/{all_project}/{hierarchy}/{role_name}', 'DashboardBoDController@getTotalProjectPerDivision');
+ $router->get('/dashboard/get-total-project-value-per-division/{company_id}/{all_project}/{hierarchy}/{role_name}', 'DashboardBoDController@getTotalProjectValuePerDivision');
+ $router->get('/dashboard/get-detail-expenditure/{company_id}/{all_project}/{hierarchy}/{role_name}', 'DashboardBoDController@getDetailExpenditure');
+ $router->get('/dashboard/get-detail-expenditure-color/{company_id}/{role_name}', 'DashboardBoDController@getDetailExpenditureColor');
+ $router->get('/dashboard/get-detail-financial-health-color/{company_id}/{role_name}', 'DashboardBoDController@getDetailFinancialHealthColor');
+ $router->get('/dashboard/get-detail-schedule-health-color/{company_id}/{role_name}', 'DashboardBoDController@getDetailScheduleHealthColor');
+ $router->get('/dashboard/get-detail-invoice-color/{company_id}/{role_name}', 'DashboardBoDController@getDetailInvoiceColor');
$router->post('/role/search', 'RoleController@search');
$router->post('/role/add', 'RoleController@add');
@@ -43,15 +66,15 @@ $router->group(['prefix' => 'api', 'middleware' => 'cors'], function () use ($ro
$router->post('/document-project/upload', 'ProjectDokumenController@uploadProjectDokumen');
$router->get('/document-project/get/{id}', 'ProjectDokumenController@dokumenByProyekId');
- $router->delete('/document-project/delete/{id}', 'ProjectDokumenController@delete');
+ $router->delete('/document-project/delete/{id}/{company_id}', 'ProjectDokumenController@delete');
$router->post('/document-project/search', 'ProjectDokumenController@searchDocProject');
- $router->get('/document-project/download/{id}', 'ProjectDokumenController@downloadDokumen');
+ $router->get('/document-project/download/{id}/{company_id}', 'ProjectDokumenController@downloadDokumen');
$router->post('/document-activity/upload', 'ActivityDokumenController@uploadProjectDokumen');
$router->get('/document-activity/get/{id}', 'ActivityDokumenController@dokumenByActivityId');
- $router->delete('/document-activity/delete/{id}', 'ActivityDokumenController@delete');
+ $router->delete('/document-activity/delete/{id}/{company_id}', 'ActivityDokumenController@delete');
$router->post('/document-activity/search', 'ActivityDokumenController@searchDocProject');
- $router->get('/document-activity/download/{id}', 'ActivityDokumenController@downloadDokumen');
+ $router->get('/document-activity/download/{id}/{company_id}', 'ActivityDokumenController@downloadDokumen');
$router->get('/project-by-customer/{id}', 'ProjectController@getByUser');
$router->post('/project/search', 'ProjectController@search');
@@ -59,9 +82,10 @@ $router->group(['prefix' => 'api', 'middleware' => 'cors'], function () use ($ro
$router->put('/project/update/{id}', 'ProjectController@update');
$router->get('/project/edit/{id}', 'ProjectController@edit');
$router->get('/project/detail/{id}[/{gantt_id}[/{s_curve}]]', 'ProjectController@detail');
- $router->delete('/project/delete/{id}', 'ProjectController@delete');
+ $router->delete('/project/delete/{id}/{company_id}', 'ProjectController@delete');
$router->get('/project/list', 'ProjectController@list');
$router->get('/project/set-baseline/{gantt_id}', 'ProjectController@setBaseline');
+ $router->get('/project/set-baseline-activity/{activity_id}/{gantt_id}', 'ProjectController@setBaselineActivity');
$router->get('/project/synchronize-report/{gantt_id}', 'ProjectController@synchronizeReport');
$router->get('/project/manpower/{proyek_id}', 'ProjectController@getManpower');
$router->get('/project/manpower/assigned/{gantt_id}', 'ProjectController@getAssignedHR');
@@ -69,17 +93,20 @@ $router->group(['prefix' => 'api', 'middleware' => 'cors'], function () use ($ro
$router->post('/project/get-s-curve', 'ProjectController@getSCurve');
$router->post('/project/calculate-s-curve', 'ProjectController@calculateSCurve');
$router->post('/project/s-curve-command', 'ProjectController@sCurveCommand');
+ $router->post('/project/s-curve-command-test', 'ProjectController@calculateSCurvetest');
$router->post('/project/get-linear-s-curve', 'ProjectController@getLinearSCurve');
$router->post('/project/get-overdue-activities', 'ProjectController@getOverdueActivities');
$router->post('/project/get-integration-invoice', 'ProjectController@getInvoiceIntegration');
$router->post('/project/get-report-distribution', 'ProjectController@getReportDistribution');
+ $router->get('/project/get-integration-project-cost={name}', 'ProjectController@getProjectCostIntegration');
+
/* $router->get('/project/get-expenditure/{id}/{date?}', 'ProjectController@getExpenditure'); */
/* $router->get('/project/get-total-expenditure/{id}', 'ProjectController@getTotalExpenditure'); */
/* $router->get('/project/get-status-health-schedule/{id}', 'ProjectController@getStatusSchedule'); */
/* $router->get('/project/get-status-health-budget/{id}', 'ProjectController@getStatusBudget'); */
- $router->get('/project-carausell','ProjectCarausellController@invoke');
+ $router->get('/project-carausell/{company_id}/{all_project}/{hierarchy}', 'ProjectCarausellController@invoke');
$router->post('/project-charter/search', 'ProjectCharterController@search');
$router->post('/project-charter/add', 'ProjectCharterController@add');
@@ -137,6 +164,30 @@ $router->group(['prefix' => 'api', 'middleware' => 'cors'], function () use ($ro
$router->delete('/project-phase/delete/{id}', 'ProjectPhaseController@delete');
$router->get('/project-phase/list', 'ProjectPhaseController@list');
+ $router->post('/project-expenditure/add', 'ProjectExpenditureController@add');
+ $router->post('/project-expenditure/search', 'ProjectExpenditureController@search');
+ $router->get('/project-expenditure/edit/{id}', 'ProjectExpenditureController@edit');
+ $router->put('/project-expenditure/update/{id}', 'ProjectExpenditureController@update');
+ $router->delete('/project-expenditure/delete/{id}', 'ProjectExpenditureController@delete');
+
+ $router->post('/project-financial-health/add', 'ProjectFinancialHealthController@add');
+ $router->post('/project-financial-health/search', 'ProjectFinancialHealthController@search');
+ $router->get('/project-financial-health/edit/{id}', 'ProjectFinancialHealthController@edit');
+ $router->put('/project-financial-health/update/{id}', 'ProjectFinancialHealthController@update');
+ $router->delete('/project-financial-health/delete/{id}', 'ProjectFinancialHealthController@delete');
+
+ $router->post('/project-schedule-health/add', 'ProjectScheduleHealthController@add');
+ $router->post('/project-schedule-health/search', 'ProjectScheduleHealthController@search');
+ $router->get('/project-schedule-health/edit/{id}', 'ProjectScheduleHealthController@edit');
+ $router->put('/project-schedule-health/update/{id}', 'ProjectScheduleHealthController@update');
+ $router->delete('/project-schedule-health/delete/{id}', 'ProjectScheduleHealthController@delete');
+
+ $router->post('/project-invoice/add', 'ProjectInvoiceController@add');
+ $router->post('/project-invoice/search', 'ProjectInvoiceController@search');
+ $router->get('/project-invoice/edit/{id}', 'ProjectInvoiceController@edit');
+ $router->put('/project-invoice/update/{id}', 'ProjectInvoiceController@update');
+ $router->delete('/project-invoice/delete/{id}', 'ProjectInvoiceController@delete');
+
$router->post('/user-to-project/assign', 'UserProyekController@assignUserProyek');
$router->post('/request-material/add', 'RequestMaterialController@add');
@@ -198,6 +249,7 @@ $router->group(['prefix' => 'api', 'middleware' => 'cors'], function () use ($ro
$router->get('/user-to-activity/edit/{id}', 'UserToActivityController@edit');
$router->put('/user-to-activity/update/{id}', 'UserToActivityController@update');
$router->post('/user-to-activity/search', 'UserToActivityController@search');
+ $router->post('/user-to-activity/by-date-status', 'UserToActivityController@activityUser');
$router->post('/user-to-activity/search-analysis', 'UserToActivityController@searchAnalysis');
$router->post('/user-to-activity/list-filtered', 'UserToActivityController@listFiltered');
$router->delete('/user-to-activity/delete/{id}', 'UserToActivityController@delete');
@@ -214,6 +266,8 @@ $router->group(['prefix' => 'api', 'middleware' => 'cors'], function () use ($ro
$router->post('/activity/import-old', 'ActivityController@importOld');
$router->post('/activity/batch-update/{ganttId}', 'ActivityController@batchUpdate');
$router->get('/activity/update-schedule/{ganttId}', 'ActivityController@updateSchedule');
+ $router->get('/activity/s-curve/{proyek_id}/{gantt_id}', 'ActivityController@activitySCurve');
+
$router->post('/task', 'ActivityController@add');
$router->get('/task/edit/{id}', 'ActivityController@edit');
$router->put('/task/{id}', 'ActivityController@update');
@@ -279,8 +333,10 @@ $router->group(['prefix' => 'api', 'middleware' => 'cors'], function () use ($ro
$router->post('/image/search', 'ImageController@search');
$router->delete('/image/delete/{id}', 'ImageController@delete');
- $router->delete('/image/delete/{id}/{category}', 'ImageController@deleteByRef');
+ $router->delete('/image/delete/{id}/{category}/{company_id}', 'ImageController@deleteByRef');
+ $router->delete('/image/multiple-delete/{id}/{category}/{company_id}', 'ImageController@deleteByRefMultiple');
$router->post('/image/upload', 'ImageController@uploadImage');
+ $router->post('/image/multiple-upload', 'ImageController@uploadMultipleImage');
$router->get('/image/{id}/{category}', 'ImageController@getByRefId');
$router->post('/panic-button/add', 'PanicButtonController@add');
@@ -315,6 +371,18 @@ $router->group(['prefix' => 'api', 'middleware' => 'cors'], function () use ($ro
$router->get('/project-issues/list', 'ProjectIssuesController@list');
$router->get('/project-issues/{where}/{val}', 'ProjectIssuesController@customWhere');
+ $router->get('/kanban-board/list', 'KanbanBoardController@list');
+ $router->post('/kanban-board/add', 'KanbanBoardController@add');
+ $router->put('/kanban-board/update/{id}', 'KanbanBoardController@update');
+ $router->delete('/kanban-board/delete/{id}', 'KanbanBoardController@delete');
+ $router->post('/kanban-board/search', 'KanbanBoardController@search');
+
+ $router->get('/kanban-card/get-data/{project_id}/{gantt_id}/{board_id}', 'KanbanCardController@getData');
+ $router->post('/kanban-card/add', 'KanbanCardController@add');
+ $router->put('/kanban-card/update/{id}', 'KanbanCardController@update');
+ $router->delete('/kanban-card/delete/{id}', 'KanbanCardController@delete');
+ $router->post('/kanban-card/search', 'KanbanCardController@search');
+
$router->post('/project-risks/add', 'ProjectRisksController@add');
$router->get('/project-risks/edit/{id}', 'ProjectRisksController@edit');
$router->put('/project-issues/update/{id}', 'ProjectRisksController@update');
@@ -363,7 +431,7 @@ $router->group(['prefix' => 'api', 'middleware' => 'cors'], function () use ($ro
$router->post('/report-activity-material/add', 'ReportActivityMaterialController@add');
$router->post('/report-activity-material/search', 'ReportActivityMaterialController@search');
- $router->delete('/report-activity-material/delete/{id}', 'ReportActivityMaterialController@delete');
+ $router->delete('/report-activity-material/delete/{id}/{company_id}', 'ReportActivityMaterialController@delete');
$router->get('/report-activity-material/list', 'ReportActivityMaterialController@list');
$router->get('/report-activity-material/datatables', 'ReportActivityMaterialController@datatables');
$router->post('/report-activity-material/update-status', 'ReportActivityMaterialController@updateStatusStartFinish');
@@ -417,7 +485,7 @@ $router->group(['prefix' => 'api', 'middleware' => 'cors'], function () use ($ro
$router->get('/user-to-proyek/edit/{id}', 'UserToProyekController@edit');
$router->put('/user-to-proyek/update/{id}', 'UserToProyekController@update');
$router->post('/user-to-proyek/search', 'UserToProyekController@search');
- $router->delete('/user-to-proyek/delete/{id}', 'UserToProyekController@delete');
+ $router->delete('/user-to-proyek/delete/{id}/{company_id}', 'UserToProyekController@delete');
$router->get('/user-to-proyek/list', 'UserToProyekController@list');
$router->get('/user-to-proyek/select', 'UserToProyekController@select');
$router->get('/user-to-proyek/get-employee-integration', 'UserToProyekController@getEmployeeIntegration');
@@ -426,7 +494,7 @@ $router->group(['prefix' => 'api', 'middleware' => 'cors'], function () use ($ro
$router->get('/folder-document-proyek/edit/{id}', 'FolderDocumentProyekController@edit');
$router->put('/folder-document-proyek/update/{id}', 'FolderDocumentProyekController@update');
$router->post('/folder-document-proyek/search', 'FolderDocumentProyekController@search');
- $router->delete('/folder-document-proyek/delete/{id}', 'FolderDocumentProyekController@delete');
+ $router->delete('/folder-document-proyek/delete/{id}/{company_id}', 'FolderDocumentProyekController@delete');
$router->get('/folder-document-proyek/list', 'FolderDocumentProyekController@list');
$router->get('/folder-document-proyek/get-tree/{id}', 'FolderDocumentProyekController@getTree');
@@ -488,6 +556,7 @@ $router->group(['prefix' => 'api', 'middleware' => 'cors'], function () use ($ro
$router->put('/hierarchy-ftths/{id}', 'HierarchyFtthController@update');
$router->delete('/hierarchy-ftths/{id}', 'HierarchyFtthController@destroy');
$router->get('/hierarchy-ftths/tree/{project_id}', 'HierarchyFtthController@getTreeByProject');
+ $router->get('/hierarchy-ftths/count-tree/{hierarchy_id}', 'HierarchyFtthController@countProgressTree');
$router->get('/hierarchy-ftths/tree-gantt/{gantt_id}', 'HierarchyFtthController@getTreeByGantt');
$router->post('/map-monitoring/search', 'MapMonitoringController@search');
@@ -513,5 +582,26 @@ $router->group(['prefix' => 'api', 'middleware' => 'cors'], function () use ($ro
$router->post('/menu-company/search', 'MenuCompanyController@search');
$router->get('/menu-company/management/{id}', 'MenuCompanyController@listMenu');
$router->get('/menu-company/list', 'MenuCompanyController@list');
+
+ $router->post('/demo-management/add', 'DemoController@add');
+ $router->get('/demo-management/edit/{id}', 'DemoController@edit');
+ $router->put('/demo-management/update/{id}', 'DemoController@update');
+ $router->post('/demo-management/search', 'DemoController@search');
+ $router->delete('/demo-management/delete/{id}', 'DemoController@delete');
+ $router->get('/demo-management/list', 'DemoController@list');
+
+ $router->get('/information-storage/{company_name}', 'Controller@storage');
+ $router->get('/information-storage-all-company','Controller@storageAllCompany');
+
+ $router->post('/refferal-code/search', 'RefferalCodeController@search');
+ $router->post('/refferal-code/add', 'RefferalCodeController@add');
+ $router->get('/refferal-code/edit/{id}', 'RefferalCodeController@edit');
+ $router->put('/refferal-code/update/{id}', 'RefferalCodeController@update');
+
+ $router->post('/product-transaction/edit/{id}', 'ProductTransactionController@add');
+ $router->put('/product-transaction/update/{id}', 'ProductTransactionController@update');
+ $router->post('/product-transaction/search', 'ProductTransactionController@search');
+ $router->delete('/product-transaction/delete/{id}', 'ProductTransactionController@delete');
+ $router->get('/product-transaction/list', 'ProductTransactionController@list');
});
});