<?php

class ProductosController extends \BaseController {

	public static $jqgrid_colmodel = [
		[
			'label' => 'Id',
			'name' => 'NREGUIST',
			'hidden' => true
		],
		[
			'label' => 'Codigo',
			'name' => 'CODIGO',
		],
		[
			'label' => 'Nombre',
			'name' => 'NOMBRE',
		],
		/*
		[
			'label' => 'Tipo',
			'name' => 'TIPO',
			'stype' => 'select',
			'searchoptions' => [
				'value' => ':;1:Producto Terminado; 2:Materia Prima; 3:Envases; 7:Productos Granel'
			]
		],
		*/
		[
			'label' => 'Solución',
			'name' => 'CLASE1',
		],
		[
			'label' => 'Familia',
			'name' => 'CLASE2',
		],
		[
			'label' => 'Proveedor',
			'name' => 'NOM_PROV',
		],
		[
			'label' => 'Precio Venta',
			'name' => 'PRECVTA',
		],
		[
			'label' => 'Estado',
			'name' => 'ELIMINADO',
			'stype' => 'select',
			'searchoptions' => [
				'value' => ':;0:Habilitado;1:Eliminado'
			]
		]
	];

	public static $tipo_productos = [
		1 => 'Producto Terminado',
		2 => 'Materia Prima',
		3 => 'Envases',
		7 => 'Productos Granel'
	];

	public static $estado_productos = [
		0 => 'Habilitado',
		1 => 'Eliminado'
	];

	/**
	 * Muestra grilla de Productos
	 * @return mixed
	 */
	public function index($tipoprod) {
		$title         = '';
        $TIPOPROD      = '';
		/* Producto Terminado */
		if ($tipoprod == 1)
		{
			$title     = 'Productos Envasados';
			$TIPOPROD  = 'PRODUCTOS ENVASADOS';
		}
		/* Materia Prima */
		if ($tipoprod == 2)
		{
			$title     = 'Materias Primas';
			$TIPOPROD  = 'MATERIAS PRIMAS';
		}
		/* Envases */
		if ($tipoprod == 3)
		{
			$title     = 'Envases';
			$TIPOPROD  = 'ENVASES';
		}
		/* Productos Granel */
		if ($tipoprod == 7)
		{
			$title     = 'Productos Granel';
			$TIPOPROD  = 'PRODUCTOS GRANEL';			
		}

		Breadcrumb::append_crumb($title);
		Jqgrid::add_js_colmodel('productos', self::$jqgrid_colmodel);
		$clase1 = DB::table('vFamilias')->lists('DESCRIP', 'DESCRIP');
		$clase2 = DB::table('vSubFamilias')->lists('DESCRIP', 'DESCRIP');
		$clase3 = DB::table('vSubSubFamilias')->lists('DESCRIP', 'DESCRIP');
		$tipo   = self::$tipo_productos;
		$estado = self::$estado_productos;
		return View::make('productos.index', compact('title', 'clase1', 'clase2', 'clase3', 'tipo', 'estado', 'tipoprod', 'TIPOPROD'));
	}

