<?php
require_once("DBManager.class.php");

class Desembolso {

    private $id;
    private $proyecto_id;
    private $beneficiario_id;
    private $fecha;
    private $monto;
    private $observaciones;
    private $creado_en;

    // ================================
    //  CREAR
    // ================================
    public function Crear($proyecto_id, $beneficiario_id, $fecha, $monto, $obs)
    {
        $resp = false;
        $db = new DBManager();

        $sql = "INSERT INTO desembolsos(id, proyecto_id, beneficiario_id, fecha, monto, observaciones)
                VALUES (NULL, '$proyecto_id', '$beneficiario_id', '$fecha', '$monto', '$obs')";

        if ($db->_execute($sql)) {
            $resp = true;
        }
        return $resp;
    }

    // ================================
    //  ACTUALIZAR
    // ================================
    public function Actualizar($id, $proyecto_id, $beneficiario_id, $fecha, $monto, $obs)
    {
        $resp = false;
        $db = new DBManager();

        $sql = "UPDATE desembolsos SET
                    proyecto_id='$proyecto_id',
                    beneficiario_id='$beneficiario_id',
                    fecha='$fecha',
                    monto='$monto',
                    observaciones='$obs'
                WHERE id=$id";

        if ($db->_execute($sql)) {
            $resp = true;
        }
        return $resp;
    }

    // ================================
    //  LISTAR POR BENEFICIARIO
    // ================================
    public function Listar($valor)
{
    $vector = null;
    $db = new DBManager();

    $sql = "SELECT d.id, 
                p.id AS proyecto_id,
                p.nombre AS proyecto_nombre,
                p.costo_total,

                b.id AS beneficiario_id,
                b.nombre AS beneficiario_nombre,

                -- Lista de montos
                GROUP_CONCAT(
                    CONCAT('S/. ', d.monto, ' (', d.fecha, ')')
                    ORDER BY d.fecha DESC
                    SEPARATOR '<br>'
                ) AS lista_desembolsos,

                -- Total de montos
                SUM(d.monto) AS total_desembolsado,

                -- Observaciones
                GROUP_CONCAT(
                    CONCAT(d.observaciones)
                    SEPARATOR '<br>'
                ) AS obs,

                -- Fecha del último desembolso
                MAX(d.fecha) AS ultimo_desembolso

            FROM desembolsos d
            INNER JOIN proyectos p 
                ON p.id = d.proyecto_id
            INNER JOIN beneficiarios b 
                ON b.id = d.beneficiario_id

            WHERE b.nombre LIKE '%$valor%'

            GROUP BY p.id, b.id
            ORDER BY ultimo_desembolso DESC";

    $rs = $db->execute($sql);
    $num_rows = $rs->getNumOfRows();

    if ($num_rows > 0) {
        $row = 0;
        $rs->firstRow();
        while (!$rs->EOF) {

            $vector[$row] = array(
			     "id"       => $rs->fields["id"],
                "proyecto_id"       => $rs->fields["proyecto_id"],
                "beneficiario_id"   => $rs->fields["beneficiario_id"],

                "proyecto"          => $rs->fields["proyecto_nombre"],
                "costo_total"       => $rs->fields["costo_total"],
                "beneficiario"      => $rs->fields["beneficiario_nombre"],

                "lista_desembolsos"   => $rs->fields["lista_desembolsos"],
                "total_desembolsado"  => $rs->fields["total_desembolsado"],
                "obs"                => $rs->fields["obs"],

                "ultimo_desembolso"  => $rs->fields["ultimo_desembolso"]
            );

            $row++;
            $rs->nextRow();
        }
        return $vector;
    }
    return null;
}

public function ListarTodos($valor)
{
    $vector = null;
    $db = new DBManager();

    $sql = "SELECT d.id, 
                   p.id AS proyecto_id,
                   p.nombre AS proyecto_nombre,
                   p.costo_total,
                   b.id AS beneficiario_id,
                   b.nombre AS beneficiario_nombre,
                   d.monto,
                   d.fecha,
                   d.observaciones
            FROM desembolsos d
            INNER JOIN proyectos p ON p.id = d.proyecto_id
            INNER JOIN beneficiarios b ON b.id = d.beneficiario_id
            WHERE b.nombre LIKE '%$valor%'
            ORDER BY p.id, b.id, d.fecha DESC";

    $rs = $db->execute($sql);
    $num_rows = $rs->getNumOfRows();

    if ($num_rows > 0) {
        $row = 0;
        $rs->firstRow();
        while (!$rs->EOF) {

            $vector[$row] = array(
                "id"              => $rs->fields["id"],
                "proyecto_id"     => $rs->fields["proyecto_id"],
                "beneficiario_id" => $rs->fields["beneficiario_id"],
                "proyecto"        => $rs->fields["proyecto_nombre"],
                "costo_total"     => $rs->fields["costo_total"],
                "beneficiario"    => $rs->fields["beneficiario_nombre"],
                "monto"           => $rs->fields["monto"],
                "fecha"           => $rs->fields["fecha"],
                "obs"             => $rs->fields["observaciones"]
            );

            $row++;
            $rs->nextRow();
        }
        return $vector;
    }
    return null;
}

public function ListarPorBenef($valor)
{
    $vector = null;
    $db = new DBManager();

    $sql = "SELECT d.id, 
                   p.id AS proyecto_id,
                   p.nombre AS proyecto_nombre,
                   p.costo_total,
                   b.id AS beneficiario_id,
                   b.nombre AS beneficiario_nombre,
                   d.monto,
                   d.fecha,
                   d.observaciones
            FROM desembolsos d
            INNER JOIN proyectos p ON p.id = d.proyecto_id
            INNER JOIN beneficiarios b ON b.id = d.beneficiario_id
            WHERE b.id = '$valor'
            ORDER BY p.id, b.id, d.fecha DESC";

    $rs = $db->execute($sql);
    $num_rows = $rs->getNumOfRows();

    if ($num_rows > 0) {
        $row = 0;
        $rs->firstRow();
        while (!$rs->EOF) {

            $vector[$row] = array(
                "id"              => $rs->fields["id"],
                "proyecto_id"     => $rs->fields["proyecto_id"],
                "beneficiario_id" => $rs->fields["beneficiario_id"],
                "proyecto"        => $rs->fields["proyecto_nombre"],
                "costo_total"     => $rs->fields["costo_total"],
                "beneficiario"    => $rs->fields["beneficiario_nombre"],
                "monto"           => $rs->fields["monto"],
                "fecha"           => $rs->fields["fecha"],
                "obs"             => $rs->fields["observaciones"]
            );

            $row++;
            $rs->nextRow();
        }
        return $vector;
    }
    return null;
}



	
	// ================================
    //  LISTAR POR PROYECTO
    // ================================
    public function ListarPorProyecto($valor)
    {
        $vector = null;
        $db = new DBManager();

        $sql = "SELECT d.*, 
                       p.nombre AS proyecto_nombre,
					   p.costo_total,
                       b.nombre AS beneficiario_nombre
                FROM desembolsos d
                INNER JOIN proyectos p ON p.id = d.proyecto_id
                INNER JOIN beneficiarios b ON b.id = d.beneficiario_id
                WHERE p.id ='$valor'
                ORDER BY d.fecha DESC";

        $rs = $db->execute($sql);
        $num_rows = $rs->getNumOfRows();

        if ($num_rows > 0) {
            $row = 0;
            $rs->firstRow();
            while (!$rs->EOF) {

                $vector[$row] = array(
                    "id"                => $rs->fields["id"],
                    "proyecto_id"       => $rs->fields["proyecto_id"],
                    "beneficiario_id"   => $rs->fields["beneficiario_id"],
                    "proyecto"          => $rs->fields["proyecto_nombre"],
					"costo_total"          => $rs->fields["costo_total"],
                    "beneficiario"      => $rs->fields["beneficiario_nombre"],
                    "fecha"             => $rs->fields["fecha"],
                    "monto"             => $rs->fields["monto"],
                    "observaciones"     => $rs->fields["observaciones"],
                    "creado_en"         => $rs->fields["creado_en"]
                );

                $row++;
                $rs->nextRow();
            }
            return $vector;
        }
        return null;
    }

