<?php
class TipoHorasExtra
{
    public $codtipo;
    public $tipoHoraExtra;
    public $factor;
    public $recargo;
    public $aplicaCotizaciones;
    public $aplicaRenta;
    public $calcularSobreSalario;
    public $planillaComplementaria;

    public static function obtenerRegistro(): object
    {
        try {
            $db = obtenerConexion();
            $query = "SELECT * FROM rrhh.view_tiposHoraExtra WHERE estado = 1;";
            $stmt = $db->prepare($query, [PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL]);

            $stmt->execute();

            $data = $stmt->fetchAll(PDO::FETCH_CLASS, __CLASS__);

            return (object)[
                'status' => 200,
                'message' => 'success',
                'data' => $data
            ];
        } catch (PDOException $e) {
            return (object)[
                'status' => 500,
                'message' => $e->getMessage()
            ];
        } catch (Exception $e) {
            return (object)[
                'status' => 500,
                'messge' => $e->getMessage()
            ];
        }
    }

    public function guardar(): object
    {
        try {
            $db = obtenerConexion();

            $respuesta = null;

            $query = "EXEC rrhh.sp_guardarTipoHoraExtra :codempresa, :codtipo, :tipoHoraExtra, :factor, :recargo,:aplicaCotizaciones,:aplicaRenta,:calcularSobreSalario,:planillaComplementaria,:respuesta;";
            $stmt = $db->prepare($query, [PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL]);
            $stmt->bindValue(':codempresa', CODEMPRESA, PDO::PARAM_INT);
            $stmt->bindParam(':codtipo', $this->codtipo, PDO::PARAM_INT);
            $stmt->bindParam(':tipoHoraExtra', $this->tipoHoraExtra, PDO::PARAM_STR);
            $stmt->bindParam(':factor', $this->factor, PDO::PARAM_STR);
            $stmt->bindParam(':recargo', $this->recargo, PDO::PARAM_STR);
            $stmt->bindParam(':aplicaCotizaciones', $this->aplicaCotizaciones, PDO::PARAM_INT);
            $stmt->bindParam(':aplicaRenta', $this->aplicaRenta, PDO::PARAM_INT);
            $stmt->bindParam(':calcularSobreSalario', $this->calcularSobreSalario, PDO::PARAM_INT);
            $stmt->bindParam(':planillaComplementaria', $this->planillaComplementaria, PDO::PARAM_INT);
            $stmt->bindParam(':respuesta', $respuesta, PDO::PARAM_STR | PDO::PARAM_INPUT_OUTPUT, 300);

            $stmt->execute();

            return (object)[
                'status' => 200,
                'message' => $respuesta
            ];
        } catch (PDOException $e) {
            return (object)[
                'status' => 500,
                'message' => $e->getMessage()
            ];
        } catch (Exception $e) {
            return (object)[
                'status' => 500,
                'message' => $e->getMessage()
            ];
        }
    }

    public function eliminar(): object
    {
        try {
            $db = obtenerConexion();

            $query = "UPDATE [" . DB_NET . "].dbo.pla_tipo_hora_extra SET estado = 0 WHERE codtipohoraextra = :codtipo;";
            $stmt = $db->prepare($query, [PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL]);
            $stmt->bindParam(':codtipo', $this->codtipo, PDO::PARAM_INT);

            $stmt->execute();

            return (object)[
                'status' => 200,
                'message' => 'success'
            ];
        } catch (PDOException $e) {
            return (object)[
                'status' => 500,
                'message' => $e->getMessage()
            ];
        } catch (Exception $e) {
            return (object)[
                'status' => 500,
                'message' => $e->getMessage()
            ];
        }
    }
}
