<?php namespace App\Http\Controllers;

use Session;
use Request; 
use App\Custom\SQLConnection;
use App\Custom\Misc;
use stdClass;


class DomiciliosController extends Controller  {
	public static $paises;
	public static $provincias;


	public static function procesarDomicilio() {	
		$paises      = (self::$paises) ? self::$paises : SQLConnection::backendStoreProcedure('backend_obtener_paises',array());
		$provincias  = (self::$provincias) ? self::$provincias : SQLConnection::backendStoreProcedure('obtener_provincias',array());
		$inputs = Misc::organizarRequest();
		$alta_modificacion = Request::input('alta_modificacion');
		$cuit = Request::input('cuit');
		//$cuit = "20416237604";
		$domicilio = Request::input('domicilio');
		$codpos = Request::input('codpos');
		//$pai_codigo = Request::input('pai_codigo');
		$pai_codigo = null;
		$pai_nombre = Request::input('pai_nombre'); 
		if ($pai_nombre == '') { $pai_nombre = null;}
		if ($pai_nombre !== null)
		{
			foreach ($paises as $pais)
			{
				if ($pais->country_name == $pai_nombre) 
					{ $pai_codigo = $pais->codigo_ifx; 
						break;
					}
			}
		}

		$prv_codigo = Request::input('prv_codigo');
		$prv_nombre = Request::input('prv_nombre');

		if ($prv_codigo == '') { $prv_codigo = null;}
		if ($prv_nombre == '') { $prv_nombre = null;}

		if ($pai_nombre == 'ARGENTINA' && $prv_codigo !== null)
		{
			foreach ($provincias as $prv)
			{
				if ($prv->codigo_afip == $prv_codigo) 
					{ $prv_nombre = $prv->prv_nombre; 
						break;
					}
			}
		}
		
		//$prv_nombre = Request::input('prv_nombre');
		$loc_nombre = Request::input('loc_nombre');
		$tipos = []; 
		if (isset($_POST['tipoD'])) { $tipos[] = 'D'; }
		if (isset($_POST['tipoE'])) { $tipos[] = 'E'; }
		if (isset($_POST['tipoF'])) { $tipos[] = 'F'; }
		if (isset($_POST['tipoL'])) { $tipos[] = 'L'; }
		if (isset($_POST['tipoO'])) { $tipos[] = 'O'; }
		
		if ($alta_modificacion=='M'){
			// Primero Borramos los ids de los registros que habiamos traido en la lista de ids_domicilios, y damos de alta los cargados ahora
			$ids_domicilios =  Request::input('ids_domicilios');
			$ids = explode(",", $ids_domicilios);
			foreach ($ids as $key => $id) {
				$exec = SQLConnection::backendStoreProcedure("backend_procesar_domicilio", array('B',$id), true);
			}
		}

		foreach ($tipos as $tipo){
			$exec = SQLConnection::backendStoreProcedure("backend_procesar_domicilio", array('A', '0', $cuit, $domicilio, $codpos, $pai_codigo, $pai_nombre, $prv_codigo, $prv_nombre, $loc_nombre, $tipo), true);
		}
		
		
		$tabla_domicilios = (self::tablaDomicilios($inputs['cuit']))->render();
		return response()->json([
			'error' => (isset($exec->id_domicilio) && is_numeric($exec->id_domicilio)) ? false : true,
			'mensaje' => (isset($exec->id_domicilio) && is_numeric($exec->id_domicilio)) ? 'El domicilio se procesó correctamente' : 'Error: proceso fallido', 
			'tabla' => $tabla_domicilios ]);
	}