    // ================================
    //  BUSCAR POR ID
    // ================================
    public function BuscarPorCodigo($id)
    {
        $resp = false;
        $db = new DBManager();

        $rs = $db->execute("SELECT * FROM desembolsos WHERE id=$id");

        if ($rs->getNumOfRows() > 0) {
            $resp = true;
            $rs->firstRow();

            while (!$rs->EOF) {
                $this->id               = $rs->fields["id"];
                $this->proyecto_id      = $rs->fields["proyecto_id"];
                $this->beneficiario_id  = $rs->fields["beneficiario_id"];
                $this->fecha            = $rs->fields["fecha"];
                $this->monto            = $rs->fields["monto"];
                $this->observaciones    = $rs->fields["observaciones"];
                $this->creado_en        = $rs->fields["creado_en"];

                $rs->nextRow();
            }
        }
        return $resp;
    }

    // ================================
    //  ELIMINAR
    // ================================
    public function Eliminar($id)
    {
        $resp = false;
        $db = new DBManager();

        if ($db->_execute("DELETE FROM desembolsos WHERE id=$id")) {
            $resp = true;
        }
        return $resp;
    }

    // ================================
    //  GETTERS
    // ================================
    public function getId(){ return $this->id; }
    public function getProyectoId(){ return $this->proyecto_id; }
    public function getBeneficiarioId(){ return $this->beneficiario_id; }
    public function getFecha(){ return $this->fecha; }
    public function getMonto(){ return $this->monto; }
    public function getObservaciones(){ return $this->observaciones; }
    public function getCreadoEn(){ return $this->creado_en; }

}
?>
