<?php
// ===================================================
// Model: HistorialCobros_model.php
// Ruta: application/models/cobranzas/
// ===================================================
defined('BASEPATH') OR exit('No direct script access allowed');

class HistorialCobros_model extends CI_Model {

    public function listar($fecha_desde = null, $fecha_hasta = null, $cliente_id = null, $medio_pago_id = null, $banco_cuenta_id = null) {
        $this->db->select('
            co.*,
            c.serie, c.numero, c.comprobante_id,
            tc.nombre as tipo_comprobante,
            cl.razon_social as cliente,
            cl.nro_documento as cliente_ruc,
            mp.nombre as medio_pago,
            b.nombre as banco,
            bc.descripcion as cuenta_descripcion,
            bc.numero_cuenta,
            u.usuario as usuario_cobro
        ');
        $this->db->from('co_pago_cliente co');
        $this->db->join('vt_comprobante c',      'c.id = co.comprob_id');
        $this->db->join('mt_tipo_comprobante tc', 'tc.id = c.comprobante_id', 'left');
        $this->db->join('vt_cliente cl',          'cl.id = c.cliente_id');
        $this->db->join('mt_medio_pago mp',       'mp.id = co.medio_pago_id');
        $this->db->join('mt_banco_cuenta bc',     'bc.id = co.banco_cuenta_id', 'left');
        $this->db->join('mt_banco b',             'b.id = bc.banco_id',         'left');
        $this->db->join('usuarios u',             'u.id = co.created_by',       'left');

        if ($fecha_desde)     $this->db->where('co.fecha_pago >=', $fecha_desde);
        if ($fecha_hasta)     $this->db->where('co.fecha_pago <=', $fecha_hasta);
        if ($cliente_id)      $this->db->where('cl.id', $cliente_id);
        if ($medio_pago_id)   $this->db->where('co.medio_pago_id', $medio_pago_id);
        if ($banco_cuenta_id) $this->db->where('co.banco_cuenta_id', $banco_cuenta_id);

        $this->db->order_by('co.fecha_pago', 'ASC');
        $this->db->order_by('co.id', 'ASC');
        return $this->db->get()->result();
    }

    public function listar_clientes_con_cobros() {
        return $this->db
            ->select('cl.id, cl.razon_social, cl.nro_documento')
            ->from('co_pago_cliente co')
            ->join('vt_comprobante c',  'c.id = co.comprob_id')
            ->join('vt_cliente cl',     'cl.id = c.cliente_id')
            ->group_by('cl.id')
            ->order_by('cl.razon_social', 'ASC')
            ->get()->result();
    }

    public function listar_medios_pago() {
        return $this->db->where('estado', 1)->order_by('nombre', 'ASC')->get('mt_medio_pago')->result();
    }

    public function listar_cuentas_bancarias() {
        return $this->db
            ->select('bc.id, bc.descripcion, bc.numero_cuenta, b.nombre as banco')
            ->from('mt_banco_cuenta bc')
            ->join('mt_banco b', 'b.id = bc.banco_id')
            ->where('bc.estado', 1)
            ->order_by('b.nombre', 'ASC')
            ->get()->result();
    }
}