	public static function tablaDomicilios($cuit = null, $id_domicilio = 0) {
		//$domicilios      = SQLConnection::backendStoreProcedure('obtener_domicilios_new', array($cuit, 0));
		$domicilios_visibles     = SQLConnection::backendStoreProcedure('backend_obtener_domicilios', array($cuit,1));
		$domicilios_no_visibles  = SQLConnection::backendStoreProcedure('backend_obtener_domicilios', array($cuit,0));
		$domicilios_todos    = array_merge($domicilios_visibles,$domicilios_no_visibles);
    
		$id_ant      = -1;
		$visible_ant = -1; 
		foreach ($domicilios_todos as $value) {
			if ($visible_ant != $value->visible || $id_ant != $value->id) {
				$i = 0; 
			}

			$visible_ant = $value->visible; 
			$id_ant      = $value->id;

			if ($i==0){
				$domicilios[$value->visible][$value->id] = new stdClass();
				$domicilios[$value->visible][$value->id]->codpos       	= $value->codpos;
				$domicilios[$value->visible][$value->id]->domicilio    	= $value->domicilio;
				$domicilios[$value->visible][$value->id]->loc_codigo    = $value->loc_codigo; 
				$domicilios[$value->visible][$value->id]->loc_nombre    = $value->loc_nombre; 
				$domicilios[$value->visible][$value->id]->prv_codigo 		= $value->prv_codigo; 
				$domicilios[$value->visible][$value->id]->prv_nombre 		= $value->prv_nombre; 
				$domicilios[$value->visible][$value->id]->pai_codigo 		= $value->pai_codigo; 
				$domicilios[$value->visible][$value->id]->pai_nombre 		= $value->pai_nombre; 
				$domicilios[$value->visible][$value->id]->tipo_domicilio = $value->tipo_domicilio; 
				$domicilios[$value->visible][$value->id]->ids_domicilios 	 = $value->id_domicilio; 
				$domicilios[$value->visible][$value->id]->tipo_domicilio_id = $value->tipo_domicilio . '|' . $value->id_domicilio;  

			}else {
				$domicilios[$value->visible][$value->id]->ids_domicilios 	 .= ',' . $value->id_domicilio; 
				$domicilios[$value->visible][$value->id]->tipo_domicilio .= ',' . $value->tipo_domicilio; 
				$domicilios[$value->visible][$value->id]->tipo_domicilio_id .= ',' . $value->tipo_domicilio . '|' . $value->id_domicilio;  
			}
			$i += 1; 
		}

		return view('produccion/tabla_domicilios')->with(compact(['domicilios', 'cuit']));
	}

	public static function statusDomicilio() {
		$ids_domicilios = Request::input('ids_domicilios');
		$user_id = Session::get("usuario")->user_id;
		$cuit = Request::input('cuit');
		$ids = explode(",", $ids_domicilios);
		foreach ($ids as $key => $id) {
						$exec = SQLConnection::backendStoreProcedure("modificar_status_domicilio", array($id,$user_id), true);
		}
		
		$tabla_domicilios = (self::tablaDomicilios($cuit))->render();
		return response()->json([
			'error' => (isset($exec->id_domicilio) && is_numeric($exec->id_domicilio)) ? false : true,
			'mensaje' => (isset($exec->id_domicilio) && is_numeric($exec->id_domicilio)) ? 'El domicilio cambió de status correctamente' : 'Error: proceso fallido', 
			'tabla' => $tabla_domicilios ]);
		
	}

	public static function procesarDomiciliov2() {							
		$paises      = (self::$paises) ? self::$paises : SQLConnection::backendStoreProcedure('backend_obtener_paises',array());
		$provincias  = (self::$provincias) ? self::$provincias : SQLConnection::backendStoreProcedure('obtener_provincias',array());
		$inputs = Misc::organizarRequest();
		$alta_modificacion = Request::input('alta_modificacion');
		$cuit = Request::input('cuit');		
		
		$domicilio = Request::input('domicilio');
		$codpos = Request::input('codpos');
		//$pai_codigo = Request::input('pai_codigo');
		$pai_codigo = null;
		$pai_nombre = Request::input('pai_nombre'); 
		
		if ($pai_nombre == '') { 
			$pai_nombre = null;
		}
		if ($pai_nombre !== null){
			foreach ($paises as $pais){
				if ($pais->country_name == $pai_nombre) { 
					$pai_codigo = $pais->codigo_ifx; 
					break;
				}
			}
		}

		$prv_codigo = Request::input('prv_codigo');
		$prv_nombre = Request::input('prv_nombre');

		if ($prv_codigo == '') { 
			$prv_codigo = null;
		}		
		if ($prv_nombre == '') { 
			$prv_nombre = null;
		}

		if ($pai_nombre == 'ARGENTINA' && $prv_codigo !== null){
			foreach ($provincias as $prv){
				if ($prv->codigo_afip == $prv_codigo) { 
					$prv_nombre = $prv->prv_nombre; 
					break;
				}
			}
		}
		
		//$prv_nombre = Request::input('prv_nombre');
		$loc_nombre = Request::input('loc_nombre');		
		$tipos = []; 
		if (isset($_POST['tipoD'])) { 
			$tipos[] = 'D'; 
		}
		if (isset($_POST['tipoE'])) { 
			$tipos[] = 'E'; 
		}
		if (isset($_POST['tipoF'])) { 
			$tipos[] = 'F'; 
		}
		if (isset($_POST['tipoL'])) { 
			$tipos[] = 'L'; 
		}
		if (isset($_POST['tipoO'])) { 
			$tipos[] = 'O'; 
		}
		
		if ($alta_modificacion=='M'){
			// Primero Borramos los ids de los registros que habiamos traido en la lista de ids_domicilios, y damos de alta los cargados ahora
			$ids_domicilios =  Request::input('ids_domicilios');
			$ids = explode(",", $ids_domicilios);
			foreach ($ids as $key => $id) {
				$exec = SQLConnection::backendStoreProcedure("backend_procesar_domicilio", array('B',$id), true);
			}
		}
		
		foreach ($tipos as $tipo){			
			$exec = SQLConnection::backendStoreProcedure("backend_procesar_domicilio", array('A', '0', $cuit, $domicilio, $codpos, $pai_codigo, $pai_nombre, $prv_codigo, $prv_nombre, $loc_nombre, $tipo), true);
		}
		
		
		$tabla_domicilios = (self::tablaDomiciliosv2($inputs['cuit']))->render();		
		return response()->json([
			'error' => (isset($exec->id_domicilio) && is_numeric($exec->id_domicilio)) ? false : true,
			'mensaje' => (isset($exec->id_domicilio) && is_numeric($exec->id_domicilio)) ? 'El domicilio se procesó correctamente' : 'Error: proceso fallido', 
			'tabla' => $tabla_domicilios 
		]);
	}