	/**
	 * Genera el json para cargar los datos en jqgrid
	 * @return string
	 */
	public function datagrid($tipoprod) {
		Jqgrid::init('vProductos', self::$jqgrid_colmodel, self::jqgrid_format());
		Jqgrid::get_query()->where('TIPO', $tipoprod);
		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, ['PRECVTA'])) {
				$result = moneda($value);
			} else if($column == 'TIPO') {
				$result = self::$tipo_productos[$value];
			} else if($column == 'ELIMINADO') {
				$result = self::$estado_productos[$value];
			}
			return $result;
		};
	}

	/**
	 * Agrega un nuevo producto
	 *
	 * @return Response
	 */
	public function agregar()
	{
		$vdata = [
			'CODIGO'      => \Input::get('CODIGO'),
			'NOMBRE'      => \Input::get('NOMBRE'),
			'TIPO'        => \Input::get('TIPO'),
			'DENSIDAD'    => \Input::get('DENSIDAD')?:0,
			'CLASE1'      => \Input::get('CLASE1'),
			'CLASE2'      => \Input::get('CLASE2'),
			'CLASE3'      => \Input::get('CLASE3'),
			'CLASE4'      => \Input::get('CLASE4'),
			'NOM_PROV'    => \Input::get('NOM_PROV'), //PROVEEDOR
			'PRECVTA'     => \Input::get('PRECVTA'), //PRECIO VENTA
		];

        /* Agregar valor al arreglo */
        if (Input::get('TIPO') == 1)
		{
			$vrules = [
	    	    'CODIGO'            => 'required',
		        'NOMBRE'            => 'required',
				'CLASE2'            => 'required',
				'PRECVTA'           => 'required',        //PRECIO VENTA
    		    'NOM_PROV'          => 'required|max:45', //PROVEEDOR
    		];
    		$vmessages = [
				'CODIGO.required'   => 'El valor del campo Codigo ya existe.',
     		    'NOMBRE.required'   => 'El valor del campo Nombre ya existe.',
     		    'NOMBRE.max'        => 'El valor del campo Nombre debe tener máximo 45 caracteres.',
     		    'NOMBRE.unique'     => 'El campo Nombre es obligatorio.',
				'CLASE2.required'   => 'El campo Familia es obligatorio.',
				'PRECVTA.required'  => 'El campo Precio Unitario es obligatorio.', //PRECIO VENTA
     		    'NOM_PROV.required' => 'El campo Nombre Proveedor es obligatorio.',
			    'NOM_PROV.max'      => 'El valor del campo Nombre Proveedor debe tener máximo 45 caracteres.',				
    		];
		}
        /* Agregar valor al arreglo */
        if (Input::get('TIPO') == 2)
	    {
     	    $vrules = [
      	        'CODIGO'            => 'required',
    		    'NOMBRE'            => 'required|max:45',
        	    'NOM_PROV'          => 'required|max:45', //PROVEEDOR
        	];
        	$vmessages = [
         	    'CODIGO.required'   => 'El campo Código es obligatorio.',
         	    'NOMBRE.required'   => 'El valor del campo Nombre ya existe.',
         	    'NOMBRE.max'        => 'El valor del campo Nombre debe tener máximo 45 caracteres.',
        	    'NOM_PROV.required' => 'El campo Nombre Proveedor es obligatorio.', //PROVEEDOR,
    		    'NOM_PROV.max'      => 'El valor del campo Nombre Proveedor debe tener máximo 45 caracteres.',				
        	];
    	}
        /* Agregar valor al arreglo */
		if (Input::get('TIPO') != 1 && Input::get('TIPO') != 2)
		{
     		$vrules = [
	    	    'CODIGO'            => 'required',
		        'NOMBRE'            => 'required',
    		    'CLASE2'            => 'required',
    		    'NOM_PROV'          => 'required|max:45', //PROVEEDOR
    		];
    		$vmessages = [
     		    'NOMBRE.required'   => 'El valor del campo Nombre ya existe.',
     		    'NOMBRE.max'        => 'El valor del campo Nombre debe tener máximo 45 caracteres.',
     		    'NOMBRE.unique'     => 'El campo Nombre es obligatorio.',
     		    'CLASE2.required'   => 'El campo Familia es obligatorio.',
     		    'NOM_PROV.required' => 'El campo Nombre Proveedor es obligatorio.',
			    'NOM_PROV.max'      => 'El valor del campo Nombre Proveedor debe tener máximo 45 caracteres.',				
    		];
		}

		$CLASE1                 = 'QUIMICOS';
		$CLASE2                 = $vdata['CLASE2'];
		$PRECVTA                = $vdata['PRECVTA'];

		$vdata['CLASE4'] = ''; 
		if (Input::get('TIPO') != 1)
		{
			$PRECVTA            = 0;
		}
		if (Input::get('TIPO') == 2)
		{
			$CLASE2             = 'MATERIAS PRIMAS';
		}

//		$validador    = Validator::make($vdata, $vrules, $vmessages);
//		if($validador->fails()) {
//			$response = $validador->messages();
//			return Response::json($response, 422);
//		} else {
            /* Graba */
			DB::statement('exec dbo.spGrabaProductos @NREGUIST = ?, @CODIGO = ?, @NOMBRE = ?, @TIPO = ?, @NOMBRE2 = ?, @CLASE1 = ?, @CLASE2 = ?, @CLASE3 = ?, @CLASE4 = ?, @PRECVTA = ?, @DENSIDAD = ?, @ELIMINADO = ?', [0, $vdata['CODIGO'], $vdata['NOMBRE'], $vdata['TIPO'], $vdata['NOM_PROV'], $CLASE1, $CLASE2, $vdata['CLASE3'], $vdata['CLASE4'], $PRECVTA, $vdata['DENSIDAD'], 0]);
			$message = ['content' => 'El Producto fue agregado.', 'type' => 'success'];
			$response = ['status' => 200, 'message' => $message];
//		}

		return Response::json($response, $response['status']);
	}

	/**
	 * Obtiene producto a partir de id
	 *
	 * @param int $id
	 * @return mixed
	 */
	public function obtener($id) {
		$producto = DB::table('vProductos')
			->where('NREGUIST', $id)
			->select('CODIGO', 'NOMBRE',  'TIPO', 'TIPOPROD', 'CLASE1', 'TIPOPROD1', 'CLASE2', 'CLASE3', 'CLASE4', 'NOM_PROV', 'PRECVTA', 'DENSIDAD','ELIMINADO')
			->first();
	
		if (empty($producto)) 
		{
   		    $producto            = new stdClass;
		    $producto->CODIGO    = '';
		    $producto->NOMBRE    = '';
		    $producto->TIPO      = 0;
		    $producto->TIPOPROD  = '';
     		$producto->CLASE1    = '';
    		$producto->TIPOPROD1 = '';
    		$producto->CLASE2    = '';
    		$producto->CLASE3    = '';
    		$producto->CLASE4    = '';
    		$producto->NOM_PROV  = '';
    		$producto->PRECVTA   = 0;
    		$producto->DENSIDAD  = 0;
    		$producto->ELIMINADO = 0;
			$producto->CLASE2    = 'MATERIAS PRIMAS';
		}
		
		return Response::json($producto, 200);
	}

	/**
	 * Editar un nuevo producto
	 *
	 * @return Response
	 */
	public function editar()
	{
		$vdata = [
			'id'        => \Input::get('id'),
			'CODIGO'    => \Input::get('CODIGO'),
			'NOMBRE'    => \Input::get('NOMBRE'),
			'TIPO'      => \Input::get('TIPO'),
			'DENSIDAD'  => \Input::get('DENSIDAD')?:0,
			'CLASE1'    => \Input::get('CLASE1'),
			'CLASE2'    => \Input::get('CLASE2'),
			'CLASE3'    => \Input::get('CLASE3'),
			'CLASE4'    => \Input::get('CLASE4'),
			'NOM_PROV'  => \Input::get('NOM_PROV'), //PROVEEDOR
			'PRECVTA'   => \Input::get('PRECVTA'), //PRECIO VENTA
			'ELIMINADO' => \Input::get('ELIMINADO'), //ELIMINADO
		];

        /* Agregar valor al arreglo */
		if (Input::get('TIPO') == 1)
		{
     		$vrules = [
	    		'CODIGO'   => 'required',
		    	'NOMBRE'   => 'required',
				'CLASE2'   => 'required',
				'PRECVTA'  => 'required', //PRECIO VENTA
    			'NOM_PROV' => 'required|max:45', //PROVEEDOR
    		];

    		$vmessages = [
    			'CODIGO.required'   => 'El campo Código es obligatorio.',
     			'NOMBRE.required'   => 'El valor del campo Nombre ya existe.',
     			'NOMBRE.max'        => 'El valor del campo Nombre debe tener máximo 45 caracteres.',
				'CLASE2.required'   => 'El campo Familia es obligatorio.',
     			'PRECVTA.required'  => 'El campo Familia es obligatorio.',
     			'NOM_PROV.required' => 'El campo Nombre Proveedor es obligatorio.', //PROVEEDOR,
				'NOM_PROV.max'      => 'El valor del campo Nombre Proveedor debe tener máximo 45 caracteres.',				
    		];
		}
        /* Agregar valor al arreglo */
		if (Input::get('TIPO') == 2)
		{
     		$vrules = [
	    		'CODIGO'            => 'required',
		    	'NOMBRE'            => 'required',
    			'CLASE2'            => 'required',
    			'NOM_PROV'          => 'required|max:45', //PROVEEDOR
    		];

    		$vmessages = [
    			'CODIGO.required'   => 'El campo Código es obligatorio.',
     			'NOMBRE.required'   => 'El valor del campo Nombre ya existe.',
     			'NOMBRE.max'        => 'El valor del campo Nombre debe tener máximo 45 caracteres.',
     			'CLASE2.required'   => 'El campo Familia es obligatorio.',
     			'NOM_PROV.required' => 'El campo Nombre Proveedor es obligatorio.', //PROVEEDOR,
				'NOM_PROV.max'      => 'El valor del campo Nombre Proveedor debe tener máximo 45 caracteres.',				
    		];
		}
        /* Agregar valor al arreglo */
		if (Input::get('TIPO') != 1 && Input::get('TIPO') != 2)
		{
			$vrules = [
		        'CODIGO'           => 'required',
			    'NOMBRE'           => 'required|max:45',
			    'CLASE2'           => 'required',
			    'NOM_PROV'         => 'required|max:45', //PROVEEDOR
		   ];

		   $vmessages = [
			   'CODIGO.required'   => 'El campo Código es obligatorio.',
			   'NOMBRE.required'   => 'El valor del campo Nombre ya existe.',
			   'NOMBRE.max'        => 'El valor del campo Nombre debe tener máximo 45 caracteres.',
			   'CLASE2.required'   => 'El campo Familia es obligatorio.',
			   'NOM_PROV.required' => 'El campo Nombre Proveedor es obligatorio.', //PROVEEDOR,
			   'NOM_PROV.max'      => 'El valor del campo Nombre Proveedor debe tener máximo 45 caracteres.',
		   ];
	    }
		
		$validador = Validator::make($vdata, $vrules, $vmessages);
		$CLASE1    = 'QUIMICOS';
		$vdata['CLASE4'] = ''; 
		if (Input::get('TIPO') != 1)
		{
			$vdata['PRECVTA'] = 0;
		}

		if($validador->fails()) {
			$response = $validador->messages();
			return Response::json($response, 422);
		} else {
			DB::statement('exec dbo.spGrabaProductos @NREGUIST = ?, @CODIGO = ?, @NOMBRE = ?, @TIPO = ?, @NOMBRE2 = ?, @CLASE1 = ?, @CLASE2 = ?, @CLASE3 = ?, @CLASE4 = ?, @PRECVTA = ?, @DENSIDAD = ?, @ELIMINADO = ?', [$vdata['id'], $vdata['CODIGO'], $vdata['NOMBRE'], $vdata['TIPO'], $vdata['NOM_PROV'], $CLASE1, $vdata['CLASE2'], $vdata['CLASE3'], $vdata['CLASE4'], $vdata['PRECVTA'], $vdata['DENSIDAD'], $vdata['ELIMINADO']]);
			$message = ['content' => 'El Producto fue agregado.', 'type' => 'success'];
			$response = ['status' => 200, 'message' => $message];
		}

		return Response::json($response, $response['status']);
	}

	public function eliminar()
	{
		$id = Input::get('id');

		DB::statement("delete art_db where NREGUIST = $id");
		$message = ['content' => 'El Producto fue Eliminada.', 'type' => 'success'];
		$response = ['status' => 200, 'message' => $message];

		return Response::json($response, $response['status']);
	}

}
