create feature sa create list claim and price to work per dealer
This commit is contained in:
@@ -70,7 +70,7 @@ class KpiService
|
||||
private function getActualWorkCount(User $user, $year, $month)
|
||||
{
|
||||
return Transaction::where('user_id', $user->id)
|
||||
->where('status', 'completed')
|
||||
->whereIn('status', [0, 1]) // pending (0) and completed (1)
|
||||
->whereYear('date', $year)
|
||||
->whereMonth('date', $month)
|
||||
->sum('qty');
|
||||
@@ -329,4 +329,125 @@ class KpiService
|
||||
'is_on_track' => $currentAchievement ? $currentAchievement->achievement_percentage >= 100 : false
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get claimed transactions count for a mechanic
|
||||
*
|
||||
* @param User $user
|
||||
* @param int|null $year
|
||||
* @param int|null $month
|
||||
* @return int
|
||||
*/
|
||||
public function getClaimedTransactionsCount(User $user, $year = null, $month = null)
|
||||
{
|
||||
$year = $year ?? now()->year;
|
||||
$month = $month ?? now()->month;
|
||||
|
||||
return Transaction::where('claimed_by', $user->id)
|
||||
->whereNotNull('claimed_at')
|
||||
->whereYear('claimed_at', $year)
|
||||
->whereMonth('claimed_at', $month)
|
||||
->sum('qty');
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate KPI achievement including claimed transactions
|
||||
*
|
||||
* @param User $user
|
||||
* @param int $year
|
||||
* @param int $month
|
||||
* @return KpiAchievement|null
|
||||
*/
|
||||
public function calculateKpiAchievementWithClaims(User $user, $year = null, $month = null)
|
||||
{
|
||||
$year = $year ?? now()->year;
|
||||
$month = $month ?? now()->month;
|
||||
|
||||
// Get current KPI target
|
||||
$kpiTarget = $user->kpiTargets()
|
||||
->where('is_active', true)
|
||||
->first();
|
||||
|
||||
if (!$kpiTarget) {
|
||||
Log::info("No KPI target found for user {$user->id}");
|
||||
return null;
|
||||
}
|
||||
|
||||
// Calculate actual value including claimed transactions
|
||||
$actualValue = $this->getActualWorkCountWithClaims($user, $year, $month);
|
||||
|
||||
// Calculate percentage
|
||||
$achievementPercentage = $kpiTarget->target_value > 0
|
||||
? ($actualValue / $kpiTarget->target_value) * 100
|
||||
: 0;
|
||||
|
||||
// Save or update achievement
|
||||
return KpiAchievement::updateOrCreate(
|
||||
[
|
||||
'user_id' => $user->id,
|
||||
'year' => $year,
|
||||
'month' => $month
|
||||
],
|
||||
[
|
||||
'kpi_target_id' => $kpiTarget->id,
|
||||
'target_value' => $kpiTarget->target_value,
|
||||
'actual_value' => $actualValue,
|
||||
'achievement_percentage' => $achievementPercentage
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get actual work count including claimed transactions
|
||||
*
|
||||
* @param User $user
|
||||
* @param int $year
|
||||
* @param int $month
|
||||
* @return int
|
||||
*/
|
||||
private function getActualWorkCountWithClaims(User $user, $year, $month)
|
||||
{
|
||||
// Get transactions created by the user (including pending and completed)
|
||||
$createdTransactions = Transaction::where('user_id', $user->id)
|
||||
->whereIn('status', [0, 1]) // pending (0) and completed (1)
|
||||
->whereYear('date', $year)
|
||||
->whereMonth('date', $month)
|
||||
->sum('qty');
|
||||
|
||||
// Get transactions claimed by the user
|
||||
$claimedTransactions = Transaction::where('claimed_by', $user->id)
|
||||
->whereNotNull('claimed_at')
|
||||
->whereYear('claimed_at', $year)
|
||||
->whereMonth('claimed_at', $month)
|
||||
->sum('qty');
|
||||
|
||||
return $createdTransactions + $claimedTransactions;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get KPI summary including claimed transactions
|
||||
*
|
||||
* @param User $user
|
||||
* @return array
|
||||
*/
|
||||
public function getKpiSummaryWithClaims(User $user)
|
||||
{
|
||||
$currentYear = now()->year;
|
||||
$currentMonth = now()->month;
|
||||
|
||||
// Calculate current month achievement including claims
|
||||
$currentAchievement = $this->calculateKpiAchievementWithClaims($user, $currentYear, $currentMonth);
|
||||
|
||||
// Get current month target
|
||||
$currentTarget = $user->kpiTargets()
|
||||
->where('is_active', true)
|
||||
->first();
|
||||
|
||||
return [
|
||||
'current_achievement' => $currentAchievement,
|
||||
'current_target' => $currentTarget,
|
||||
'current_percentage' => $currentAchievement ? $currentAchievement->achievement_percentage : 0,
|
||||
'is_on_track' => $currentAchievement ? $currentAchievement->achievement_percentage >= 100 : false
|
||||
];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user