namespace app\records;
use yii\db\ActiveRecord;
-use yii_app\api3\modules\v1\models\timetable\Timetable;
+use yii_app\records\TimetablePlan;
+use yii_app\records\Timetable;
use yii_app\records\Admin;
use yii_app\records\AdminGroup;
use yii_app\records\CityStore;
+use yii_app\records\EmployeePayment;
use yii_app\records\Shift;
/**
* @property $date_shift дата смены
* @property $date_start дата время открытия смены
* @property $date_end дата время закрытия смены
- * @property bool $is_active на открытие смены
+ * @property bool $is_opening на открытие смены
* @property bool $is_close на закрытие смены
* @property int $tabel табель
* @property int $plan_id ID табеля если смена поставлена
* @property int $shift_id тип смены
* @property int $admin_id_add ID поставившего смену
- * @property $time_start время начала работы по графику
+ * @property $time_start время начала работы по графику
* @property $time_end время окончания работы по графику
* @property float $work_time время окончания работы по графику
* @property float $price_hour часовая ставка
*/
class TimetableFactModel extends ActiveRecord
{
+
+ public const WORK_HOURS_TIME = 12;
+
public static function tableName()
{
return 'timetable_fact';
public function rules()
{
return [
- [[]],
- [['is_opening, is_close'], 'boolean'],
- [['is_opening, is_close'], 'default', 'value' => null],
+// [['is_opening, is_close'], 'boolean'],
+// [['is_opening, is_close'], 'default', 'value' => null],
[['d_id', 'admin_group_id'], 'exist', 'targetClass' => AdminGroup::class, 'targetAttribute' => 'id', 'skipOnEmpty' => true],
[['admin_id', 'admin_id_add'], 'exist', 'targetClass' => Admin::class, 'targetAttribute' => 'id', 'skipOnEmpty' => true],
[['store_id'], 'exist', 'targetClass' => CityStore::class, 'targetAttribute' => 'id', 'skipOnEmpty' => true],
- [['shift_id'], 'in', 'range' => array_keys(Shift::all()), 'skipOnEmpty' => false],
[['time_start', 'time_end'], 'date', 'format' => 'HH:mm:ss'],
[['work_time'], 'number', 'min' => 0, 'max' => 24],
[['comment'], 'string'],
[['comment'], 'default', 'value' => null],
- ['slot_type_id', 'in', 'range' => array_keys(Timetable::slotTypeName())],
+ [['slot_type_id', 'shift_id', 'date_add', 'time_end', 'salary_shift'], 'safe'],
[['date_shift'], 'date', 'format' => 'yyyy-M-d'],
- [['salary_shift'], 'in', 'range' => \yii_app\records\Timetable::getSalariesDay(), 'skipOnEmpty' => true],
- [['datetime_start', 'datetime_end'], 'required'],
- [['tabel', 'plan_id', 'status'], 'safe', 'skipOnEmpty' => false,],
- ['price_hour', 'float'],
- [['date_add'], 'datetime', 'format' => "yyyy-MM-dd H:m:s"],
+// [['salary_shift'], 'in', 'range' => \yii_app\records\Timetable::getSalariesDay(), 'skipOnEmpty' => true],
+ [['time_start'], 'required'],
+ [['price_hour'], 'number', 'numberPattern' => '/^\d+(\.\d{1,2})?$/'],
+// [['date_add'], 'datetime', 'format' => "yyyy-MM-dd H:m:s"],
];
}
- public function setValues($adminCheckin, $timetable, $lastCheckin)
+ public static function setValues($adminCheckin, $shift_id)
{
- $this->admin_id = $adminCheckin->admin_id;
- $this->admin_group_id = $adminCheckin->admin->shift;
- $this->d_id = $adminCheckin->d_id;
- $this->store_id = $adminCheckin->store_id;
- $this->date_shift = $adminCheckin->date;
- $this->shift_id = $timetable->shift_id;
- $this->comment = $timetable->comment;
- $this->work_time = $timetable->work_time < 12 ? $timetable->work_time : 12;
- $this->salary_shift = $timetable->salary_shift;
- $this->admin_id_add = $timetable->admin_id_add;
- $this->tabel = $timetable->tabel;
- $this->slot_type_id = $timetable->slot_type_id;
- $this->plan_id = $adminCheckin->plan_id;
- $this->time_start = $timetable->time_start;
- $this->time_end = $timetable->time_end;
- $this->date_end = $timetable->datetime_end;
- if (empty($lastCheckin)) {
- $is_active = true;
- } else {
- $is_close = true;
+ if ($model = self::findOne(['admin_id' => $adminCheckin->admin_id, 'date_shift' => date('Y-m-d', strtotime($adminCheckin->date)), 'is_opening' => true]) ??
+ self::findOne(['admin_id' => $adminCheckin->admin_id, 'date_shift' => date('Y-m-d', strtotime($adminCheckin->date . ' -1 day')), 'is_opening' => true])) {
+
+ $model->date_start = date("Y-m-d", strtotime($adminCheckin->time));
+ $model->time_end = date("H:i:s", strtotime($adminCheckin->time));
+ $model->is_close = true;
+ $model->work_time = min((strtotime($model->time_end) - strtotime($model->time_start)) / 3600, self::WORK_HOURS_TIME);
+ $model->status = $adminCheckin->type_id;
+
+ } else {
+ $model = new TimetableFactModel();
+ $model->date_end = null;
+ $model->date_start = date("Y-m-d", strtotime($adminCheckin->time));
+ $model->time_start = date("H:i:s", strtotime($adminCheckin->time));
+ $model->is_opening = true;
+ $model->status = $adminCheckin->type_id;
+
+ $timetable = Timetable::findOne(['date' => $adminCheckin->date]);
+
+ if (!empty($timetable)) {
+ $model->tabel = $timetable->id;
+ $model->plan_id = $timetable->plan_id;
+ $model->admin_id_add = $timetable->admin_id_add;
+ $model->comment = $timetable->comment;
+ $model->date_add = $timetable->date_add;
+
+ } else {
+ $model->tabel = 1;
+ $model->plan_id = null;
+ $model->admin_id_add = null;
+ $model->comment = null;
+ $model->date_add = null;
+ }
+
+ $model->admin_id = $adminCheckin->admin_id;
+ $model->admin_group_id = Admin::findOne(['id' => $adminCheckin->admin_id])->group_id;
+ $model->d_id = $adminCheckin->d_id;
+ $model->store_id = $adminCheckin->store_id;
+ $model->date_shift = $adminCheckin->date;
+ $model->shift_id = $shift_id;
+ $model->salary_shift = EmployeePayment::findOne(['admin_id' => $adminCheckin->admin_id])->daily_payment;
+ $model->price_hour = $model->salary_shift / $model->d_id == AdminGroup::GROUP_ADMINISTRATORS ? 8 : 12;
+ }
+
+ if ($model->validate()) {
+ $model->save();
+ } else {
+ var_dump($model->getErrors());
+ die();
+ }
}
- $this->save();
- }
+// }
public function getAdmin()
{
public function getPlan()
{
- return $this->hasOne(TimetablePlan::class, ['id' => 'plan_id']);
+ return $this->hasOne(Timetable::class, ['id' => 'plan_id']);
}
public function getD()