<?php

namespace App\Http\Controllers;

use App\{Alumno,AlumnoHistoricoPagos,FormaPago,Servicios,Periodos};
use App\{Aspirante,AspiranteHistoricoPagos,Bitacora,Vaucher};
use App\{LotePagos,ServiciosPagados, AlumnoHistoricoSemestre};
use Illuminate\Http\Request;
use Illuminate\Http\File;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\View;

//use Validator;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;

use App\NGL_Configuracion;
use Carbon\Carbon;

class VaucherController extends Controller
{

	public function prueba(){
		$now = new \DateTime();
		$hoy = $now->format('d');
		if ($hoy=='01') {
			$vau = Vaucher::where('created_at','LIKE', '%'.$now->format('Y-m-d').'%')->first();
			if ($vau==null) {
				
			}
		}

		dd($vau);
		//$serv = Servicios::where('nombre','INSCRIPCION')->where('estado','1')->first();
		//dd($serv);
		//if($serv==NULL){$serv=Servicios::where('id','6')->first();}
	}

	public function nuevo(Request $request){

		$data = $request->all();
		$pago=FormaPago::where('estado','1')->get();
		$peri = Periodos::where('vaucher', '1')->first();
		$fich = Periodos::where('ficha', '1')->first();	
		$bandera = "";

		//if($data['numero']=='10650121'){

			$alumno = Alumno::where('id',$data['numero'])->first();
			$rechaz = LotePagos::whereHas('alumno_historico_pagos', function($query) use ($data){
				$query->where('fk_idAlumno', $data['numero']);
				$query->where('fk_idEstado', '3');
			})->with('observaciones')->get();

			$bandera = "alumno";
			if ($alumno==null) {
				//validar si ya tiene numero de control, no permitir acceso con num de solicitud
				$alumno = Aspirante::where('id',$data['numero'])->first();//estado 3 es aspirante, estado 1 es ficha
				$rechaz = LotePagos::whereHas('aspirante_historico_pagos', function($query) use ($data){
					$query->where('fk_idAspirante', $data['numero']);
					$query->where('fk_idEstado', '3');
				})->with('observaciones')->get();

				$bandera = "aspirante";
				if ($alumno == null || $alumno->fk_idEstatus=='4') { //4: ya tiene numero de control
		
					if (strlen($data['numero'])<8) {
						return response()->json(['estado'=>'mensaje', 'mensaje'=>"El número de solicitud aun no se encuentra registrado. Si en un lapso de 48hrs. despues de tu registro, sigue sin permitirte el acceso, por favor envia un correo al Depto. Desarrollo Academico <b>dda_zitacuaro@tecnm.mx.</b>"]);
					} else {
						return response()->json(['estado'=>'mensaje', 'mensaje'=>"El número de control no se encuentra registrado."]);
					}

				} elseif ($alumno->fk_idPeriodo!=$fich->id) {
					return response()->json(['estado'=>'mensaje', 'mensaje'=>"Por favor, ingresa con tu número de control."]);
				}
			} 

			Bitacora::create(['fk_idFolio'=>$data['numero']]);
			return response()->json(['estado'=>'vista','vista'=>view('vaucher.nuevo', compact('alumno','pago','bandera','rechaz')).""]);

		/*} else {
			return response()->json(['estado'=>'mensaje', 'mensaje'=>"El portal esta en mantenimiento, por favor intenta en unos minutos."]);
		}*/
		
	}

