<?php

use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Validator;

class EnvasesController extends \BaseController {

	public static $jqgrid_colmodel = [
		[
			'label' => 'Id',
			'name' => 'ID',
			'hidden' => true
		],
		[
			'label' => 'Num registro',
			'name' => 'NREGUIST',
		],
		[
			'label' => 'Código',
			'name' => 'CODIGO',
			'hidden' => true
		],
		[
			'label' => 'Nombre',
			'name' => 'NOMBRE',
		],
		[
			'label' => 'Fecha Creación',
			'name' => 'FECHA_CRE',
			'searchoptions' => [
				'sopt' => ['custom']
			]
		],
		[
			'label' => 'Fecha Modificación',
			'name' => 'FECHA_MOD',
			'searchoptions' => [
				'sopt' => ['custom']
			]
		],
		[
			'label' => 'Estado',
			'name' => 'ESTADO',
		]
	];

	public static $jqgrid_detalles_colmodel = [
		[
			'label' => 'Id',
			'name' => 'ID',
			'hidden' => true
		],
		[
			'label' => 'Envases',
			'name' => 'NOMBRE',
		],
	];

	/**
	 * Muestra grilla de fórmulas
	 *
	 * @return Response
	 */
	public function index($id = false)
	{
		$rowid = $id;
		$title = 'Envases';
		Breadcrumb::append_crumb($title);
		Jqgrid::add_js_colmodel('formulas', self::$jqgrid_colmodel);
		Jqgrid::add_js_colmodel('detalles_formula', self::$jqgrid_detalles_colmodel);
		return View::make('envases.index', compact('title', 'rowid'));
	}

	/**
	 * Genera el json para cargar los datos en jqgrid
	 * @return string
	 */
	public function datagrid() {
		Jqgrid::init('vListaProductos', self::$jqgrid_colmodel, self::jqgrid_format(), self::jqgrid_filter_format());
		Jqgrid::get_query()->where('TIPO_ARTICULO', '=', 'PRODUCTO TERMINADO'); 
		return Jqgrid::datagrid();
	}

	/**
	 * Genera el json para cargar los datos en jqgrid
	 * @return string
	 */
	public function detalles_envases() {
		Jqgrid::init('vEnvases', self::$jqgrid_detalles_colmodel,  self::jqgrid_format());
		Jqgrid::get_query()->where('NREGUIST_PROD', Input::get('NREGUIST'));
		return Jqgrid::datagrid();
	}

	/**
	 * Retorna funcion anonima que define los formatos para los valores de las distintas columnas de la grilla
	 * @return function
	 */
	private static function jqgrid_format() {
		return function ($column, $value) {
			$result = $value;
			if (in_array($column, ['VOLUMEN', 'PESO', 'DENSIDAD', 'VOL_TOTAL', 'PESO_TOTAL', 'DEN_TOTAL'])) {
				$result = number_format($value, 3, ',', '.');
			} else if(in_array($column, ['FECHA_CRE', 'FECHA_MOD'])) {
				$result = date('d-m-Y H:i:s', strtotime($value));
			} else if(in_array($column, ['COSTO', 'COSTO_TOTAL'])) {
				$result = moneda($value);
			}
			if (in_array($column, ['ESTADO'])) {
				if ($value != 0) 
				{
				  $archivo = asset('img/plus.png');
				  $result  = "<center><img src='$archivo' width='20'></center>";
				}
				else
				{
				  $archivo = asset('img/minus.png');
				  $result  = "<center><img src='$archivo' width='20'></center>";
				}
			 }
 
			return $result;
		};
	}

	/**
	 * Retorna funcion anonima que define los formatos de búsqueda para los valores de las distintas columnas de la grilla
	 * @return function
	 */
	private static function jqgrid_filter_format() {
		return function ($field, $data) {
			$result = $data;
			if (in_array($field, ['FECHA_CRE', 'FECHA_MOD'])) {
				$values = explode(' | ', $data);
				$v1 = date('d-m-Y', strtotime($values[0]));
				$v2 = date('d-m-Y', strtotime($values[1]));
				$aux = "$field BETWEEN '$v1 00:00:00' AND '$v2 23:59:59'";
				$result = $aux;
			}
			return $result;
		};
	}

