<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class HistorialPagos_model extends CI_Model {

    public function listar($fecha_desde = null, $fecha_hasta = null, $proveedor_id = null, $medio_pago_id = null, $banco_cuenta_id = null) {

        $this->db->select('
            pag.*,
            cp.serie, cp.numero, cp.tipo_comprobante,
            p.razon_social as proveedor,
            p.nro_documento as proveedor_ruc,
            mp.nombre as medio_pago,
            b.nombre as banco,
            bc.descripcion as cuenta_descripcion,
            bc.numero_cuenta,
            u.usuario as usuario_pago
        ');
        $this->db->from('cp_comprobante_proveedor_pago pag');
        $this->db->join('cp_comprobante_proveedor cp', 'cp.id = pag.cp_id');
        $this->db->join('lt_proveedor p',              'p.id = cp.proveedor_id');
        $this->db->join('mt_medio_pago mp',            'mp.id = pag.medio_pago_id');
        $this->db->join('mt_banco_cuenta bc',          'bc.id = pag.banco_cuenta_id', 'left');
        $this->db->join('mt_banco b',                  'b.id = bc.banco_id',          'left');
        $this->db->join('usuarios u',                  'u.id = pag.created_by',       'left');

        if ($fecha_desde) {
            $this->db->where('pag.fecha_pago >=', $fecha_desde);
        }
        if ($fecha_hasta) {
            $this->db->where('pag.fecha_pago <=', $fecha_hasta);
        }
        if ($proveedor_id) {
            $this->db->where('cp.proveedor_id', $proveedor_id);
        }
        if ($medio_pago_id) {
            $this->db->where('pag.medio_pago_id', $medio_pago_id);
        }
        if ($banco_cuenta_id) {
            $this->db->where('pag.banco_cuenta_id', $banco_cuenta_id);
        }

        $this->db->order_by('pag.fecha_pago', 'ASC');
        $this->db->order_by('pag.id', 'ASC');

        return $this->db->get()->result();
    }

    public function listar_proveedores_con_pagos() {
        return $this->db
            ->select('p.id, p.razon_social, p.nro_documento')
            ->from('cp_comprobante_proveedor_pago pag')
            ->join('cp_comprobante_proveedor cp', 'cp.id = pag.cp_id')
            ->join('lt_proveedor p',              'p.id = cp.proveedor_id')
            ->group_by('p.id')
            ->order_by('p.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();
    }
}
