<?php

class AjusteentradaController extends \BaseController {

	public static $jqgrid_colmodel = [
		[
			'label' => 'ID',
			'name' => 'NUMREG',
			'hidden' => true
		],
		[
			'label' => 'Nº Docto',
			'name' => 'NUMFACT',
		],
		[
			'label' => 'Fecha',
			'name' => 'FECHA',
		],
		[
			'label' => 'Observación',
			'name' => 'NOTAOBS',
		],
	];

	public static $detalles_jqgrid_colmodel = [
		[
			'label' => 'Id',
			'name' => 'NUMRECORGUIARECEPCION',
			'hidden' => true
		],
		[
			'label' => 'Código',
			'name' => 'CODIGO',
		],
		[
			'label' => 'Nombre Artículo',
			'name' => 'NOMBRE',
		],
		[
			'label' => 'Envase',
			'name' => 'ENVASE',
		],
		[
			'label' => 'Precio Unit.',
			'name' => 'PRECUNIT',
		],
		[
			'label' => 'Unidades Recibidas',
			'name' => 'CANTIDAD',
		],
		[
			'label' => 'Lote Prov.',
			'name' => 'LOT_IDE',
		],
		[
			'label' => 'Nombre archivo',
			'name' => 'NOM_ARCHIVO',
		],
	];

	/**
	 * Display a listing of the resource.
	 *
	 * @return Response
	 */
	public function index() {

        $title       = '';
        /* Nota de Ventas */
        $title       = 'Ajustes de Entrada';

		Breadcrumb::append_crumb($title);
		Jqgrid::add_js_colmodel('Facturas', self::$jqgrid_colmodel);
//		Jqgrid::add_js_colmodel('detalles_Factura', self::$detalles_jqgrid_colmodel);

		return View::make('ajusteentrada.index', compact('title'));
	}

	public function datagrid() {
		Jqgrid::init('vAjustesEntradas', self::$jqgrid_colmodel, self::jqgrid_format(), self::jqgrid_filter_format(), $use_relations = TRUE, $with_trash = FALSE);
		return Jqgrid::datagrid();
	}

