public static function getExistTimetableOneDayBefore($dateFrom, $adminId): bool
{
$dateFromOneDayBefore = self::getOneDayBefore($dateFrom);
- $timetableOneDayBefore = (new CabinetService())->getTimetableData($adminId, null, $dateFromOneDayBefore, $dateFromOneDayBefore);
+ $timetableOneDayBefore = (new CabinetService())->getTimetablePlanData($adminId, null, $dateFromOneDayBefore, $dateFromOneDayBefore);
$existTimetableOneDayBefore = (0 !== count($timetableOneDayBefore));
return $existTimetableOneDayBefore;
$dateToPrepared = new DateTime($dateTo);
date_modify($dateToPrepared, '+1 day');
$dateToOneDayAfter = $dateToPrepared->format('Y-m-d H:i:s');
- $timetableOneDayAfter = (new CabinetService())->getTimetableData($adminId, null, $dateToOneDayAfter, $dateToOneDayAfter);
+ $timetableOneDayAfter = (new CabinetService())->getTimetablePlanData($adminId, null, $dateToOneDayAfter, $dateToOneDayAfter);
$existTimetableOneDayAfter = (0 !== count($timetableOneDayAfter));
return $existTimetableOneDayAfter;
namespace yii_app\services;
+use yii_app\records\TimetableFactModel;
use DateTime;
use Yii;
use yii\db\Exception;
use yii_app\helpers\HtmlHelper;
use yii_app\helpers\SalaryHelper;
use yii_app\records\Admin;
+use yii_app\records\AdminCheckin;
use yii_app\records\AdminGroupDynamic;
use yii_app\records\AdminPayroll;
use yii_app\records\AdminPayrollValues;
}
if (empty($timetable) && empty($timetableAnotherStore)) {
+ $text = 'в графике';
+ if ($dateFrom >= '2024-06-01') {
+ $text = 'фактов';
+ }
$errorText = 'У сотрудника "' . $employeeSelect['name_full'] . '" <br>';
$errorText .= 'за выбранный интервал с ' . $dateFrom . ' по ' . $dateTo . ' <br>';
- $errorText .= 'в графике смен не найдено cs1';
+ $errorText .= $text . ' смен не найдено cs1';
$dateFromInfo=date("Y-m-d",time()-7*86400+7200);
$dateToInfo=date("Y-m-d",time());
* @return array
*/
public function getTimetableData($adminId, $storeId, $dateFrom, $dateTo, bool $notInStore = false): array
+ {
+ if ($dateFrom >= '2024-06-01') {
+ $result = $this->getTimetableFactData($adminId, $storeId, $dateFrom, $dateTo, $notInStore);
+ } else {
+ $result = $this->getTimetablePlanData($adminId, $storeId, $dateFrom, $dateTo, $notInStore);
+ }
+
+ return $result;
+ }
+
+ /**
+ * @param $adminId
+ * @param $storeId
+ * @param $dateFrom
+ * @param $dateTo
+ * @param bool $notInStore
+ * @return array
+ */
+ public function getTimetablePlanData($adminId, $storeId, $dateFrom, $dateTo, bool $notInStore = false): array
{
$slotTypeId = [
return $query->asArray()->all();
}
+ public function getTimetableFactData($adminId, $storeId, $dateFrom, $dateTo, bool $notInStore = false): array
+ {
+ $query = TimetableFactModel::find()
+ ->with('admin')
+ ->andWhere(['>=', 'date_shift', $dateFrom])
+ ->andWhere(['<=', 'date_shift', $dateTo])
+ ->andWhere(['admin_id' => $adminId])
+ ->andWhere(['status' => AdminCheckin::TYPE_END])
+ ;
+
+ if (!empty($storeId)) {
+ if (!$notInStore) {
+ $query->andWhere(['=', 'store_id', $storeId]);
+ } else {
+ $query->andWhere(['<>', 'store_id', $storeId]);
+ }
+ }
+
+ $query->orderBy(['date_shift' => SORT_ASC]);
+ $query->indexBy(['id']);
+// $query->groupBy(['date_shift']);
+
+ $action = $query->createCommand()->getRawSql();
+
+ $timetableFactForMonthPrepared = $query->asArray()->all();
+
+ $timetableFactForMonth = [];
+ $listDateCount = [];
+ foreach ($timetableFactForMonthPrepared as $key => $row) {
+ if (!array_key_exists($row['date_shift'], $listDateCount)) {
+ $listDateCount[$row['date_shift']] = 1;
+ $timetableFactForMonth[$key] = $row;
+ $timetableFactForMonth[$key]['date'] = $row['date_shift'];
+ }
+ }
+
+ return $timetableFactForMonth;
+ }
+
public function getTimetableDataCounter($dateFrom, $dateTo, $adminId = null): array
{