	public static function tablaDomiciliosv2($cuit = null, $id_domicilio = 0) {
		//$domicilios      = SQLConnection::backendStoreProcedure('obtener_domicilios_new', array($cuit, 0));
		$domicilios_visibles     = SQLConnection::backendStoreProcedure('backend_obtener_domicilios', array($cuit,1));
		$domicilios_no_visibles  = SQLConnection::backendStoreProcedure('backend_obtener_domicilios', array($cuit,0));
		$domicilios_todos    = array_merge($domicilios_visibles,$domicilios_no_visibles);
    
		$id_ant      = -1;
		$visible_ant = -1;
		$domicilios= [];

		foreach ($domicilios_todos as $value) {
			if ($visible_ant != $value->visible || $id_ant != $value->id) {
				$i = 0; 
			}

			$visible_ant = $value->visible; 
			$id_ant      = $value->id;

			if ($i==0){
				$domicilios[$value->visible][$value->id] = new stdClass();
				$domicilios[$value->visible][$value->id]->codpos       	= $value->codpos;
				$domicilios[$value->visible][$value->id]->domicilio    	= $value->domicilio;
				$domicilios[$value->visible][$value->id]->loc_codigo    = $value->loc_codigo; 
				$domicilios[$value->visible][$value->id]->loc_nombre    = $value->loc_nombre; 
				$domicilios[$value->visible][$value->id]->prv_codigo 		= $value->prv_codigo; 
				$domicilios[$value->visible][$value->id]->prv_nombre 		= $value->prv_nombre; 
				$domicilios[$value->visible][$value->id]->pai_codigo 		= $value->pai_codigo; 
				$domicilios[$value->visible][$value->id]->pai_nombre 		= $value->pai_nombre; 
				$domicilios[$value->visible][$value->id]->tipo_domicilio = $value->tipo_domicilio; 
				$domicilios[$value->visible][$value->id]->ids_domicilios 	 = $value->id_domicilio; 
				$domicilios[$value->visible][$value->id]->tipo_domicilio_id = $value->tipo_domicilio . '|' . $value->id_domicilio;  

			}else {
				$domicilios[$value->visible][$value->id]->ids_domicilios 	 .= ',' . $value->id_domicilio; 
				$domicilios[$value->visible][$value->id]->tipo_domicilio .= ',' . $value->tipo_domicilio; 
				$domicilios[$value->visible][$value->id]->tipo_domicilio_id .= ',' . $value->tipo_domicilio . '|' . $value->id_domicilio;  
			}
			$i += 1; 
		}

		return view('/tabla_domicilios_v2')->with(compact(['domicilios', 'cuit']));
	}

	public static function statusDomiciliov2() {
		$ids_domicilios = Request::input('ids_domicilios');
		$user_id = Session::get("usuario")->user_id;
		$cuit = Request::input('cuit');

		$ids = explode(",", $ids_domicilios);
		foreach ($ids as $key => $id) {
			$exec = SQLConnection::backendStoreProcedure("modificar_status_domicilio", array($id,$user_id), true);
		}
		
		$tabla_domicilios = (self::tablaDomiciliosv2($cuit))->render();

		return response()->json([
			'error' => (isset($exec->id_domicilio) && is_numeric($exec->id_domicilio)) ? false : true,
			'mensaje' => (isset($exec->id_domicilio) && is_numeric($exec->id_domicilio)) ? 'El domicilio cambió de status correctamente' : 'Error: proceso fallido', 
			'tabla' => $tabla_domicilios ]);
		
	}

}