	/**
	 * Muestra Vista de agregar fórmula
	 *
	 * @return \Illuminate\Http\Response
	 */
	public function vista_agregar() {
		$title = 'Agregar';
		Breadcrumb::append_crumb('Fórmulas');
		Breadcrumb::append_crumb($title);
		return View::make('envases.agregar', compact('title'));
	}

	/**
	 * Muestra Vista de editar fórmula
	 *
	 * @return \Illuminate\Http\Response
	 */
	public function vista_editar($id) {
		$title = 'Editar';
		Breadcrumb::append_crumb('Fórmulas');
		Breadcrumb::append_crumb($title);
		$formula = DB::table('vListaProductos')->where('ID', '=',$id)->first();
		if(empty($formula)) {
			App::abort(404);
		}
		$detalles_formula  = DB::table('vEnvases')->where('NREGUIST_PROD', '=', $formula->NREGUIST)->get();
		return View::make('envases.editar', compact('id', 'title', 'formula', 'detalles_formula'));
	}

	/**
	 * Guarda fórmula en base de datos
	 *
	 * @return \Illuminate\Http\Response
	 */
	public function agregar_envases() {
		$data     = json_decode(Input::get('data'), true);
		$nreguist = $data['nreguist'];

		//Validacion
		if(isset($data['materias_primas'])) {
			foreach($data['materias_primas'] as $id=>$mp) {
				$vdata["envase$id"]       = isset($mp['nreguist'])?$mp['nreguist']:'';
				$vdata["CANTIDAD$id"]     = isset($mp['CANTIDAD'])?$mp['CANTIDAD']:'';
				$vrules["envase$id"]      = "min:1";
				$vrules["CANTIDAD$id"]    = "min:1";
				$vmessages["envase$id"]   = 'El campo envase es obligatorio.';
				$vmessages["CANTIDAD$id"] = 'El campo cantidad es obligatorio.';

			}
		}

		$validador = Validator::make($vdata, $vrules, $vmessages);

		if($validador->fails()) {
			$response = $validador->messages();
			return Response::json($response, 422);
		} else {

			//Borra detalles
			DB::table('PRODUCCION_ENVASES')
				->where('NREGUIST_PROD', $nreguist)
				->delete();

			//fin validacion
			foreach($data['materias_primas'] as $mp) {
                /* Indentifica envase */
				$nreguist_mpri = $mp["NREGUIST_MP"];
				$CANTIDAD      = $mp["CANTIDAD"];

                /* Agregar envases a la lista */
				DB::table('PRODUCCION_ENVASES')->insert([
					'NREGUIST_PROD' => $nreguist,
					'NREGUIST_MPRI' => $nreguist_mpri,
					'CANTIDAD'      => $CANTIDAD
				]);
			}

			$message = ['content' => 'Los envases fueron agregados.', 'type' => 'success', 'id' => $nreguist];
			$response = ['status' => 200, 'message' => $message];
		}
		return Response::json($response, $response['status']);
	}

	/**
	 * Obtiene listado de materias primas
	 * @return mixed
	 */
	public function select_envases() {
		$query = Input::get('q', '');
		$materias_primas = DB::table('vListaProductos')
			->whereIn('TIPO_ARTICULO', ['ENVASES', 'PRODUCTO GRANEL'])
			->where('NOMBRE', 'LIKE', "%$query%")
			->select(DB::raw('NREGUIST as id, NOMBRE as text, VALPROM as costo, DENSIDAD as densidad'))
			->paginate(10);
		return $materias_primas;
	}

	/**
	 * Obtiene listado de productos terminados
	 * @return mixed
	 */
	public function select_productos() {
		$query = Input::get('q', '');
		$productos = DB::table('vListaProductos')
			->where('TIPO_ARTICULO', 'PRODUCTO GRANEL')
			->where('NOMBRE', 'LIKE', "%$query%")
			->whereRaw('NREGUIST NOT IN (SELECT NREGUIST FROM vFormulas)')
			->select(DB::raw('NREGUIST as id, NOMBRE as text, PRECVTA as precio_venta'))
			->paginate(10);
		return $productos;
	}

}
