<?php
//Llamada al modelo
require 'model/bank_transactions_model.php';

class bank_transactions_controller
{
/**
* Validar entrada de datos.
*
*Funcion para validar entrada de datos antes de ir a la funcion de insercion o edicion. Chequeo de longitud de valores,tipo de datos,duplicidad de datos,existencia*
*
* @return Array [msg=> mensaje del error, status=> F = flase T = true] 
* @param Method POST 
*/
public function validate_bank_transaction($cuentas_bancarias,$transaccion,$hora,$n_operacion,$monto,$tipo,$motivo,$comprobante,$id){
	$per=new bank_transactions_model();
	$valid=$per->check_account_balance($cuentas_bancarias);
	if (!$valid) {
		$datos = array('msg' => 'Cuenta no posee saldo activo','status' => false ,'code' => 400);
		return $datos;
	}
	$valid=$per->query_bank_accounts($cuentas_bancarias);
	if (count($valid) == 0) {
		$datos = array('msg' => 'Error! Cuenta no existe','status' => false ,'code' => 400);
		return $datos;
	}
	if (strlen($n_operacion) > 10 || empty($n_operacion)) {
		$datos = array('msg' => 'Nro.Operacion no debe estar vacío ni superar los 10 caracteres','status' => false ,'code' => 400);
		return $datos;
	}
	if ($transaccion != 1 && $transaccion != 2) {
		$datos = array('msg' => 'Transaccion invalida','status' => false ,'code' => 400);
		return $datos;
	}
	if (!is_numeric($monto) || $monto < 1) {
		$datos = array('msg' => 'Error! Campo Monto','status' => false ,'code' => 400);
		return $datos;
	}
	if ($tipo != 1 && $tipo != 2) {
		$datos = array('msg' => 'Transaccion invalida','status' => false ,'code' => 400);
		return $datos;
	}
	if (strlen($motivo) > 100 || empty($motivo)) {
		$datos = array('msg' => 'Motivo no debe estar vacío ni superar los 100 caracteres','status' => false ,'code' => 400);
		return $datos;
	}
	if (!is_null($comprobante)) {
		$ext = pathinfo($comprobante['name'], PATHINFO_EXTENSION);
		if ($ext!=="png" && $ext!=="jpg" && $ext!=="jpge") {
			$datos = array('msg' => 'Error formato de comprobante.','status' => false ,'code' => 400);
			return $datos;
		}
		$tamaño = getimagesize($comprobante['tmp_name']);
		if ($tamaño[0]> 5000 || $tamaño[1] > 5000 || $comprobante['size'] > 10000000) {		
			$datos = array('msg' =>'Error, el comprobante debe tener un ancho inferior a 5000px y una altura de 5000px.','status' => false ,'code' => 400);
			return $datos;
		}
	}
	if (!is_null($id)) {
		$valid=$per->check_bank_transaction($id);
		if (!$valid) {
			$datos = array('msg' => 'Movimiento no existe','status' => false ,'code' => 400);
			return $datos;
		}
	}
	$valid=$per->check_operation($n_operacion,$id);
	if (!$valid) {
		$datos = array('msg' => '¡Error! Nro.Operacion existe','status' => false ,'code' => 400);
		return $datos;
	}

	$saldo_total=$per->query_balance($cuentas_bancarias);
	$saldo=$saldo_total[0]["saldo"];
	//$suma=$saldo-$monto;
	if ($transaccion == "2" && $monto > $saldo) {
		$datos = array('msg' => '¡Error! Saldo insuficiente para registrar esta operacion','status' => false ,'code' => 400);
		return $datos;
	}



	$datos = array('msg' => 'GOOD','status' =>true);
	return $datos;
}

/**
* Consulta de bank_transactions.
*
*Funcion para consultar bank_transactions registrados para llenar input*
*
* @return Array msg=mensaje,status,datos=array de la consulta 
* @param 
*/
public function query_bank_transactions(){
	$per=new bank_transactions_model();
	$date=date('Y-m-d');
	$fecha=(empty($_POST['fecha'])) ? $date : $_POST['fecha'];
	$datos=$per->query_bank_transactions(NULL,$fecha);
	$datos1 = array('msg' => $_SESSION['lang']['TABLA'],'status' => true,'datos' => $datos);
	return $datos1;
}
/**
* Registrar bank_transaction.
*
*Funcion para Registrar bank_transaction, primero se envia a depurar la informacion ingresada y luego se inserta*
*
* @return Array msg=mensaje,status,datos=boolean 
* @param Method POST 
*/
public function register_bank_transaction(){
	$per=new bank_transactions_model();
	$cuentas_bancarias=$_POST['cuentas_bancarias'];
	$transaccion=$_POST['transaccion'];
	$hora=$_POST['hora'];
	$n_operacion=$_POST['n_operacion'];
	$monto=str_replace('.','',$_POST['monto']);
	$monto=str_replace(',','.', $monto);
	$tipo=$_POST['tipo'];
	$motivo=$_POST['motivo'];
	$comprobante=$_FILES['comprobante'];
	$status=1;
	$user=$_SESSION['bn_user_global'];
	$valid=$this->validate_bank_transaction($cuentas_bancarias,$transaccion,$hora,$n_operacion,$monto,$tipo,$motivo,$comprobante,NULL);
	if (!$valid['status']) {
		return $valid;
	}else{
		$datos=$per->register_bank_transaction($cuentas_bancarias,$transaccion,$hora,$n_operacion,$monto,$tipo,$motivo,$comprobante,$user);
		$resp1 = array('msg' => $_SESSION['lang']['REGISTRADO'],'status' => true,'code' => 201);
		$resp2=array('msg' => $_SESSION['lang']['ERROR_INSERT'],'status' => false,'code' => 400);
		$return= (!$datos) ? $resp2 : $resp1;
		return $return;
	}
}
/**
* Vista de bank_transactions.
*
*Funcion para consultar bank_transactions registrado por id asi mostrar informacion para editar*
*
* @return Array msg=mensaje,status,datos=array de la consulta 
* @param Method POST Int $var1 id de bank_transactions
*/
/*public function view_bank_transaction(){
	$var1=$_POST['id'];
	$per=new bank_transactions_model();
	$datos=$per->query_bank_transactions($var1);
	if (count($datos) > 0) {
		$datos1 = array('msg' => $_SESSION['lang']['SELECCION'],'status' => true,'datos' => $datos,'code' => 200);
	}else{
		$datos1 = array('msg' => 'bank_transaction no existe','status' => false,'code' => 400);
	}
	return $datos1;
}
/**
* Editar bank_transactions.
*
*Funcion para Registrar bank_transaction, primero se envia a depurar la informacion ingresada y luego se inserta*
*
* @return Array msg=mensaje,status,datos=boolean 
* @param Method POST 
*/
/*public function edit_bank_transaction(){
	$per=new bank_transactions_model();
	$id=$_POST['id'];
	$cuentas_bancarias=$_POST['cuentas_bancarias'];
	$transaccion=$_POST['transaccion'];
	$hora=$_POST['hora'];
	$n_operacion=$_POST['n_operacion'];
	$monto=str_replace('.','',$_POST['monto']);
	$monto=str_replace(',','.', $monto);
	$tipo=$_POST['tipo'];
	$motivo=$_POST['motivo'];
	$comprobante=$_FILES['comprobante'];
	$user=$_SESSION['bn_user_global'];
	$valid=$this->validate_bank_transaction($cuentas_bancarias,$transaccion,$hora,$n_operacion,$monto,$tipo,$motivo,$comprobante,$id);
	if (!$valid['status']) {
		return $valid;
	}else{
		$datos=$per->query_bank_transactions($var1);
		$monto_bd=$datos[0]['monto'];
        $suma=($monto_bd > $monto) ? $monto_bd-$monto : $monto-$monto_bd;
        $suma=number_format($suma,2,".","");

        $opcion=($monto_bd > $monto) ? 1 : 2;

        $saldo_total=$per->query_balance($cuentas_bancarias);
        $saldo=$saldo_total[0]["saldo"];

        if ($transaccion == "1" && $monto_bd > $monto && $suma > $saldo) {
		$datos = array('msg' => '¡Error! No se puede editar transaccion monto restante mayor a saldo actual','status' => false ,'code' => 400);
		return $datos;
        }elseif ($transaccion == "2" && $monto_bd < $monto && $suma > $saldo) {
		$datos = array('msg' => '¡Error! No se puede editar transaccion monto restante mayor a saldo actual','status' => false ,'code' => 400);
		return $datos;
        }

		$datos=$per->edit_bank_transaction($tipo,$hora,$n_operacion,$monto,$motivo,$comprobante,$suma,$saldo,$opcion,$id,$user);

		$resp1 = array('msg' => $_SESSION['lang']['EDITADO'],'status' => true,'code' => 201);
		$resp2=array('msg' => $_SESSION['lang']['ERROR_INSERT'],'status' => false,'datos' => $datos,'code' => 400);
		$return= (!$datos) ? $resp2 : $resp1;
		return $return;

	}

}

/**
* Elimimar bank_transaction.
*
*Funcion para eliminar bank_transaction, chequea si el bank_transaction existe si arroja true elimina el bank_transaction*
*
* @return Array msg=mensaje,status,datos=boolean 
*/
public function delete_bank_transaction(){
	$per=new bank_transactions_model();
	$data1=$_POST['id'];
	$user=$_SESSION['bn_user_global'];

	$valid=$per->check_bank_transaction($data1);
	if (!$valid) {
		$datos = array('msg' => 'Movimiento no se puede eliminar','status' => false,'code' => 400);
		return $datos;
	}
	$datos=$per->query_bank_transactions($data1,NULL);
	$monto_bd=$datos[0]['monto'];
	$transaccion=$datos[0]['transaccion'];
	$cuenta=$datos[0]['cuenta'];

	$id_data=$per->query_max_transaction($cuenta);
    if ($id_data !== $data1) {
		$datos = array('msg' => '¡Error! posee movimientos superiores. No se puede eliminar','status' => false,'code' => 400);
		return $datos;
    }

	$saldo_total=$per->query_balance($cuenta);
	$saldo=$saldo_total[0]["saldo"];
    $balance=$saldo_total[0]["id"];
    $suma=($transaccion=="1") ? $saldo-$monto_bd : $saldo+$monto_bd;
    $suma=number_format($suma,2,".","");
	$update=$per->update_balance($suma,$balance,$user);
    if ($update) {
	$datos=$per->delete_bank_transaction($data1,$user);
	$resp1 = array('msg' => $_SESSION['lang']['ELIMINAR'],'status' => true,'datos' => $datos,'code' => 200);
	$resp2=array('msg' => $_SESSION['lang']['ERROR_INSERT'],'status' => false,'code' => 400);
	$return= (!$datos) ? $resp2 : $resp1;
	return $return;
    }else{
	$resp2=array('msg' => $_SESSION['lang']['ERROR_INSERT'],'status' => false,'code' => 400);

    }
}

/**
* Consulta de bank_transactions.
*
*Funcion para consultar bank_transactions registrados para llenar input*
*
* @return Array msg=mensaje,status,datos=array de la consulta 
* @param 
*/
public function query_bank_transactions_delete(){
	$per=new bank_transactions_model();
	$datos=$per->query_bank_transactions_delete();
	$datos1 = array('msg' => $_SESSION['lang']['TABLA'],'status' => true,'datos' => $datos);
	return $datos1;
}

}
?>