	public function detalles_datagrid() {
		Jqgrid::init('vLineasGuiaRecepcion', self::$detalles_jqgrid_colmodel, self::jqgrid_format());
		Jqgrid::get_query()->where('NUMRECORGUIARECEPCION', Input::get('NUMRECORGUIARECEPCION'));
		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, ['FecEmi'])) {
				$result = date('d-m-Y', strtotime($value));
			} else 
			}*/
            if (in_array($column, ['TOTNETO'])) 
			{
				$result = moneda($value);
            }
			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'])) {
				$values = explode(' | ', $data);
				$v1 = date('d-m-Y', strtotime($values[0]));
				$v2 = date('d-m-Y', strtotime($values[1]));
				$aux = "FECHA >= '$v1 00:00:00' AND FECHA <= '$v2 23:59:59'";
				$result = $aux;
			}
			return $result;
		};
	}

	/**
	 * Muestra Vista Factura mercadería
	 *
	 * @return \Illuminate\Http\Response
	 */
	public function vista_agregar($id) {
        $title       = 'Ajuste de Entrada';
		Breadcrumb::append_crumb('Ajustes');
		Breadcrumb::append_crumb($title);
		$vendedores  = DB::table('vVendedor')->lists("Nombre", 'NUMREG');

		/*
		$regiones    = DB::table('maeregiones')->lists('nombre', 'codregionId');
		$comunas     = DB::table('maeComunas')->lists('nombre', 'codcomunaid');
		$bodegas     = DB::table('TabBod')->lists('NomBod', 'CodBodID');
		$cobradores  = DB::table('MaeCob')->lists('NomCob', 'CodCobID');
		$condiciones = DB::table('TabCon')->lists('NomCnd', 'CodCndID');
		$plazo       = DB::table('ParVta')->lists('NomVta', 'CodVtaId');
		$lista       = DB::table('TabLis')->lists('NomInt', 'CodLisId');
		*/
		$TipDoc      = 0;
        if ($id     != 0)
        {
            /* Lee Cabecera */
	     	$Factura = DB::table('vAjustesEntradas')
		    	->where('NUMREG', $id)
			    ->select(DB::raw('NUMREG, NUMFACT, CONVERT(VARCHAR, FECHA, 103) FECHA, NRUTCLIE, NRUTFACT, RUTFACT, RAZSOC, ISNULL(DCTOPJE, 0) DCTOPJE, 0 NUMORDC, 0 SUBNETO, CONVERT(INT, TOTNETO) TOTNETO, Isnull(TOTIVA, 0) TOTIVA, TOTAL, CODVEND, NOTAOBS'))
			    ->first();
     		if(empty($Factura)) {
	    		App::abort(404);
		    }

            /* Lee Detalle */
    		$PRODUCTO_VENTA = DB::table('vAjusteSalidaDetalle')
    			->where('NUMRECOR', $id)
				->select(DB::raw('ID, NROLIN, NCODART, CODIGO, DESCRIP, CONVERT(INT, CANTIDAD) CANTIDAD, CONVERT(DECIMAL(10,2), PRECUNIT) PRECUNIT, LOT_IDE, CONVERT(INT, (CANTIDAD  * PRECUNIT)) SUBTOTAL'))
    			->get();
        }
        else 
		{
            // Crea a nuevo Object stdClass Factura
            $Factura           = new stdClass;
            $Factura->NUMREG   = 0; 
            $Factura->NUMFACT  = 0;
			$Factura->FECHA    = date('d/m/Y');
			$Factura->NRUTCLIE = 0;
			$Factura->NRUTFACT = 0;
            $Factura->RUTFACT  = '';
			$Factura->RAZSOC   = '';
			$Factura->CODVEND  = 0;
			$Factura->DCTOPJE  = 0;
			$Factura->NUMORDC  = '';
            $Factura->SUBNETO  = 0;
            $Factura->TOTNETO  = 0;
			$Factura->TOTIVA   = 0;
			$Factura->TOTAL    = 0;
			$Factura->NOTAOBS  = '';
			
			// Crea a nuevo Object stdClass Factura

            $PRODUCTO_VENTA[0] = new stdClass;
			$PRODUCTO_VENTA[0]->ID       = 0;
			$PRODUCTO_VENTA[0]->NROLIN   = 0;
			$PRODUCTO_VENTA[0]->NCODART  = 0;
			$PRODUCTO_VENTA[0]->CODIGO   = '';
            $PRODUCTO_VENTA[0]->DESCRIP  = '';
            $PRODUCTO_VENTA[0]->CANTIDAD = 0;
			$PRODUCTO_VENTA[0]->PRECUNIT = 0;
			$PRODUCTO_VENTA[0]->LOT_IDE  = '';
            $PRODUCTO_VENTA[0]->SUBTOTAL = 0;
        }

		/* Calcula valores */
		$Factura->SUBNETO                  = 0;
		foreach($PRODUCTO_VENTA as $id=>$mp) 
		{
			$PRODUCTO_VENTA[$id]->SUBTOTAL = (($PRODUCTO_VENTA[$id]->PRECUNIT * $PRODUCTO_VENTA[$id]->CANTIDAD));

            $Factura->SUBNETO              = $Factura->SUBNETO + $PRODUCTO_VENTA[$id]->SUBTOTAL; 
		}
		
		return View::make('ajusteentrada.agregar', compact('title', 'Factura', 'PRODUCTO_VENTA', 'TipDoc', 'vendedores'));
	}

	/**
	 * Guarda Factura en base de datos
	 *
	 * @return \Illuminate\Http\Response
	 */
	public function agregar_Factura() {
		// Data
		$data                 = json_decode(Input::get('data'), true);
		$NUMFACT              = $data['NUMFACT'];
		$NUMREG               = $data['NUMREG'];
		$GLOSACON             = $data['NOTAOBS'];
		
		// Reglas Validación Detalle de Ventas
		if (isset($data['PRODUCTO_VENTA'])) {
			foreach($data['PRODUCTO_VENTA'] as $id=>$mp) 
			{
				$vdata["PRODUCTO_VENTA$id"]                  = isset($mp["CODIGO"])?$mp["CODIGO"]:'';
				$vdata["CANTIDAD$id"]                        = isset($mp["CANTIDAD"])?$mp["CANTIDAD"]:'';
				$vdata["PRECUNIT$id"]                        = isset($mp["PRECUNIT"])?$mp["PRECUNIT"]:'';
				
				$vrules["PRODUCTO_VENTA$id"]                 = "required";
				$vrules["CANTIDAD$id"]                       = 'required|numeric|min:1|max:99999999';
				$vrules["PRECUNIT$id"]                       = 'required|numeric|min:1|max:99999999';

				$vmessages["PRODUCTO_VENTA$id.required"]     = 'El campo Código de Producto es obligatorio.';
				$vmessages["CANTIDAD$id.required|numeric"]   = 'El campo Cantidad no debe ser menor a 1.';
				$vmessages["CANTIDAD$id.min"]                = 'El campo Cantidad no debe ser menor a 1.';
				$vmessages["CANTIDAD$id.max"]                = 'El campo Cantidad no debe ser mayor a 9999999.';

				$vmessages["PRECUNIT$id.required|numeric"]   = 'El campo Precio no debe ser menor a 1.';
				$vmessages["PRECUNIT$id.min"]                = 'El campo Precio no debe ser menor a 1.';
				$vmessages["PRECUNIT$id.max"]                = 'El campo Precio no debe ser mayor a 9999999.';
			}
		}

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

		if($validador->fails()) 
		{
			$response = $validador->messages();
			return Response::json($response, 422);
		} 
		else 
		{    
            $mensa = '';
            /* Tipo de Documento */

            $PorDct     = 0;
            $Descto     = 0;

            if (isset($data['fecha']))
            {
			   $FECHA  = $data['fecha'];
            }

			$FECHAMODIF      = DATE('d-m-Y');

			// Totales
			$TOTNETO     = 0;
			$TOTIVA      = 0;
			$TOTAL       = 0;
			$IVA         = 19;

			// Insert MovVen - MovDet
            if ($NUMFACT == 0 || $NUMFACT == '' || $NUMFACT == null)
            {
                /* Lee Número mayor */
		        $DOCU_DB = DB::table('DOCU_DB')
				->select(DB::raw('Max(NUMFACT) NUMFACT, Max(NUMREG) NUMREG, Max(NUMCORR) NUMCORR'))
			    ->where('TIPODOC', '=', 9)
			    ->first();

                /* Campos */    
				$NUMFACT     = $DOCU_DB->NUMFACT;
				$NUMREG      = $DOCU_DB->NUMREG;
				$NUMCORR     = $DOCU_DB->NUMCORR; 
				
                $noDuplicado = false;
                $i           = 0;
	
                do {
                     $noDuplicado  = true; 
                     $NUMFACT      = $NUMFACT + 1;
                     $NUMREG       = $NUMREG  + 1;
					 $NUMCORR      = $NUMCORR + 1; 
   
                     try
                     {
						$TASACBIO        = 1;
						DB::table('DOCU_DB')->insert([
							'NUMFACT'=>$NUMFACT, 'FECHA'=>$FECHA, 'NRUTFACT'=>1927, 'RUTFACT'=>'76107759-7', 'NRUTCLIE'=>1927, 
							'PROFORMA'=>0, 'NUMREG'=>$NUMREG, 'CODVEND'=>0, 'GLOSACON'=>'', 'NUMORDEN'=>0, 'NUMGUIAF'=>'', 
							'FORMPAGO'=>'', 'VENCIMIE'=>null, 'MONEDA'=>'$', 'DCTOTIPO'=>0, 'DCTOPJE'=> 0, 'GARANTIA'=>0, 
							'STOCK'=>1, 'NULA'=>0, 'CANCELA'=>0, 'TOTNETO'=>$TOTNETO, 'TASACBIO'=>$TASACBIO, 'VENCIDIA'=>0, 
							'FECHAMODIF'=>$FECHA, 'USERMODI'=>'ADM', 'IDNRMOV'=>0, 'IDNRCON'=>0, 'FECPACK'=>NULL, 'HORAPACK'=>'', 
							'FECRECEP'=>NULL, 'HORARECEP'=>'', 'FECHADESP'=>NULL, 'HORADESP'=>'', 'FECACTUAL'=>NULL, 'HORACTUAL'=>'',
							'KM'=>0, 'IDNREMP'=>0, 'PESO'=>0, 'NGUIA'=>'', 'VALORDES'=>0, 'RECIBIDO'=>'', 'IVA'=>$IVA, 'TIPODOC'=>9, 
							'ENTR_DIR'=>'', 'ENTR_COMU'=>'', 'ENTR_CIUD'=>'', 'ENTREGAR'=>'', 'CENTRZADO'=>0, 'TRASPASO'=>0, 
							'VALE'=>0, 'FACTURAD'=>0, 'BODEGATR'=>0, 'VENTA'=>1, 'COMISION'=>0, 'IMPRESA'=>0, 'NOTAOBS'=>'', 
							'NOTAFACT'=>'', 'NDIASF'=>0, 'NUMEMPDO'=>1, 'NUMOTS'=>0, 'NUMCORR'=>$NUMCORR, 'FECHCONT'=>NULL, 'AFECTO'=>$TOTNETO, 
							'EXENTO'=>0, 'TOTIVA'=>$TOTIVA, 'IMP1'=>0, 'IMP2'=>0, 'TOTAL'=>$TOTAL, 'GASTO'=>0, 'DOCPAGO'=>0, 'SUCUR'=>1, 
							'SQVALEB_DE'=>0, 'SQVALEB_A'=>0, 'PROCESONUM'=>'', 'ATT'=>'', 'CODCOMIS'=>0, 'TIPOVTA'=>0, 
							'NUMFV'=>0, 'NUMCOT'=>0, 'DEBITO'=>0, 'FECHPAGO'=>NULL, 'DESCTO2'=>0, 'DESCTO3'=>0, 'DESCTO4'=>0, 
							'CARGO2'=>0, 'CARGO3'=>0, 'CARGO4'=>0, 'SUBTOTAL'=>0, 'PGNUMRECOR'=>0, 'TDOCNETEO'=>9, 'ABONO'=>0, 
							'PGITEM'=>0, 'CTA'=>1252, 'CC'=>0, 'GTO'=>0, 'DEBE'=>0, 'HABER'=>$TOTNETO, 'BANCO'=>'', 'CARTOLA'=>0, 'CARTOAÑO'=>0, 
							'DEBE1'=>0, 'HABER1'=>0, 'DEBE2'=>0, 'HABER2'=>0, 'OLD_CSL'=>0, 'CAJERO'=>0, 'TURNO'=>0, 'SINANALIS'=>0, 
							'STATUS'=>0, 'FLUJO'=>0, 'FECHFLUJO'=>NULL, 'JDD'=>0, 'KMLL'=>0, 'TIPODESP'=>0, 'EMITEPACK'=>0, 'BODEGA'=>1, 
							'LETSEQ'=>'', 'ESELECTR'=>0, 'E_ENVIADO'=>0, 'FPAGELE'=>'', 'MPAGELE'=>'', 'RAZONREF'=>'', 'REFELE'=>0	, 
							'OBRA'=>'', 'APPSTK'=>0, 'PRCONCESION'=>0, 'NUMORDENC'=>'', 'TOTAL2M'=>0, 'NROOCCODE'=>'', 'FCHOCCODE'=>NULL, 
							'NROHESCODE'=>'', 'FCHHESCODE'=>NULL, 'NROGDVCODE'=>'', 'FCHGDVCODE'=>NULL, 'COMPCLS1'=>0, 'COMPCLS2'=>0, 
							'COMPCLS3'=>0]);
	 
                     } catch (\Exception $e) {
                         $noDuplicado = false;
                         sleep(1);
                     }
                } 
                while ($noDuplicado == false);
            }
            else
            {
                // Actualiza NOTV_DB
                DB::table('DOCU_DB')
				->where('NUMREG', $NUMREG)
				->update(['FECHA'=>$FECHA, 'FECHAMODIF'=>$FECHAMODIF, 'GLOSACON'=>$GLOSACON]);
            }
			/* Borrar Detalle Venta */
            DB::table('DOCDE_DB')->where('NUMRECOR', '=', $NUMREG)->delete();

			/* Graba Detalle Venta */
			$ITEM           = 0;
            foreach($data['PRODUCTO_VENTA'] as $id=>$mp) 
			{
				$CANTIDAD   = $mp["CANTIDAD"];
                $PRECUNIT   = $mp["PRECUNIT"];
				$NCODART    = $mp["NREGUIST"];
				$SALDO      = 0;

                $ITEM      ++;

                /* Lee Artículo */
				$ART_DB    = DB::table('ART_DB')->where('NREGUIST', $NCODART)->select(DB::raw('Max(NOMBRE) NOMBRE'))->first();
                /* Nombre Producto */    
				$NOMBRE    = $ART_DB->NOMBRE;

                /* Nombre Secuencia */    
				$SEQNVDET  = 0;

				$LOTE          = $mp["LOT_IDE"];

				/* Inserta Detalle de Venta */
				DB::table('DOCDE_DB')->insert(['NUMRECOR'=>$NUMREG, 'NCODART'=>$NCODART, 'DESCRIP'=>$NOMBRE, 'CANTIDAD'=>$CANTIDAD, 
				'PRECUNIT'=>$PRECUNIT, 'BODEGA'=>1, 'DESCTO'=>0, 'NSERIE'=>'', 'CTACTBLE'=>993, 'CENCOSTO'=>0, 'ITEM'=>$ITEM, 
				'FACTSI'=>0, 'COMIS'=>0, 'SQNVDET'=>0, 'SQGDDET'=>0, 'SQOCDET'=>0, 'PRODUCCN'=>0, 'LIQDDO'=>'', 'NUMOT'=>0, 
				'TJ_STKAC'=> $PRECUNIT, 'TJ_VALPR'=> $PRECUNIT, 'TJ_SORT'=>1, 'TJ_SUBSORT'=> 1, 'TJ_COSTEAR'=>0, 
				'FACTORIMP'=>1, 'TJ_MTOAC'=>0, 'TAX'=>0, 'NRO_ROL'=>0, 'LOT_IDE'=>$LOTE, 'VENCE'=>NULL, 'TJ_OM'=>0, 'TIP_TAX'=>0, 
				'TIPOOP'=>0, 'JDD'=>0, 'PREC_CMBIO'=>'', 'PREC_LISTA'=>0, 'TIME_DET'=>'', 'TSTK_LOT'=>0, 'CAMPO_D1'=>NULL, 
				'CAMPO_D2'=>NULL, 'MERMA'=>0, 'numfv12'=>0, 'LETSEQ'=>'', 'SQOTDET'=>0, 'CANTOTFAC'=>0, 'SQFBDET'=>0, 'despcant'=>0, 
				'ingcant'=>0, 'sqvivs'=>0, 'ciclogv'=>'', 'tj_precunit'=>$PRECUNIT, 'CANTIRECEP'=>0, 'SEQDEPENDE'=>0, 'SQPKNV'=>0, 
				'GTO1'=>0, 'CICLOGV2'=>'', 'SQDETVGO'=>0, 'VSGDOT'=>0, 'NNUMFV'=>0, 'SQGTRDET'=>0, 'FEPPUN'=>0, 'NROITEMREFCODE'=>'', 
				'ID_PRODUCTO'=>0, 'TJ_PRECUNIT2'=>$PRECUNIT, 'TJ_VALPR2'=>$PRECUNIT, 'TJ_MTOAC2'=>$PRECUNIT]);

				$TOTNETO       = ROUND(($TOTNETO + ($CANTIDAD * $PRECUNIT)), 1);
				$ITEM          = $ITEM + 1;

            }

			/* Actualiza Nro de Lote Detalle de Venta */
			$IVA             = 19;			
			$TOTIVA          = round((($TOTNETO * $IVA) / 100), 1);
			$TOTAL           = ($TOTNETO + $TOTIVA);

			// Actualiza Modificar
            DB::table('DOCU_DB')
			->where('NUMREG', $NUMREG)
			->update(['TOTNETO'=>$TOTNETO, 'IVA'=>$IVA, 'AFECTO'=>$TOTNETO, 'TOTIVA'=>$TOTIVA, 'TOTAL'=>$TOTAL, 'HABER'=>$TOTNETO]);				

			/* Calcula Saldo de la materia prima recepcionada */
			DB::statement('exec spProcesaStock');

			/* Retorna mensaje */
			$message  = ['content' => 'Se ha grabado, exitosamente', 'type' => 'success'];
			$response = ['status'  => 200, 'message' => $message];
		}

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

	/**
	 * Obtiene listado de ordenes de compra
	 * @return mixed
	 */
	public function select_oc() {
		$query = Input::get('q', '');
		$oc = DB::table('vCabeceraOrdenCompras')
			->join('vDetalleOrdenCompras', 'vCabeceraOrdenCompras.NUMREG', '=', 'vDetalleOrdenCompras.NUMRECOR')
			->where('NUMOC', 'LIKE', "%$query%")
			->groupBy('NUMREG', 'NUMOC')
			->having(DB::raw('SUM(vDetalleOrdenCompras.CANTIDAD)-SUM(vDetalleOrdenCompras.CANTRECI)'), '>', 0)
			->select(DB::raw('NUMREG as id, NUMOC as text'))
			->paginate(10);
		return $oc;
	}

	public function obtener_factura($id) {

        /* Lee Cabecera */
		$cabecera = DB::table('vNotasVentas')
			->where('NUMREG', $id)
			->select(DB::raw('NUMREG, NUMNOTA, CONVERT(VARCHAR, FECHA, 103) FECHA, RUTFACT, RAZSOC, ISNULL(DCTOPJE, 0) DCTOPJE, NUMORDC, CONVERT(INT, TOTNETO) TOTNETO'))
			->first();

        /* Campos */    
        $NUMREG  = $cabecera->NUMREG;
        $NUMNOTA = $cabecera->NUMNOTA;

        /* Lee Detalle */
		$detalle = DB::table('vNotasVentasDetalle')
			->where('NUMRECOR', $NUMREG)
			->select(DB::raw('ID, NROLIN, NCODART, CODIGO, DESCRIP, CONVERT(INT, CANTIDAD) CANTIDAD, CONVERT(INT, PRECUNIT) PRECUNIT, DESCTO, CONVERT(INT, (CANTIDAD  * PRECUNIT)) SUBTOTAL'))
			->get();

		$result = [
			'cabecera' => $cabecera,
			'detalle'  => $detalle
		];
		DB::statement('exec spProcesaStock');
		
		return Response::json($result, 200);
	}

	public function autonumerar($TipDocID) {
		$numero = DB::table('TabFol')
			->where('TipDocID', $TipDocID)
			->select(DB::raw('NroDocID'))
			->get();
		$result = [
			'numero' => $numero
		];

		return Response::json($result, 200);
	}

	/**
	 * Obtiene listado de envases
	 * @return mixed
	 */
	public function ProductosSelect() 
	{
		$query = Input::get('q', '');
		$productos = DB::table('ART_DB as M1')
    		->join('PRODUCCION_PRODUCTOS_CAMPOS','PRODUCCION_PRODUCTOS_CAMPOS.nreguist','=','M1.nreguist')
			->where('eliminado', '=', "0")
			->where(function ($queryBuilder) use ($query) {
				$queryBuilder->where('nombre', 'like', '%' . $query . '%')
						   ->orWhere('codigo', 'like', '%' . $query . '%');
			})
			->select(DB::raw('M1.codigo as id, M1.nombre as text, M1.nreguist, M1.Valprom'))
			->paginate(10);
		return $productos;
	}

	/**
	 * Obtiene Tipo Doctos Referencias
	 * @return mixed
	 */
	public function TipDoctoRef() 
	{
		$query = Input::get('q', '');
		$productos = DB::table('TipDoctoRef as M1')
			->where('TIPODOCTOREFERENCIA', 'LIKE', "%$query%")
			->select(DB::raw('M1.ID as id, M1.TIPODOCTOREFERENCIA as text'))
			->paginate(10);
		return $productos;
	}

	/**
	 * Obtiene Tipo Referencias
	 * @return mixed
	 */
	public function TipoRef() 
	{
		$query = Input::get('q', '');
		$productos = DB::table('TipRef as M1')
			->where('TIPREF', 'LIKE', "%$query%")
			->select(DB::raw('M1.ID as id, M1.TIPREF as text'))
			->paginate(10);
		return $productos;
	}

	/**
	 * Obtiene listado de envases
	 * @return mixed
	 */
	public function select_clientes() 
	{
		$query = Input::get('q', '');
		$productos = DB::table('Clien_db as M1')
            ->where('RazSoc', 'LIKE', "%$query%", 'or', 'RUT', 'LIKE', "%$query%")

			->select(DB::raw('M1.nreguist id, M1.Razsoc as text, M1.Rut'))
			->paginate(10);
		return $productos;
	}

	public function llama_clientes() 
	{
		$query = Input::get('id', '');
		$productos = DB::table('CLIEN_DB as M1')
			->where('NREGUIST', '=', "$query")
			->select(DB::raw('M1.Rut, M1.RAZSOC, M1.CODVENDE'))
            ->get();
		return $productos;
	}

	/**
	 * Obtiene listado de precios
	 * @return mixed
	 */
	public function listaDePrecios() 
	{
		$CodProID = Input::get('CodProID', '');

		$lista = DB::table('ART_DB as L1')
			->where('CODIGO', '=', $CodProID)
			->select(DB::raw('Convert(Int, L1.VALPROM) as PreVen'))
            ->get();

     	if (empty($lista)) 
		{
            // Crea a nuevo Object stdClass Factura
            $lista[0]         = new stdClass;
            $lista[0]->PreVen = "0"; 
		}

		return $lista;
	}

	/**
	 * Obtiene Fechas de Servidor
	 * @return mixed
	 */
	public function fechaVencim() 
	{
		$CodVta   = Input::get('CodVta', '');

		$dias     = DB::table('ParVta')
			->where('CodVtaID', '=', DB::raw($CodVta))
			->select(DB::raw('Convert(Int, DiaVen) as DiaVen'))
            ->get();

     	if (empty($dias)) 
		{
            // Crea a nuevo Object stdClass Factura
            $dias[0]         = new stdClass;
            $dias[0]->DiaVen = "0"; 
		}

		return $dias;
	}

	public function chequeaInventario() 
	{
		$CODIGO          = Input::get('codigo', '');
		$CANTIDAD        = Input::get('cantidad', '');
		$ERROR_STOCK     = 0;
		
		$REGISTRO        = DB::table('ART_DB')
		->where('CODIGO', '=', $CODIGO)
		->select(DB::raw('MAX(NREGUIST) as NREGUIST'))
        ->get();

		$NREGUIST       = $REGISTRO[0]->NREGUIST; 

		/* DETALLE DE FORMULA */
		$FORMULAS       = DB::table('dbo.PRODUCCION_ENVASES')
		->where('NREGUIST_PROD', '=', DB::raw($NREGUIST))
		->select(DB::raw('NREGUIST_MPRI as NREGUIST_MP, CANTIDAD'))
		->get();

		foreach ($FORMULAS as $key2 => $lineaFormula) 
		{
			 $NREGUIST_MP  = $lineaFormula->NREGUIST_MP;
			 $CANTIDAD_ENV = $lineaFormula->CANTIDAD;

			 if ($NREGUIST_MP != 1013474)
			 {
                 /* Valida existencia de inventarios */
	    		 $STK_FISICO     = DB::table('STOCK_DB')
			     ->where('ARTICULO', '=', DB::raw($NREGUIST_MP))
			     ->select(DB::raw('SUM(CONVERT(REAL, STK_FISICO)) as STOCK'))
			     ->get();
			 
    			 if (empty($STK_FISICO)) 
	    		 {
    				 $STK_FISICO           = new stdClass;
    				 $STK_FISICO[0]->STOCK    = 0;
    			 }
    			 $STOCK                    = $STK_FISICO[0]->STOCK;
    			 if (($CANTIDAD * $CANTIDAD_ENV) > $STOCK)
    			 {
     				 $ERROR_STOCK          = 1;
    			 }
			 }	 
		}
	
		return $ERROR_STOCK;
	}

	/**
	 * Elimina fórmula de base de datos
	 * @return mixed
	 */
	public function eliminar() {
		$id = Input::get('id');

		/* Ve si puede o no borrar el ajsute */
		$DOCU_DB        = DB::table('DOCU_DB')
		->where('NUMREG',  '=', $id)
		->select(DB::raw('YEAR(FECHA) as ANNO, MONTH(FECHA) as MES'))
		->get();
		$YEAR        = $DOCU_DB[0]->ANNO; 
		$MES         = $DOCU_DB[0]->MES; 

		/* Ve si puede o no borrar el ajsute */
		$REGISTRO        = DB::table('COMP_DB')
		->whereYear('COFECHA',  '=', $YEAR)
		->whereMonth('COFECHA', '=', $MES)
		->where('COGLOSA', 'LIKE', '%Centz de Costos%')
		->select(DB::raw('COUNT(*) as CONTAR'))
		->get();
		
		$CONTAR        = $REGISTRO[0]->CONTAR; 

		$message = ['content' => 'El ajuste de salida fue eliminada.', 'type' => 'success'];
		$response = ['status' => 200, 'message' => $message];

		/* Valida si está cerrado el mes */
		if ($CONTAR == 0 || $CONTAR == null || $CONTAR == '')
		{
    		/* Borra transacciones */
	    	$result = DB::transaction(function() use ($id) {
		      	DB::table('DOCDE_DB')
			 	->where('NUMRECOR', $id)
				->delete();

		    	DB::table('DOCU_DB')
				->where('NUMREG', $id)
				->delete();
		    	return true;
			});
			if($result) {
				$message = ['content' => 'El ajuste de salida fue eliminada.', 'type' => 'success'];
				$response = ['status' => 200, 'message' => $message];
			} else {
				$message = ['content' => 'El ajuste de salida no pudo ser eliminada.', 'type' => 'error'];
				$response = ['status' => 409, 'message' => $message];
			}				
		}
		else
		{
			$message = ['content' => 'El ajuste de salida no pudo ser eliminada, por que el mes está cerrado.', 'type' => 'error'];
			$response = ['status' => 409, 'message' => $message];
		}

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

}