<?php

namespace nota\models;

use Yii;

class KasirShift extends \yii\db\ActiveRecord
{
    public static function getDb() {
        return Yii::$app->get('dbnota'); 
    }

    public static function tableName()
    {
        return 'kasir_shift';
    }

    public function rules()
    {
        return [
            [['user_id', 'modal_awal'], 'required'],
            [['user_id'], 'integer'],
            [['modal_awal', 'total_penjualan', 'total_pengeluaran',
              'saldo_akhir_sistem', 'saldo_akhir_fisik', 'selisih'], 'number'],
            [['tanggal_buka', 'tanggal_tutup'], 'safe'],
            [['status'], 'in', 'range' => ['open', 'closed']],
        ];
    }

    public function attributeLabels()
    {
        return [
            'id' => 'ID',
            'user_id' => 'User',
            'modal_awal' => 'Modal Awal',
            'total_penjualan' => 'Total Penjualan',
            'total_pengeluaran' => 'Total Pengeluaran',
            'saldo_akhir_sistem' => 'Saldo Akhir Sistem',
            'saldo_akhir_fisik' => 'Saldo Akhir Fisik',
            'selisih' => 'Selisih',
            'status' => 'Status',
            'tanggal_buka' => 'Tanggal Buka',
            'tanggal_tutup' => 'Tanggal Tutup',
        ];
    }

    /*
     * Otomatis isi tanggal_buka saat insert
     */
    public function beforeSave($insert)
    {
        if ($insert) {
            $this->tanggal_buka = date('Y-m-d H:i:s');
            $this->status = 'open';
        }

        return parent::beforeSave($insert);
    }

    /*
     * Relasi ke User
     */
    public function getUser()
    {
        return $this->hasOne(Usermember::class, ['id' => 'user_id']);
    }

    /*
     * Relasi ke Nota (jika sudah ada shift_id di nota)
     */
    public function getNotas()
    {
        return $this->hasMany(Nota::class, ['shift_id' => 'id']);
    }

    /*
     * Ambil shift yang sedang open
     */
    public static function getActiveShift()
    {
        if (Yii::$app->user->isGuest) {
            return null;
        }

        $identity = Yii::$app->user->identity;

        return self::find()
            ->where([
                'user_id' => $identity->id,
                'status' => 'open',
                'idCluster' => $identity->idCluster,
            ])
            ->one();
    }

    public static function getShiftOpenByUser($userId)
    {
        return self::find()
            ->where([
                'user_id' => $userId,
                'status' => 'open',
                'idCluster' => Yii::$app->user->identity->idCluster,
            ])
            ->one();
    }

    public function getPengeluarans()
    {
        return $this->hasMany(KasirPengeluaran::class, ['shift_id' => 'id']);
    }

    public function getTotalPengeluaranReal()
    {
        return KasirPengeluaran::find()
            ->where(['shift_id'=>$this->id])
            ->sum('jumlah') ?? 0;
    }

}