	public function save(Request $request){
		$data=$request->all();

		$peri = Periodos::where('vaucher', '1')->first();
		$fich = Periodos::where('ficha', '1')->first();
		$now = new \DateTime();

		$comprobantes = json_decode($data['comprobantes']);
		$conceptos 		= json_decode($data['conceptos']);
		

		//obtiene si hay un periodo valido para realizar examen de liberacion de ingles y permitir capturar comprobante de pago.
		$hoy = Carbon::now('America/Mexico_City'); //2015-01-01 00:00:00
		$confi_ingles	= NGL_Configuracion::where('estado', '2')
																		 ->where('inicio_pago', '<=', $hoy)
																		 ->where('cierre_pago', '>=', $hoy)
																		 ->first();

		for ($i=0; $i < count($comprobantes); $i++) { 
			$exte = $request->file('imagen_'.$i)->getClientOriginalExtension();
			if ($exte=='jpg' || $exte=='jpeg' || $exte=='JPG' || $exte=='JPEG' || $exte=='png' || $exte=='PNG') {
			} else {
				return response()->json(['estado'=>'error', 'mensaje'=>'Solo esta permitido subir imagenes en formato jpg, png, jpeg.']);
			}

			//validando que el numero de autorizacion sea unico
			$metod = FormaPago::where('id',$comprobantes[$i]->metodo)->first();
			
			$exi_alu = AlumnoHistoricoPagos::where('referencia',$comprobantes[$i]->referencia)
													->where('importe',$comprobantes[$i]->importe)
													->where('fecha_pago',$comprobantes[$i]->fecha)
													->where('fk_idFormaPago',$comprobantes[$i]->metodo)->first();
			$exi_asp = AspiranteHistoricoPagos::where('referencia',$comprobantes[$i]->referencia)
													->where('importe',$comprobantes[$i]->importe)
													->where('fecha_pago',$comprobantes[$i]->fecha)
													->where('fk_idFormaPago',$comprobantes[$i]->metodo)->first();

			if ($exi_alu!=null || $exi_asp!=null) {
				return response()->json(['estado'=>'error', 'mensaje'=>'Comprobante #'.($i+1).'. Verifica el número de '.substr($metod->observacion,0,strlen($metod->observacion)-1).', puesto que ya ha sido capturada.' ]);
			}

		}

		//validar si el vaucher es de liberacion de ingles para validar que esten las fechas correctas
		for ($i=0; $i < count($conceptos); $i++) { 
			if ( ($conceptos[$i]->id=='31' || $conceptos[$i]->id=='32') && $confi_ingles==null) {
				return response()->json(['estado'=>'error', 'mensaje'=>'Por favor, para subir el comprobante asegurate que la aplicación del examen si es en una fecha próxima.']);
			}
		}
		
		$lote = LotePagos::create(['total'=>$data['total']]);//Guardar en lote pagos
		
		for ($i=0; $i < count($conceptos); $i++) { //Guardar servicios pagados
			$servicio = ServiciosPagados::create(['fk_idServicio'=>$conceptos[$i]->id, 'fk_idLote'=>$lote->id ]);

			if (array_key_exists('observacion', $data) || array_key_exists('presentacion', $data)) {
				$servicio->observacion = $data['observacion'];
				$servicio->presentacion = $data['presentacion'];
				$servicio->save();
			} 

		}
		
		if ($data['bandera']=='alumno') {//Guardar los comprobantes
			$alum = Alumno::where('id', $data['no_control'])->first();
			$alum->celular = $data['celular'];
			$alum->correo  = $data['correo'];
				if (array_key_exists('semestre', $data)) {
					$alum->semestre = $data['semestre'];
					AlumnoHistoricoSemestre::create(['fk_idAlumno'=>$data['no_control'], 'fk_idPeriodo'=>$peri->id, 'semestre'=>$data['semestre']]);
				} 
			$alum->save();
			
			for ($i=0; $i < count($comprobantes); $i++) { 
				$exte = $request->file('imagen_'.$i)->getClientOriginalExtension();
				$name = "ALU".$lote->id."_".$i."_".$data['no_control']."_".$now->format('dm:Hi').'.'.$exte;
				$pago = AlumnoHistoricoPagos::create([ 'fk_idLote'=>$lote->id, 'fk_idServicio'=>'6', 'fk_idAlumno'=>$data['no_control'], 'fk_idFormaPago'=>$comprobantes[$i]->metodo, 'fk_idPeriodo'=>$peri->id, 'fk_idAutorizo'=>'999', 'fk_idEstado'=>'1', 'importe'=>$comprobantes[$i]->importe, 'referencia'=>$comprobantes[$i]->referencia, 'imagen'=>$name, 'fecha_pago'=>$comprobantes[$i]->fecha, 'consecutivo'=>$peri->consecutivo_vaucher]);

				$path = $request->file('imagen_'.$i)->storeAs($peri->nombre, $name, 'vaucher'); 
			}
		} else {
			$alum = Aspirante::where('id', $data['no_control'])->first();
			$alum->celular = $data['celular'];
			$alum->correo  = $data['correo'];
			$alum->save();

			for ($i=0; $i < count($comprobantes); $i++) { 
				$exte = $request->file('imagen_'.$i)->getClientOriginalExtension();
				$name = "ASP".$lote->id."_".$i."_".$data['no_control']."_".$now->format('dm:Hi').'.'.$exte;
				$pago = AspiranteHistoricoPagos::create([ 'fk_idLote'=>$lote->id, 'fk_idServicio'=>'6', 'fk_idAspirante'=>$data['no_control'], 'fk_idFormaPago'=>$comprobantes[$i]->metodo, 'fk_idPeriodo'=>$peri->id, 'fk_idAutorizo'=>'999', 'fk_idEstado'=>'1', 'importe'=>$comprobantes[$i]->importe, 'referencia'=>$comprobantes[$i]->referencia, 'imagen'=>$name, 'fecha_pago'=>$comprobantes[$i]->fecha, 'consecutivo'=>$peri->consecutivo_vaucher]);

				$path = $request->file('imagen_'.$i)->storeAs($peri->nombre, $name, 'vaucher'); 
			}
		}

		if ( !($data['no_control']=="10650121" || $data['no_control']=="1") ){
			$peri->consecutivo_vaucher = $peri->consecutivo_vaucher+1;
			$peri->save();
		}
		
		return response()->json(['estado'=>'exito', 'mensaje'=>'Muchas gracias, tu vaucher ha sido registado de manera exitosa.' ]);

	}

