$year = $model->year;
$month = $model->month;
$records = [];
- $vacationSum = 0;
+
$model = new DynamicModel(compact('store_id', 'month', 'year'));
$model->addRule(['store_id', 'month', 'year'], 'required')
$weeklyRecords = MotivationService::getTimetableFactRecordsByDateAndStore($startDate, $endDate, $store_id);
$weeklyVacationSum = MotivationService::getVacationsSum($startDate, $endDate, $store_id);
- $weeklyTotalSalary = 0;
+ $weeklyTotalSalary = 0.0;
$recordsWithAdditionalData = [];
foreach ($weeklyRecords as $record) {
- $payment = EmployeePayment::findOne(['admin_id' => $record->admin_id]);
+ $payment = EmployeePayment::find()
+ ->where(['admin_id' => $record->admin_id])
+ ->orderBy(['date' => SORT_DESC]) // Сортировка по полю date от самой поздней записи к самой ранней
+ ->one();
$dailyPayment = $payment ? $payment->daily_payment : null;
$admin = Admin::findOne(['id' => $record->admin_id]);
$startOfMonth = sprintf("%s-%02d-01", $year, $month);
$endOfMonth = (new DateTime("$year-$month-01"))->format('Y-m-t');
- $monthlyTotalSalary = 0;
- $monthlyVacationSum = 0;
+ $monthlyTotalSalary = 0.0;
+
$monthlyRecords = MotivationService::getTimetableFactRecordsByDateAndStore($startOfMonth, $endOfMonth, $store_id);
$monthlyVacationSum = MotivationService::getVacationsSum($startOfMonth, $endOfMonth, $store_id);
foreach ($monthlyRecords as $record) {
- $payment = EmployeePayment::findOne(['admin_id' => $record->admin_id]);
+ $payment = EmployeePayment::find()
+ ->where(['admin_id' => $record->admin_id])
+ ->orderBy(['date' => SORT_DESC]) // Сортировка по полю date от самой поздней записи к самой ранней
+ ->one();
$dailyPayment = $payment ? $payment->daily_payment : null;
$monthlyTotalSalary += !empty($record->salary_shift) ? $record->salary_shift : $dailyPayment;
$records = MotivationService::getTimetableFactRecordsByDateAndStore($startDate, $endDate, $store_id);
$vacationSum = MotivationService::getVacationsSum($startDate, $endDate, $store_id);
- $totalSalary = 0;
+ $totalSalary = 0.0;
foreach ($records as $record) {
- $payment = EmployeePayment::findOne(['admin_id' => $record->admin_id]);
- $dailyPayment = $payment ? $payment->daily_payment : null;
+ $payment = EmployeePayment::find()
+ ->where(['admin_id' => $record->admin_id])
+ ->orderBy(['date' => SORT_DESC]) // Сортировка по полю date от самой поздней записи к самой ранней
+ ->one();
+ $dailyPayment = $payment ? $payment->daily_payment : 0.0;
// Если $record->salary_shift имеет значение, учитываем его и не добавляем dailyPayment
if (!empty($record->salary_shift)) {
return $records;
}
- public static function getVacationsSum($startDate, $endDate, $store_id)
+ public static function getVacationsSum($startDate, $endDate, $store_id):float
{
// Делаем запрос к таблице Timetable для получения записей с slot_type_id = 2
$records = Timetable::find()
// Проверяем, есть ли записи
if (empty($records)) {
- return 0; // Возвращаем 0, если записей нет
+ return 0.0; // Возвращаем 0, если записей нет
}
- $vacationsSum = 0;
+ $vacationsSum = 0.0;
foreach ($records as $record) {
- $payment = EmployeePayment::findOne(['admin_id' => $record->admin_id]);
- $dailyPayment = $payment ? $payment->daily_payment : null;
+ // Находим самую позднюю запись по admin_id
+ $payment = EmployeePayment::find()
+ ->where(['admin_id' => $record->admin_id])
+ ->orderBy(['date' => SORT_DESC])
+ ->one();
+ $dailyPayment = $payment ? $payment->daily_payment : 0.0;
$vacationsSum += $dailyPayment;
}
- public static function calculateTotalSalary($startDate, $endDate, $storeId)
+ public static function calculateTotalSalary($startDate, $endDate, $storeId):float
{
$records = self::getTimetableFactRecordsByDateAndStore($startDate, $endDate, $storeId);
$vacationSum = self::getVacationsSum($startDate, $endDate, $storeId);
- $totalSalary = 0;
+ $totalSalary = 0.0;
foreach ($records as $record) {
- $payment = EmployeePayment::findOne(['admin_id' => $record->admin_id]);
- $dailyPayment = $payment ? $payment->daily_payment : null;
+ // Находим самую позднюю запись по admin_id
+ $payment = EmployeePayment::find()
+ ->where(['admin_id' => $record->admin_id])
+ ->orderBy(['date' => SORT_DESC])
+ ->one();
+ $dailyPayment = $payment ? $payment->daily_payment : 0.0;
if (!empty($record->salary_shift)) {
$totalSalary += $record->salary_shift;