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

class Banco_cuenta extends MY_Controller {

    public function __construct() {
        parent::__construct();
        $this->load->model('configuracion/Banco_cuenta_model');
        $this->load->model('configuracion/Banco_model');
    }

    public function index($banco_id) {
        $this->validar_permiso('banco_cuenta_ver');

        $banco = $this->Banco_model->obtener($banco_id);

        if (!$banco) {
            show_404();
        }

        $data['titulo'] = 'Cuentas Bancarias';
        $data['banco'] = $banco;
        $data['cuentas'] = $this->Banco_cuenta_model->listar_por_banco($banco_id);

        $this->layout('configuracion/banco_cuenta/index', $data);
    }

    public function create($banco_id) {
        $this->validar_permiso('banco_cuenta_crear');

        $banco = $this->Banco_model->obtener($banco_id);

        if (!$banco) {
            show_404();
        }

        $data['titulo'] = 'Nueva Cuenta Bancaria';
        $data['banco'] = $banco;
        $data['monedas'] = $this->Banco_cuenta_model->listar_monedas();
        $data['planes'] = $this->Banco_cuenta_model->listar_planes_contables();

        $this->layout('configuracion/banco_cuenta/create', $data);
    }

    public function store($banco_id) {
        $this->validar_permiso('banco_cuenta_crear');

        $banco = $this->Banco_model->obtener($banco_id);

        if (!$banco) {
            show_404();
        }

        $this->form_validation->set_rules('numero_cuenta', 'Número de cuenta', 'required|trim');
        $this->form_validation->set_rules('cci', 'CCI', 'trim');
        $this->form_validation->set_rules('descripcion', 'Descripción', 'required|trim');
        $this->form_validation->set_rules('moneda_id', 'Moneda', 'required');
        $this->form_validation->set_rules('plancontable_id', 'Plan contable', 'required');

        if ($this->form_validation->run() == FALSE) {
            return $this->create($banco_id);
        }

        $data = array(
            'banco_id'          => $banco_id,
            'numero_cuenta'     => trim($this->input->post('numero_cuenta', TRUE)),
            'cci'               => trim($this->input->post('cci', TRUE)),
            'descripcion'       => trim($this->input->post('descripcion', TRUE)),
            'moneda_id'         => $this->input->post('moneda_id', TRUE),
            'plancontable_id'   => $this->input->post('plancontable_id', TRUE),
            'estado'            => $this->input->post('estado') ? 1 : 0,
            'created_by'        => $this->session->userdata('id')
        );

        if ($this->Banco_cuenta_model->insertar($data)) {
            $this->session->set_flashdata('success', 'Cuenta bancaria registrada correctamente');
        } else {
            $this->session->set_flashdata('error', 'No se pudo registrar la cuenta bancaria');
        }

        redirect('configuracion/banco-cuenta/index/'.$banco_id);
    }

    public function edit($id) {
        $this->validar_permiso('banco_cuenta_editar');

        $cuenta = $this->Banco_cuenta_model->obtener($id);

        if (!$cuenta) {
            show_404();
        }

        $banco = $this->Banco_model->obtener($cuenta->banco_id);

        $data['titulo'] = 'Editar Cuenta Bancaria';
        $data['cuenta'] = $cuenta;
        $data['banco'] = $banco;
        $data['monedas'] = $this->Banco_cuenta_model->listar_monedas();
        $data['planes'] = $this->Banco_cuenta_model->listar_planes_contables();

        $this->layout('configuracion/banco_cuenta/edit', $data);
    }

    public function update($id) {
        $this->validar_permiso('banco_cuenta_editar');

        $cuenta = $this->Banco_cuenta_model->obtener($id);

        if (!$cuenta) {
            show_404();
        }

        $this->form_validation->set_rules('numero_cuenta', 'Número de cuenta', 'required|trim');
        $this->form_validation->set_rules('cci', 'CCI', 'trim');
        $this->form_validation->set_rules('descripcion', 'Descripción', 'required|trim');
        $this->form_validation->set_rules('moneda_id', 'Moneda', 'required');
        $this->form_validation->set_rules('plancontable_id', 'Plan contable', 'required');

        if ($this->form_validation->run() == FALSE) {
            return $this->edit($id);
        }

        $data = array(
            'numero_cuenta' => trim($this->input->post('numero_cuenta', TRUE)),
            'cci' => trim($this->input->post('cci', TRUE)),
            'descripcion' => trim($this->input->post('descripcion', TRUE)),
            'moneda_id' => $this->input->post('moneda_id', TRUE),
            'plancontable_id' => $this->input->post('plancontable_id', TRUE),
            'estado' => $this->input->post('estado') ? 1 : 0,
            'updated_at' => date('Y-m-d H:i:s'),
            'updated_by' => $this->session->userdata('id')
        );

        if ($this->Banco_cuenta_model->actualizar($id, $data)) {
            $this->session->set_flashdata('success', 'Cuenta bancaria actualizada correctamente');
        } else {
            $this->session->set_flashdata('error', 'No se pudo actualizar la cuenta bancaria');
        }

        redirect('configuracion/banco-cuenta/index/'.$cuenta->banco_id);
    }
}