	public function show(Request $request){
		$data = $request->all();
		if ($data['bandera']=='alumno') {
			$alup=LotePagos::where('id',$data['numero'])->with('alumno_historico_pagos.alumno','observaciones','servicios_pagados')->first();
		} else {
			$alup=LotePagos::where('id',$data['numero'])->with('aspirante_historico_pagos.aspirante','observaciones','servicios_pagados')->first();
		}

		return $alup->toJSON();
	}

	public function update(Request $request){
		$data = $request->all();
		$peri = Periodos::where('vaucher', '1')->first();
		$fich = Periodos::where('ficha', '1')->first();
		$now  = new \DateTime();

		$comprobantes = json_decode($data['comprobantes']);
		$conceptos 		= json_decode($data['conceptos']);

		for ($i=0; $i < count($comprobantes); $i++) { 
			$exte = $request->file('imagen_'.$i)->getClientOriginalExtension();
			if ($exte=='jpg' || $exte=='jpeg' || $exte=='JPG' || $exte=='JPEG' || $exte=='png' || $exte=='PNG') {
			} else {
				return response()->json(['estado'=>'error', 'mensaje'=>'Solo esta permitido subir imagenes en formato jpg, png, jpeg.']);
			}

			//validando que el numero de autorizacion sea unico
			$metod = FormaPago::where('id',$comprobantes[$i]->metodo)->first();
			$exi_alu = AlumnoHistoricoPagos::where('referencia',$comprobantes[$i]->referencia)
													->where('importe',$comprobantes[$i]->importe)
													->where('fecha_pago',$comprobantes[$i]->fecha)
													->where('fk_idFormaPago',$comprobantes[$i]->metodo);
			$exi_asp = AspiranteHistoricoPagos::where('referencia',$comprobantes[$i]->referencia)
													->where('importe',$comprobantes[$i]->importe)
													->where('fecha_pago',$comprobantes[$i]->fecha)
													->where('fk_idFormaPago',$comprobantes[$i]->metodo);

			if ($data['bandera']=='alumno') {
				$exi_alu = $exi_alu->where('fk_idLote', '!=', $data['id'])->first();
				$exi_asp = $exi_asp->first();
			} elseif ($data['bandera']=='aspirante') {
				$exi_alu = $exi_alu->first();
				$exi_asp = $exi_asp->where('fk_idLote', '!=', $data['id'])->first();
			}

			if ($exi_alu!=null || $exi_asp!=null) {
				return response()->json(['estado'=>'error', 'mensaje'=>'Comprobante #'.($i+1).'. Verifica el número de '.substr($metod->observacion,0,strlen($metod->observacion)-1).', puesto que ya ha sido capturada.' ]);
			}
				

		}

		//Actualizar en lote pagos
		$lote = LotePagos::find($data['id']);
		$lote->total = $data['total'];
		$lote->save();

		//Actualizar servicios pagados
		$serv = ServiciosPagados::where('fk_idLote', $lote->id)->get();

		for ($i=0; $i < count($serv); $i++) { 
			if (array_key_exists('observacion', $data) || array_key_exists('presentacion', $data)) {
				$serv[$i]->observacion = $data['observacion'];
				$serv[$i]->presentacion= $data['presentacion'];
			} 

			$serv[$i]->fk_idServicio = $conceptos[$i]->id;
			$serv[$i]->save();
		}
		
		if ($data['bandera']=='alumno') {//Guardar los comprobantes
			$alum = Alumno::where('id', $data['no_control'])->first();
			$alum->celular = $data['celular'];
			$alum->correo  = $data['correo'];
			
				if (array_key_exists('semestre', $data) && ($alum->semestre!=$data['semestre']) ) {
					$alum->semestre = $data['semestre'];
					AlumnoHistoricoSemestre::create(['fk_idAlumno'=>$data['no_control'], 'fk_idPeriodo'=>$peri->id, 'semestre'=>$data['semestre']]);
				} 
				
			$alum->save();
			
			for ($i=0; $i < count($comprobantes); $i++) { 
				$pago = AlumnoHistoricoPagos::find($comprobantes[$i]->id);

								Storage::disk('vaucher')->delete($peri->nombre.'/'.$pago->imagen);

				$exte = $request->file('imagen_'.$i)->getClientOriginalExtension();
				$name = "ALU".$lote->id."_".$i."_".$data['no_control']."_".$now->format('dm:Hi').'.'.$exte;
				
				$pago->fk_idFormaPago = $comprobantes[$i]->metodo;
				$pago->referencia			= $comprobantes[$i]->referencia;
				$pago->importe 				= $comprobantes[$i]->importe;
				$pago->fecha_pago 		= $comprobantes[$i]->fecha;
				$pago->imagen 				= $name;
				$pago->fk_idEstado 		= '1';
				$pago->save();

				$path = $request->file('imagen_'.$i)->storeAs($peri->nombre, $name, 'vaucher'); 
			} 
		} else {
			$alum = Aspirante::where('id', $data['no_control'])->first();
			$alum->celular = $data['celular'];
			$alum->correo  = $data['correo'];
			$alum->save();
			
			for ($i=0; $i < count($comprobantes); $i++) { 
				$pago = AspiranteHistoricoPagos::find($comprobantes[$i]->id);

								Storage::disk('vaucher')->delete($peri->nombre.'/'.$pago->imagen);

				$exte = $request->file('imagen_'.$i)->getClientOriginalExtension();
				$name = "ASPI".$lote->id."_".$i."_".$data['no_control']."_".$now->format('dm:Hi').'.'.$exte;
				
				$pago->fk_idFormaPago = $comprobantes[$i]->metodo;
				$pago->referencia			= $comprobantes[$i]->referencia;
				$pago->importe 				= $comprobantes[$i]->importe;
				$pago->fecha_pago 		= $comprobantes[$i]->fecha;
				$pago->imagen 				= $name;
				$pago->fk_idEstado 		= '1';
				$pago->save();

				$path = $request->file('imagen_'.$i)->storeAs($peri->nombre, $name, 'vaucher'); 
			}
		}
		

		return response()->json(['estado'=>'exito', 'mensaje'=>'Muchas gracias, tu vaucher ha sido actualizado de manera exitosa. <br>Se te notificará a tu correo cuando sea validado.' ]);


		/*
	    if ($data['bandera']=='ficha') {
	    	$name = 'F_'.$data['no_control']."_".$now->format('dm:Hi').'.'.$exte;
		   	$serv = Servicios::where('costo',$data['importe'])->first();
		  } elseif($data['bandera']=='alumno'){
		  	$name = 'R_'.$data['no_control']."_".$now->format('dm:Hi').'.'.$exte;
		  	$serv = Servicios::where('nombre','REINSCRIPCION')->where('estado','1')->where('costo',$data['importe'])->first();
		  } else {
		  	$name = 'I_'.$data['no_control']."_".$now->format('dm:Hi').'.'.$exte;
		  	$serv = Servicios::where('nombre','INSCRIPCION')->where('estado','1')->where('costo',$data['importe'])->first();
		  }
		*/
	}
}
