<?php
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Remisiones;
use App\Models\Traspasos;
use App\Models\Articulos;
use App\Models\Misc;
use App\Models\Facturacion;
use App\Models\CXC;
use App\Models\Caja;
use App\Http\Controllers\Libreria;
use TCPDF;
use App\Models\Precios;

class remisionesController extends Controller
{
    public function goTo(Request $request){
        $lib = new Libreria;        
        if (!$request->session()->has('usuario') || !$lib->validaSesion($request)) {
            return redirect()->route('login');
        }else{
            return view('pages.remisiones');
        }
    }

    public function getFolio(Request $request){
        $remisiones = new Remisiones;
        if ($request->session()->has('idusuario')) {
            $usuario = $request->session()->get('idusuario');
            $turno = $request->session()->get('idturno');
            $almacen = $request->almacen;
            $iddoc = $request->idDoc;
            $resp = $remisiones->getFolio($usuario,$turno,$iddoc,$almacen); //OBTENGO EL FOLIO DE REMISION
            //dd($resp);
            if(isset($resp[0])){
                $folio = $resp[0]->serie.'-'.$resp[0]->folio;
                $iddoc = $resp[0]->id_cat_tipodoc;
            }else {          
                $iddoc = 2;                                        //SI NO, OBTENGO FOLIO DE COTIZACIÓN
                $resp = $remisiones->getSerieFolio($usuario,$turno, $iddoc, $almacen); 
                if(isset($resp[0]))
                    $folio = $resp[0]->serie.'-'.$resp[0]->folio;
                else
                    $folio = 0;
                $iddoc = 4;
            }
            //dd($folio);
            return array($folio, $iddoc);
        }else{
            return array(0, 0);
        }
    }

    public function getAllArticulos(Request $request) {
        $remisiones = new Remisiones;
        $articulos = new Articulos;
        $misc = new Misc;
        $facturacion = new Facturacion;
        $preciosModelo = new Precios;
        $nameCarpeta = $request->session()->get('erp');
        $empresa = $facturacion->datosEmisor();
        $arr = array();
        $n = 0; 
        
        $resp = $remisiones->getAllArticulos($request->buscar,$request->almacen);
        foreach($resp as $row) {
            $row->descripcion = htmlspecialchars($row->descripcion, ENT_QUOTES, 'UTF-8'); //utf8_decode($row->descripcion);
            $row->descripcioncorta = htmlspecialchars($row->descripcioncorta, ENT_QUOTES, 'UTF-8');

            $costoProm = $articulos->getCostoPromArticulo($row->id);
            $row->costopromedio = $costoProm->costopromedio;
            $arr[$n] = $row;
            $precio = $row->precio;
            $precioF = $row->precio;

            $flagImagen = 0;
            if($row->codigoproveedor != '' && $flagImagen == 0){
                if (file_exists('../imagesprod/'.$nameCarpeta.'/'.$row->codigoproveedor.'.jpg')) {
                    $flagImagen = 1;
                    $arr[$n]->imagen = $row->codigoproveedor;
                }
            }

            if($row->codigo != '' && $flagImagen == 0) {
                $arrayName = explode('/', $row->codigo);
                $nameImagen = $arrayName[0];
                $concat = '_slash_';
                for ($j=1; $j < count($arrayName); $j++) { 
                    $nameImagen = $nameImagen.$concat.$arrayName[$j];
                }
                if (file_exists('../imagesprod/'.$nameCarpeta.'/'.$nameImagen.'.jpg')) {
                    $flagImagen = 1;
                    $arr[$n]->imagen = $nameImagen;
                }
            }

            if($flagImagen == 0) {
                $arr[$n]->imagen = "sinimagen";
            }  


            $in = array();
            //Validamos si tiene configurado que precios ver el almacen
            $preciosA = $misc->getPreciosEntidad('almacen',$request->almacen);
            $in = $preciosA;
            //Validamos si tiene configurado que precios ver el vendedor
            $preciosV = $misc->getPreciosEntidad('vendedor',$request->idvendedor);
            //return $request->idvendedor;
            if(count((array)$preciosV)>0)
                $in = $preciosV;
            //Validamos si tiene configurado que precios ver el cliente
            $preciosC = $misc->getPreciosEntidad('cliente',$request->idcliente);
            if(count((array)$preciosC)>0)
                $in = $preciosC;
            //dd($request);
            $precios = $misc->getPreciosArticulo($row->id,$in,'PUE');
            $itt = 0;
            foreach($precios as $precc){
                if($itt == 0){                    
                    $precio = $precc->precio;
                    $precioF = $precc->precio;
                }
                $itt++;
            }
            
            // //Checamos lista de precios del almacen
            // $preciosAlmacen = $articulos->listaPrecioAlmacen($request->almacen,$row->id);
            // if(isset($preciosAlmacen[0]))
            //     $precio = $this->getPrecio($preciosAlmacen[0],$precioF);
                
            // //Checamos lista de precios del cliente
            // $preciosCliente = $articulos->listaPrecioCliente($request->idcliente,$row->id);
            // if(isset($preciosCliente[0]))
            //     $precio = $this->getPrecio($preciosCliente[0],$precioF);
            $interesesextra = (Object)[
                'intereses'=>0
            ];
            //LISTAS DE PRECIOS; PRIMERO OBTENEMOS LAS LISTAS QUE ESTÁN VIGENTES
            $listasPreciosVigentes = $preciosModelo->getListaPreciosArticulos('activas');
            //dd($listasPreciosVigentes);
            $filtroSeleccionado;
            $listaAlmacen = null;
            //dd($request, $listasPreciosVigentes);
            foreach($listasPreciosVigentes as $item) {
                //REVISO SI EL ARTICULO BUSCADO TIENE UNA LISTA DE PRECIO
                if($item->id_tpv_articulo==$row->id){
                    //SI TIENE, SE REVISA QUE TENGA VINCULADO EL ALMACEN SELECCIONADO
                    $listaAlmacen = $preciosModelo->listaAlmacen($item->id, $request->almacen);
                    //dd($listaAlmacen, "ARTICULO", $item);
                    
                } else if($item->id_tpv_proveedor==$row->id_tpv_proveedor){ 
                    //REVISO SI EL PROVEEDOR DEL ARTICULO TIENE UNA LISTA DE PRECIO, SI TIENE, SE REVISA QUE TENGA VINCULADO EL ALMACEN SELECCIONADO
                    $listaAlmacen = $preciosModelo->listaAlmacen($item->id, $request->almacen);
                    //dd($listaAlmacen, "PROVEEDOR");
                    
                } else if($item->id_tpv_articulomarca==$row->id_tpv_articulomarca){ 
                    //REVISO SI LA MARCA DEL ARTICULO TIENE UNA LISTA DE PRECIO, SI TIENE, SE REVISA QUE TENGA VINCULADO EL ALMACEN SELECCIONADO
                    $listaAlmacen = $preciosModelo->listaAlmacen($item->id, $request->almacen);
                    //dd($listaAlmacen, "MARCA");
                
                } else if($item->id_tpv_articuloclasificacion==$row->id_tpv_articuloclasificacion){ 
                    //REVISO SI LA CLASIFICACION DEL ARTICULO TIENE UNA LISTA DE PRECIO, SI TIENE, SE REVISA QUE TENGA VINCULADO EL ALMACEN SELECCIONADO
                    $listaAlmacen = $preciosModelo->listaAlmacen($item->id, $request->almacen);
                    //dd($listaAlmacen, "CLASIFICACION");
                
                } 
                //dd($listaAlmacen);
                //SI NO PASA EN NINGUNA DE LAS ANTERIORES, SE BUSCA SI EL CLIENTE TIENE UNA LISTA DE PRECIOS Y LA SUCURSAL SELECCINOADA
                $listaCliente = $preciosModelo->listaCliente($request->idcliente, $request->almacen, date("Y-m-d"));
                //dd($listaCliente, $request->idcliente, $request->almacen);
                if(isset($listaCliente)) {
                    $filtroSeleccionado = $listaCliente;
                } else {
                    $listaVendedor = $preciosModelo->listaVendedor($request->idvendedor, $request->almacen, date("Y-m-d"));
                    //dd($listaVendedor);
                    if(isset($listaVendedor)) {
                        $filtroSeleccionado = $listaVendedor;
                    } else {
                        //dd(isset($listaAlmacen), $listaAlmacen);
                        if(isset($listaAlmacen) && ($listaAlmacen->id_tpv_cliente==$request->idcliente || $listaAlmacen->id_tpv_vendedor==$request->idvendedor)) {
                            $filtroSeleccionado = $listaAlmacen;
                        } else {
                            $filtroSeleccionado = null;
                        }
                    }
                }
            }
            //dd($filtroSeleccionado);
            if(isset($filtroSeleccionado)) {//SE ENCONTRO UNA LISTA DE PRECIO
                if($filtroSeleccionado->interesfijo>0)
                    $interesesextra->intereses = $filtroSeleccionado->interesfijo;
                else {
                    $interesesextra->intereses = 0;
                    $precio = $filtroSeleccionado->preciofijo;
                }
            }

            if($precio>$precioF)
                $precioF = $precio;

            if($interesesextra->intereses>0){
                if($empresa->id_cat_tipocosto==1){
                    $precio = $row->costopromedio * (1+($interesesextra->intereses/100));
                    $precioF = $row->costopromedio * (1+($interesesextra->intereses/100));
                }
                if($empresa->id_cat_tipocosto==2){
                    $precio = $row->costoactual * (1+($interesesextra->intereses/100));
                    $precioF = $row->costoactual * (1+($interesesextra->intereses/100));
                }
            }

            $precioxe = $precio * (1 +$row->impuesto);
            $numero = explode('.',number_format($precioxe,2,'.',''));
            $arr[$n]->marca = strtoupper($arr[$n]->marca);
            $arr[$n]->enteros = $numero[0];
            $arr[$n]->decimales = $numero[1];
            $arr[$n]->precio = $precio * (1 +$row->impuesto);
            $arr[$n]->precioR = $precioF * (1 +$row->impuesto);
            $arr[$n]->impuestomonto = $precio * ($row->impuesto);
            $arr[$n]->impuestotasa = $row->impuesto;
            $arr[$n]->impuestoid = $row->idimpuesto;
            $arr[$n]->descuentoR = number_format($precioF - $precio,2,'.','');
            $arr[$n]->nameCarpeta = $nameCarpeta;
            
            if($precioF>0)
                $arr[$n]->descuento = number_format((($precioF - floatval($precio))/$precioF)*100,0,'','');
            else
                $arr[$n]->descuento = number_format(0,0,'','');
            $n++;
        }

        return json_encode($arr);
    }

    public function validaMetodoPago(Request $request, $metodopago) {
        $remisiones = new Remisiones;
        $usuario = $request->session()->get('idusuario');
        $validaMetodoPago = $remisiones->validaMetodoPago($metodopago, $usuario);
        return $validaMetodoPago;
    }

    public function agregaProducto(Request $request){
        
        $remisiones = new Remisiones;
        $articulos = new Articulos;
        $seriefolio = explode('-',$request->folio);
        $usuario = $request->session()->get('idusuario');
        $turno = $request->session()->get('idturno');
        //dd($request->idarticuloalmacen, $request->almacen);
        if($request->tipodoc == 4 && $request->idarticuloalmacen != null) {
            $idarticuloalmacen = $articulos->getArticuloAlmacen($request->almacen, $request->idarticuloalmacen);
            //dd($idarticuloalmacen);
            if(isset($idarticuloalmacen)) {
                $request->idarticuloalmacen = $idarticuloalmacen->id;
            } else {
                return 'REM06 :: No existe el articulo en el almacen seleccionado';
            }  
        }
        //dd($request->tipodoc);
        if($request->tipodoc != 0){
            $exist = $remisiones->nuevoPedido($seriefolio[0],$seriefolio[1],$usuario,$turno);
            if(count($exist)==0){
                //Inserta cabeceras y producto
                $idremision = $remisiones->creaPedido($request->cliente,$usuario,$request->almacen,$request->vendedor,$turno,$seriefolio[0],$seriefolio[1],$request->tipodoc,$request->seriearticulo);
                if($idremision>0){
                    //dd($idremision,$request->vendedor,$request->idarticuloalmacen,$request->cantidad,$request->precioR,$request->precio,$request->descuento,$request->idprecio,$request->impuestoid,$request->impuestomonto,$request->tipodoc,$request->isService,$usuario,$turno,$request->codigo,$request->descripcion);
                    if($remisiones->agregaProducto($idremision,$request->vendedor,$request->idarticuloalmacen,$request->costopromedio,$request->cantidad,$request->precioR,$request->precio,$request->descuento,$request->idprecio,$request->impuestoid,$request->impuestomonto,$request->tipodoc,$request->isService,$usuario,$turno,$request->codigo,$request->descripcion)>0)
                        return 1;
                    else
                        return 'REM02 :: Error al agregar producto despues de crear remision';
                }else{
                    if($idremision==-99){
                        return 'Se detecto otra ventana usando Remisiones. Cierre las ventanas y actualice esta pagina.';
                    }else{
                        return 'Error al crear el pedido. Consulte con el administrador del sistema';
                    }
                }
            }else{
                //dd("ENTRA");
                if($exist[0]->status == 0 || $exist[0]->status == 4 || $exist[0]->status == 13){
                    //Inserta solo el producto
                    $idremision = $exist[0]->id;
                    //dd($idremision,$request->vendedor,$request->idarticuloalmacen,$request->cantidad,$request->precioR,$request->precio,$request->descuento,$request->idprecio,$request->impuestoid,$request->impuestomonto,$request->tipodoc,$request->isService,$usuario,$turno,$request->codigo,$request->descripcion);
                    $isAgrega = $remisiones->agregaProducto($idremision,$request->vendedor,$request->idarticuloalmacen,$request->costopromedio,$request->cantidad,$request->precioR,$request->precio,$request->descuento,$request->idprecio,$request->impuestoid,$request->impuestomonto,$request->tipodoc,$request->isService,$usuario,$turno,$request->codigo,$request->descripcion);
                    //dd("isAgraga ".$isAgrega);
                    if($isAgrega>0){
                        $update = $remisiones->updateTotalesPedido($idremision);
                        if($update>0){
                            return 1;
                        } else
                            return 0;
                    } else
                        return 'REM03 :: Error al agregar producto al pedido';
                }else{
                    return 404;
                }

            }
        }else{
            if($remisiones->agregaProducto($request->idpedido,$request->vendedor,$request->idarticuloalmacen,$request->costopromedio,$request->cantidad,$request->precioR,$request->precio,$request->descuento,$request->idprecio,$request->impuestoid,$request->impuestomonto,$request->tipodoc,$request->isService,$usuario,$turno,$request->codigo,$request->descripcion)>0)
                return 1;
            else
                return 'REM03 :: Error al agregar producto';
        }
    }

    public function detalle(Request $request){
        //dd($request);
        $remisiones = new Remisiones;
        $seriefolio = explode('-',$request->folio);
        if ($request->session()->has('idusuario')) {
            $arr = array();
            $arr2 = array();
            $usuario = $request->session()->get('idusuario');
            $turno = $request->session()->get('idturno');
            $nameCarpeta = $request->session()->get('erp');
            $resp = $remisiones->getDetalle($usuario,$turno,$seriefolio[0],$seriefolio[1],$request->idalmacen,$request->idcliente,$request->idvendedor,$nameCarpeta);
            $n = 0;
            //dd($resp);
            foreach($resp as $row){
                $arr[$n] = $row;
                $flagImagen = 0;
                if($row->codigoproveedor != '' && $flagImagen == 0){
                    if (file_exists('../imagesprod/'.$nameCarpeta.'/'.$row->codigoproveedor.'.jpg')) {
                        $flagImagen = 1;
                        $arr[$n]->imagen = $row->codigoproveedor;
                    }
                }

                if($row->codigo != '' && $flagImagen == 0) {
                    $arrayName = explode('/', $row->codigo);
                    $nameImagen = $arrayName[0];
                    $concat = '_slash_';
                    for ($j=1; $j < count($arrayName); $j++) { 
                        $nameImagen = $nameImagen.$concat.$arrayName[$j];
                    }
                    if (file_exists('../imagesprod/'.$nameCarpeta.'/'.$nameImagen.'.jpg')) {
                        $flagImagen = 1;
                        $arr[$n]->imagen = $nameImagen;
                    }
                }

                if($flagImagen == 0) {
                    $arr[$n]->imagen = "sinimagen";
                }
                // if($row->codigoproveedor != '')
                //     $arr[$n]->imagen = $row->codigoproveedor;
                // else {
                    // $arrayName = explode('/', $row->codigo);
                    // $nameImagen = $arrayName[0];
                    // $concat = '_slash_';
                    // for ($j=1; $j < count($arrayName); $j++) { 
                    //    $nameImagen = $nameImagen.$concat.$arrayName[$j];
                    // }
                    // $arr[$n]->imagen = $nameImagen;
                //}
                $numero = explode('.',$row->precio);            
                $arr[$n]->precioFormat = '$ '.number_format(($arr[$n]->precio + $arr[$n]->impuesto),2,'.',',');
                $arr[$n]->descuentoFormat = '$ '.number_format($arr[$n]->descuento,2,'.',',');
                $arr[$n]->importeFormat = '$ '.number_format($arr[$n]->total,2,'.',',');
                $arr[$n]->nameCarpeta = $nameCarpeta;
                $n++;
            }
            $resp2 = $remisiones->getDetalleSinArticulo($usuario,$turno,$seriefolio[0],$seriefolio[1],$request->idalmacen,$request->idcliente,$request->idvendedor);
            $n2 = 0;
            //dd($resp);
            foreach($resp2 as $row2){
                $arr2[$n2] = $row2;
                $arr2[$n2]->imagen = 'sinimagen';
                $numero2 = explode('.',$row2->precio);            
                $arr2[$n2]->precioFormat = '$ '.number_format(($arr2[$n2]->precio),2,'.',',');
                $arr2[$n2]->descuentoFormat = '$ '.number_format($arr2[$n2]->descuento,2,'.',',');
                $arr2[$n2]->importeFormat = '$ '.number_format($arr2[$n2]->total,2,'.',',');
                $arr2[$n2]->nameCarpeta = $nameCarpeta;
                $n2++;
            }

            $arrayResult = array_merge($arr, $arr2);
            //dd($arrayResult);
            return json_encode($arrayResult);
        }else{
            return 0;
        }
    }

    public function quitaItem(Request $request){
        $remisiones = new Remisiones;
        $usuario = $request->session()->get('idusuario');
        $turno = $request->session()->get('idturno');
        $resp = $remisiones->quitaItem($request->idpedido,$request->idpedidodetalle,$request->idarticulo,$request->cantidad,$request->tipodoc,$usuario,$turno);
        if($resp==1) {
            $update = $remisiones->updateTotalesPedido($request->idpedido);
            if($update>0){
                return $resp;
            } else
                return 0;
        } else
            return $resp;
    }

    public function checkStatusPedido(Request $request){
        $remisiones = new Remisiones;
        $usuario = $request->session()->get('idusuario');
        $turno = $request->session()->get('idturno');
        $resp = $remisiones->checkStatusPedido($request->id);
        return $resp;
    }    

    public function editaItem(Request $request){
        $remisiones = new Remisiones;
        $usuario = $request->session()->get('idusuario');
        $turno = $request->session()->get('idturno');
        $resp = $remisiones->editaItem($request->id,$request->precio,$request->cantidad,$request->descuento,$request->importe,$request->idarticuloalmacen,$request->idprecio,$request->isService,$request->tasaArticulo,$request->idimpuesto,$usuario,$turno);
        return $resp;
    }

    public function cancelar(Request $request){
        $remisiones = new Remisiones;
        $misc = new Misc;
        $caja = new Caja;
        $seriefolio = explode('-',$request->folio);
        $usuario = $request->session()->get('idusuario');
        $turno = $request->session()->get('idturno');  
        $dbnomina = $request->session()->get('dbnomina');
        $nameCarpeta = $request->session()->get('erp');
        $documento = $remisiones->getDocumento($request->id, $dbnomina);
        $arrResp = array('status'=>0,'response'=>'');
        if($request->id > 0 && count($documento)>0){
            $clave = $misc->getClaveOperacion(1, $documento[0]->id_tpv_almacen, $documento[0]->id_cat_tipodoc);
            //dd($clave);
            if(isset($clave)) {
                if($request->clave==$clave->clave) {
                    $cancelacion = $caja->cancelarDocumento($request->id, $request->motivo,$documento[0]->id_cat_tipodoc);
                    //dd($cancelacion);
                    if($cancelacion>0) {
                        $arrResp['status'] = $cancelacion;
                        $arrResp['response'] = 'La clave ingresa es correcta. El documento fue cancelado exitosamente';
                    } else {
                        $arrResp['response'] = 'El documento no pudo ser cancelado, si el problema persiste Si el problema persiste, comuniquese con el administrador del sistema..';
                    }
                } else {
                    $arrResp['response'] = 'La clave ingresa es incorrecta, vuelva a intentar.';
                }
            } else {
                $arrResp['response'] = 'No cuentas con los permisos necesarios para cancelar este documento. Si el problema persiste, comuniquese con el administrador del sistema.';
            }
            /*$exist2 = $remisiones->cancelaPedido($request->id);
            if($exist2)
                return 1;
            else
                return 'REMC01 :: Error al cancelar';*/
        } else {
            $exist = $remisiones->nuevoPedido($seriefolio[0],$seriefolio[1],$usuario,$turno);
            if(isset($exist[0])){            
                if($exist[0]->status == 0){
                    $exist2 = $remisiones->cancelaPedido($exist[0]->id,$exist[0]->status);
                    if($exist2)
                        return 1;
                    else
                        return 'REMC01 :: Error al cancelar';
                }else{
                    //Es cancelación de una remisión concluida
                    /*
                    1.- Validar que tenga los permisos para cancelar una remisión
                    2.- Validar que el periodo en la que esté contablemente no esté cerrado
                    3.- Validar si es cancelable o no (Campo cancelable)
                    3.1.- SI es cancelable. Valida si está cobrada
                    3.1.1.- SI está cobrada. Validar que no esté facturada
                    3.1.1.1.- SI esta facturada. Mandar el mensaje que está facturada y ¿desea mandar solicitud de cancelacion?
                    3.1.1.1.1.- SI manda solicitud de cancelación. Cambia el status de la remisión y manda mensaje al usuario de caja de esa sucursal de ese turno
                    3.1.1.1.2.- Si el usuario de caja cancela (PROCESO DE CANCELACION DE FACTURA), la remisión debe pasar automáticamente a cancelada
                    3.1.1.1.3.- Se genera el movimiento contable de cancelación/devolución
                    3.1.1.1.4.- Se regresan los articulos al almacén
                    3.1.1.1.5.- Se genera una nota de crédito físcal
                    3.1.1.2.- NO esta facturada. ¿desea mandar solicitud de cancelacion?
                    3.1.1.2.1.- SI manda solicitud de cancelación. Cambia el status de la remisión y manda mensaje al usuario de caja de esa sucursal de ese turno
                    3.1.1.2.2.- Si el usuario de caja cancela, la remisión debe pasar automáticamente a cancelada
                    3.1.1.2.3.- Se genera el movimiento contable de cancelación/devolución
                    3.1.1.2.4.- Se regresan los articulos al almacén
                    3.1.1.2.5.- Se genera una nota de crédito físcal
                    3.1.2.- NO está cobrada.
                    3.1.2.1.- Cambia el status de la remisión.
                    3.1.2.2.- Se regresan los articulos al almacén
                    3.2.- NO es cancelable. Manda el mensaje de la razón por la que no es cancelable                
                    */
                }
            }else{
                return 0;
            }
        }
        return json_encode($arrResp);
    }
    public function guardar(Request $request){
        //dd($request);
        $remisiones = new Remisiones;
        $misc = new Misc;
        $lib = new Libreria;
        $arrResp = array('status'=>0,'response'=>'');
        $seriefolio = explode('-',$request->folio);
        $usuario = $request->session()->get('idusuario');
        $turno = $request->session()->get('idturno'); 
        
        if($request->fecpromesa != null || $request->fecpromesa != '')
            $request->fecpromesa = $lib->fechaFormat($request->fecpromesa,'H2M');
        
        //dd($request->id > 0);
        if($request->id > 0){
            $resp = $remisiones->getSerieFolio($usuario,$turno,$request->tipoDocumento,$request->almacen);
            //dd($resp[0]);
            if(isset($resp[0])){                
                $pedido = $remisiones->creaPedidoCotizacion($request->id,$request->cliente,$usuario,$request->almacen,$request->vendedor,$turno,$resp[0]->serie,$resp[0]->folio,$request->seriearticulo);
                //dd($pedido);
                if($pedido>0){
                    $exist = $remisiones->nuevoPedido($resp[0]->serie,$resp[0]->folio,$usuario,$turno);
                    //dd($exist[0]);
                    if(isset($exist[0])){ 
                        //dd($exist);           
                        if($exist[0]->status == 0){
                            $exist2 = $remisiones->guardaPedido($exist[0]->id,$request->almacen,$usuario,$turno,$request->subtotal,$request->descuento,$request->iva,$request->total,$request->observaciones,$request->metodopago,$request->formapago,$request->numpagos,$request->modalidadpago,$request->fecpromesa,$request->tipoDocumento,$request->vlinea,$request->vmodelo,$request->vcolor,$request->anticipo,$request);
                            //dd($exist2);
                            if($exist2==1){
                                //$kardex = $misc->registraMovKardex($exist[0]->id, 'tpv_pedido'); 
                                if($request->tipoDocumento == 13) {
                                    $formapagoanticipo = $remisiones->guardapagoanticipo($request, $exist[0]->id);
                                    if($formapagoanticipo) {
                                        $arrResp['status'] = 1;
                                        $arrResp['response'] = $exist[0]->id;
                                        return json_encode($arrResp);
                                    } else {
                                        $arrResp['status'] = 0;
                                        $arrResp['response'] = 'REMG05 :: No se guardaron correctamente las formas de pago del anticipo del cliente';
                                        return json_encode($arrResp);
                                    }
                                } else {
                                    //dd($exist[0]->id);
                                    $arrResp['status'] = 1;
                                    $arrResp['response'] = $exist[0]->id;
                                    return json_encode($arrResp);
                                }
                            }else{
                                if(is_array($exist2)){
                                    $codigos = '';
                                    foreach($exist2 as $code){
                                        $codigos.= $code.', ';
                                    }
                                    $codigos = substr($codigos,0,-2);
                                    $arrResp['status'] = 0;
                                    $arrResp['response'] = 'Los productos con codigo: '.$codigos.'. Ya no tienen existencia suficiente para realizar el pedido';
                                    return json_encode($arrResp);
                                }else{
                                    $arrResp['status'] = 0;
                                    $arrResp['response'] = $exist2;
                                    return json_encode($arrResp);
                                }
                            }
                        }else{
                            $arrResp['status'] = 0;
                            $arrResp['response'] = 'REMG02 :: Error status';
                            return json_encode($arrResp);
                        }
                    }else{
                        $arrResp['status'] = 0;
                        $arrResp['response'] = 'REMG02 :: Error obteniendo el ID del documento';
                        return json_encode($arrResp);
                    }
                }else{                    
                    if($pedido==-99){
                        $arrResp['status'] = 0;
                        $arrResp['response'] = 'Se detecto otra ventana usando Remisiones. Cierre las ventanas y actualice esta pagina.';
                        return json_encode($arrResp);
                    }else{
                        $arrResp['status'] = 0;
                        $arrResp['response'] = 'Error al crear el pedido. Consulte con el administrador del sistema';
                        return json_encode($arrResp);
                    }
                }
            }else{
                $arrResp['status'] = 0;
                $arrResp['response'] = 'REMG01 :: Error obteniendo el Folio';
                return json_encode($arrResp);
            }
        } else{
            //dd($seriefolio[0],$seriefolio[1],$usuario,$turno);
            $exist = $remisiones->nuevoPedido($seriefolio[0],$seriefolio[1],$usuario,$turno);
            //dd(isset($exist[0]));
            if(isset($exist[0])){          
                if($exist[0]->status == 0){
                    //dd($exist[0]->id,$request->almacen,$usuario,$turno,$request->subtotal,$request->descuento,$request->iva,$request->total,$request->observaciones,$request->metodopago,$request->tipoDocumento,$request->vmodelo,$request->vcolor,$request->anticipo,$request);
                    $exist2 = $remisiones->guardaPedido($exist[0]->id,$request->almacen,$usuario,$turno,$request->subtotal,$request->descuento,$request->iva,$request->total,$request->observaciones,$request->metodopago,$request->formapago,$request->numpagos,$request->modalidadpago,$request->fecpromesa,$request->tipoDocumento,$request->vlinea,$request->vmodelo,$request->vcolor,$request->anticipo,$request);
                    //$kardex = $misc->registraMovKardex($exist[0]->id, 'tpv_pedidodetalle', 'id_tpv_pedido', $request->almacen,$usuario,$turno); 
                    if($exist2>0){
                        //dd($request->tipoDocumento == 13);
                        if($request->tipoDocumento == 13) {
                            //dd($exist[0]->id);
                            $formapagoanticipo = $remisiones->guardapagoanticipo($request, $exist[0]->id);
                            //dd($formapagoanticipo);
                            if($formapagoanticipo) {
                                $arrResp['status'] = 1;
                                $arrResp['response'] = $exist[0]->id;
                                return json_encode($arrResp);
                            } else {
                                $arrResp['status'] = 0;
                                $arrResp['response'] = 'REMG05 :: No se guardaron correctamente las formas de pago del anticipo del cliente';
                                return json_encode($arrResp);
                            }
                        } else {
                            $arrResp['status'] = 1;
                            $arrResp['response'] = $exist[0]->id;
                            return json_encode($arrResp);
                        }
                    }else{
                        if(is_array($exist2)){
                            $codigos = '';
                            foreach($exist2 as $code){
                                $codigos.= $code.', ';
                            }
                            $codigos = substr($codigos,0,-2);
                            $arrResp['status'] = 0;
                            $arrResp['response'] = 'Los productos con codigo: '.$codigos.'. Ya no tienen existencia suficiente para realizar el pedido';
                            return json_encode($arrResp);
                        }else{
                            //dd("ENTRA");
                            $arrResp['status'] = 0;
                            $arrResp['response'] = $exist2;
                            return json_encode($arrResp);
                        }
                    }
                }else{
                    $arrResp['status'] = 0;
                    $arrResp['response'] = 'REMG02 :: Error obteniendo el ID del documento';
                    return json_encode($arrResp);
                }
            }else{
                $arrResp['status'] = 404;
                $arrResp['response'] = 'REMG02 :: Error obteniendo el ID del documento';
                return json_encode($arrResp);
            }
        }
    }

    // public function guardar(Request $request){
    //     //dd($request);
    //     $remisiones = new Remisiones;
    //     $misc = new Misc;
    //     $lib = new Libreria;
    //     $arrResp = array('status'=>0,'response'=>'');
    //     $seriefolio = explode('-',$request->folio);
    //     $usuario = $request->session()->get('idusuario');
    //     $turno = $request->session()->get('idturno'); 
        
    //     if($request->fecpromesa != null || $request->fecpromesa != '')
    //         $request->fecpromesa = $lib->fechaFormat($request->fecpromesa,'H2M');
        
    //     //dd($request->id > 0);
    //     if($request->id > 0){
    //         $resp = $remisiones->getSerieFolio($usuario,$turno,$request->tipoDocumento,$request->almacen);
    //         //dd($resp[0]);
    //         if(isset($resp[0])){
    //             $exist2 = $remisiones->guardaPedido(0,$request->almacen,$usuario,$turno,$request->subtotal,$request->descuento,$request->iva,$request->total,$request->observaciones,$request->metodopago,$request->formapago,$request->numpagos,$request->modalidadpago,$request->fecpromesa,$request->tipoDocumento,$request->vlinea,$request->vmodelo,$request->vcolor,$request->anticipo,$request,$resp[0]->serie,$resp[0]->folio);
    //             //dd($exist2);
    //             if(!is_array($exist2)){
    //                 if($exist2>0){
    //                     //$kardex = $misc->registraMovKardex($exist[0]->id, 'tpv_pedido'); 
    //                     if($request->tipoDocumento == 13) {
    //                         $formapagoanticipo = $remisiones->guardapagoanticipo($request, $exist2);
    //                         if($formapagoanticipo) {
    //                             $arrResp['status'] = 1;
    //                             $arrResp['response'] = $exist2;
    //                             return json_encode($arrResp);
    //                         } else {
    //                             $arrResp['status'] = 0;
    //                             $arrResp['response'] = 'REMG05 :: No se guardaron correctamente las formas de pago del anticipo del cliente';
    //                             return json_encode($arrResp);
    //                         }
    //                     } else {
    //                         //dd($exist[0]->id);
    //                         $arrResp['status'] = 1;
    //                         $arrResp['response'] = $exist2;
    //                         return json_encode($arrResp);
    //                     }
    //                 }else{
    //                     $arrResp['status'] = 0;
    //                     $arrResp['response'] = $exist2;
    //                     return json_encode($arrResp);
    //                 }
    //             }else{
    //                 $codigos = '';
    //                 foreach($exist2 as $code => $cantidad){
    //                     $codigos.= $code.':'.$cantidad.', ';
    //                 }
    //                 $codigos = substr($codigos,0,-2);
    //                 $arrResp['status'] = 0;
    //                 $arrResp['response'] = 'Los productos con codigo: '.$codigos.'. Ya no tienen existencia suficiente para realizar el pedido';
    //                 return json_encode($arrResp);
    //             }
    //         }else{
    //             $arrResp['status'] = 0;
    //             $arrResp['response'] = 'REMG01 :: Error obteniendo el Folio';
    //             return json_encode($arrResp);
    //         }
    //     } else{
    //         //dd($seriefolio[0],$seriefolio[1],$usuario,$turno);
    //         $exist = $remisiones->nuevoPedido($seriefolio[0],$seriefolio[1],$usuario,$turno);
    //         //dd(isset($exist[0]));
    //         if(isset($exist[0])){          
    //             if($exist[0]->status == 0){
    //                 //dd($exist[0]->id,$request->almacen,$usuario,$turno,$request->subtotal,$request->descuento,$request->iva,$request->total,$request->observaciones,$request->metodopago,$request->tipoDocumento,$request->vmodelo,$request->vcolor,$request->anticipo,$request);
    //                 $exist2 = $remisiones->guardaPedido($exist[0]->id,$request->almacen,$usuario,$turno,$request->subtotal,$request->descuento,$request->iva,$request->total,$request->observaciones,$request->metodopago,$request->formapago,$request->numpagos,$request->modalidadpago,$request->fecpromesa,$request->tipoDocumento,$request->vlinea,$request->vmodelo,$request->vcolor,$request->anticipo,$request,0,0);
    //                 //$kardex = $misc->registraMovKardex($exist[0]->id, 'tpv_pedidodetalle', 'id_tpv_pedido', $request->almacen,$usuario,$turno); 
    //                 if($exist2>0){
    //                     //dd($request->tipoDocumento == 13);
    //                     if($request->tipoDocumento == 13) {
    //                         //dd($exist[0]->id);
    //                         $formapagoanticipo = $remisiones->guardapagoanticipo($request, $exist[0]->id);
    //                         //dd($formapagoanticipo);
    //                         if($formapagoanticipo) {
    //                             $arrResp['status'] = 1;
    //                             $arrResp['response'] = $exist[0]->id;
    //                             return json_encode($arrResp);
    //                         } else {
    //                             $arrResp['status'] = 0;
    //                             $arrResp['response'] = 'REMG05 :: No se guardaron correctamente las formas de pago del anticipo del cliente';
    //                             return json_encode($arrResp);
    //                         }
    //                     } else {
    //                         $arrResp['status'] = 1;
    //                         $arrResp['response'] = $exist[0]->id;
    //                         return json_encode($arrResp);
    //                     }
    //                 }else{
    //                     if(is_array($exist2)){
    //                         $codigos = '';
    //                         foreach($exist2 as $code => $cant){
    //                             $codigos.= $code.':'.$cant.', ';
    //                         }
    //                         $codigos = substr($codigos,0,-2);
    //                         $arrResp['status'] = 0;
    //                         $arrResp['response'] = 'Los productos con codigo: '.$codigos.'. Ya no tienen existencia suficiente para realizar el pedido';
    //                         return json_encode($arrResp);
    //                     }else{
    //                         //dd("ENTRA");
    //                         $arrResp['status'] = 0;
    //                         $arrResp['response'] = $exist2;
    //                         return json_encode($arrResp);
    //                     }
    //                 }
    //             }else{

    //             }
    //         }else{
    //             $arrResp['status'] = 0;
    //             $arrResp['response'] = 'REMG02 :: Error obteniendo el ID del documento';
    //             return json_encode($arrResp);
    //         }
    //     }
    // }

    public function guardarCotizacion(Request $request){
        $remisiones = new Remisiones;
        $seriefolio = explode('-', $request->folio);
        $usuario = $request->session()->get('idusuario');
        $turno = $request->session()->get('idturno');  

        $isRemision = $request->tipoDocumento;
        if($isRemision == 1) {
            $request->tipoDocumento = 4;
        }
        //dd($request->tipoDocumento, $isRemision);
              
        $exist = $remisiones->nuevoPedido($seriefolio[0],$seriefolio[1],$usuario,$turno);
        if(isset($exist[0])){          
            if($exist[0]->status==4){
                return $exist[0]->id;
            }else{
                $serfol = $remisiones->getSerieFolio($usuario,$turno, 2, $request->almacen);
                if(isset($serfol[0])){
                    $newserie = $serfol[0]->serie;
                    $newfolio = $serfol[0]->folio;
                    $exist2 = $remisiones->guardaCotizacion($exist[0]->id,$request->almacen,$newserie,$newfolio,$usuario,$turno,$request->subtotal,$request->descuento,$request->iva,$request->total,$request->observaciones,$request->metodopago,$request->tipoDocumento,$isRemision,$request->seriearticulo);
                    if($exist2)
                        return $exist[0]->id;
                    else
                        return 'Detalle al guardar la cotización. Si el error persiste, contacta a soporte de T.I.';
                } else {
                    return 'No existe un folio de cotización para este usuario del almacén seleccionado';
                }
            }
        }else{
            return 'Detalle al crear el pedido de cotización. Si el error persiste, contacta a soporte de T.I.';
        }
    }

    public function generaTicket($idPedido, $tipodoc, Request $request){
        $remisiones = new Remisiones;
        $libreria = new Libreria;  
        $usuario = $request->session()->get('idusuario');
        $dbnomina = $request->session()->get('dbnomina');
        setlocale(LC_ALL, 'es_MX');
        $pdf = new TCPDF("P","mm",array(152,800));
        $pdf->SetPrintHeader(false);
        $pdf->SetMargins(1, 1, 1);
 
        //Get Generales
        $cabecera = $remisiones->ticketCabecera($idPedido,$tipodoc);
        $texto = $remisiones->ticketTexto($idPedido,$tipodoc);

        if($tipodoc!=13 && $tipodoc!=14) {
            $remision = $remisiones->ticketRemision($idPedido,$tipodoc,$dbnomina);
            $formapago = $remisiones->ticketFormaPago($idPedido,$tipodoc);
        } else {
            $remision = $remisiones->ticketApartado($idPedido,$tipodoc,$dbnomina);
            $formapago = $remisiones->ticketFormaPago($idPedido,$tipodoc);
        }
        //dd($cabecera, $texto, $remision, $formapago);
        $pagos = [];
        if($remision[0]->metodopago == 'PPD'){
            $texto[0]->tipodoc = $texto[0]->tipodoc." a credito";
            $cxc = new CXC;
            $pagos = $cxc->getDoctosRemision($remision[0]->id_tpv_cliente,$remision[0]->id);
            foreach($pagos as $pago) {
                $pago->fecfija = $libreria->fechaFormat($pago->fecfija,'M2H');
            }
        } else if($remision[0]->metodopago == 'PUE')
            $texto[0]->tipodoc = $texto[0]->tipodoc." de contado";
       
        //dd($remision, $formapago,$texto,$cabecera,$pagos);
        if($tipodoc!=13 && $tipodoc!=14) {  //AQUI ENTRAN REMISIONES DE CONTADO NORMAL Y CREDITO
            $numerosletras = $libreria->num2letras($remision[0]->total);
            $data = array('pagos'=>$pagos,'cabecera'=>$cabecera[0],'texto'=>$texto[0],'remision'=>$remision,'formapago'=>$formapago,'numerosletras'=>$numerosletras,'tipodoc'=>$tipodoc);
            $template = \View::make("formatos.pedidoticket", $data);
        } else if(($remision[0]->isAnticipo == 1 && $remision[0]->isLiquidacion == 0) || ($remision[0]->fechaLiquidacion != null && $remision[0]->isLiquidacion == 1)){
            $numerosletras = $libreria->num2letras($remision[0]->anticipo);
            if($tipodoc==14)
                $numerosletras = $libreria->num2letras($remision[0]->total);
            $data = array('cabecera'=>$cabecera[0],'texto'=>$texto[0],'remision'=>$remision,'formapago'=>$formapago,'numerosletras'=>$numerosletras,'tipodoc'=>$tipodoc);
            $template = \View::make("formatos.pedidoticket", $data);
        } else{
            $numerosletras = $libreria->num2letras($remision[0]->anticipo);
            $data = array('cabecera'=>$cabecera[0],'texto'=>$texto[0],'remision'=>$remision,'formapago'=>$formapago,'numerosletras'=>$numerosletras,'usuario'=>$usuario,'tipodoc'=>$tipodoc);
            $template = \View::make("formatos.movimientocaja", $data);
        }      
        
        $html = $template->render();
        $pdf->SetTitle("Remision Ticket");
        $pdf->AddPage();
        $pdf->writeHTML($html , true, false, true, false, '');


        // Genera el archivo PDF en memoria
        $pdfData = $pdf->Output('example.pdf', 'S');
        return response($pdfData, 200, [
            'Content-Type' => 'application/pdf',
            'Content-Disposition' => 'attachment; filename="example.pdf"',
            'Content-Length' => strlen($pdfData)
        ]);
    }    

    public function imprimirTicketCotizacionCredito($idPedido, Request $request){
        $remisiones = new Remisiones;
        $libreria = new Libreria;  
        $usuario = $request->session()->get('idusuario');
        $dbnomina = $request->session()->get('dbnomina');
        setlocale(LC_ALL, 'es_MX');
        $pdf = new TCPDF("P","mm",array(152,800));
        $pdf->SetPrintHeader(false);
        $pdf->SetMargins(1, 1, 1);
 
        //Get Generales
        $cabecera = $remisiones->ticketCabeceraCotizacionCredito($idPedido,4);
        $texto = $remisiones->ticketTextoCotizacionCredito($idPedido,4);
        $remision = $remisiones->ticketRemisionCotizacionCredito($idPedido,4,$dbnomina);
        
        //dd($cabecera, $texto, $remision);
        $pagos = [];
        if($remision[0]->metodopago == 'PPD'){
            $texto[0]->tipodoc = $texto[0]->tipodoc." a credito";
            $pagos = $remisiones->getPagosCotizacionCredito($remision[0]->id);
        }
        foreach($pagos as $pago) {
            $pago->fecfija = $libreria->fechaFormat($pago->fecfija,'M2H');
        }
        //dd($cabecera, $texto, $remision, $pagos);

        $numerosletras = $libreria->num2letras($remision[0]->total);
        $data = array('pagos'=>$pagos,'cabecera'=>$cabecera[0],'texto'=>$texto[0],'remision'=>$remision,'formapago'=>[],'numerosletras'=>$numerosletras,'tipodoc'=>4);
        $template = \View::make("formatos.pedidoticket", $data);
        
        
        $html = $template->render();
        $pdf->SetTitle("Remision Ticket");
        $pdf->AddPage();
        $pdf->writeHTML($html , true, false, true, false, '');


        // Genera el archivo PDF en memoria
        $pdfData = $pdf->Output('example.pdf', 'S');
        return response($pdfData, 200, [
            'Content-Type' => 'application/pdf',
            'Content-Disposition' => 'attachment; filename="example.pdf"',
            'Content-Length' => strlen($pdfData)
        ]);
    }    

    public function getDocumentos(Request $request){
        $remisiones = new Remisiones;
        $lib = new Libreria;
        $request->fecha==''?$fecha=date('d/m/Y'):$fecha=$request->fecha;
        $fecha = $lib->fechaFormat($fecha,'H2M');
        $request->fechafin = $lib->fechaFormat($request->fechafin,'H2M');
        $usuario = $request->session()->get('idusuario');
        $turno = $request->session()->get('idturno');     
        $dbnomina = $request->session()->get('dbnomina');
        
        $request->cliente==''?$cliente='%':$cliente=$request->cliente;
        if($request->sucursal == 0) {
            $almacenes = $lib->getAlmacenesUsuario($request); 
        } else {
            $almacenes = [$request->sucursal];
        }
        $exist = $remisiones->getDocumentos($fecha,$cliente,$almacenes,$dbnomina,$request->fechafin,$request->articulo);
        if(isset($exist[0])){  
            $array = array();
            foreach($exist as $row){
                //Metemos cabecera
                $array[$row->id]['id'] = $row->id;
                $array[$row->id]['tipodoc'] = $row->tipodoc;
                $array[$row->id]['status'] = $row->status;
                $array[$row->id]['isAnticipo'] = $row->isAnticipo;
                $array[$row->id]['isLiquidacion'] = $row->isLiquidacion;
                $array[$row->id]['fechaLiquidacion'] = $row->fechaLiquidacion;
                $array[$row->id]['seriefolio'] = $row->serie.'-'.$row->folio;
                $array[$row->id]['id_tpv_cliente'] = $row->id_tpv_cliente;
                $array[$row->id]['cliente'] = $row->cliente;
                $array[$row->id]['id_tpv_usuario'] = $row->id_tpv_usuario;
                $array[$row->id]['usuario'] = $row->usuario;
                $array[$row->id]['status'] = $row->status;
                $array[$row->id]['id_tpv_almacen'] = $row->id_tpv_almacen;
                $array[$row->id]['almacen'] = $row->almacen;
                $array[$row->id]['id_tpv_vendedor'] = $row->id_tpv_vendedor;
                $array[$row->id]['vendedor'] = $row->vendedor;
                $array[$row->id]['id_tpv_turno'] = $row->id_tpv_turno;
                $array[$row->id]['turno'] = $row->turno;
                $array[$row->id]['metodopago'] = $row->metodopago;
                $array[$row->id]['fecha'] = date('d/m/Y',strtotime($row->fecha));
                $array[$row->id]['hora'] = $row->hora;
                $array[$row->id]['subtotal'] = $row->subtotal;
                $array[$row->id]['descuento'] = $row->descuento;
                $array[$row->id]['iva'] = $row->iva;
                $array[$row->id]['total'] = $row->total;
                $array[$row->id]['observaciones'] = $row->observaciones;
                $array[$row->id]['id_cat_tipodoc'] = $row->id_cat_tipodoc;
                $array[$row->id]['factura'] = $row->seriefactura."".$row->foliofactura;
                //Metemos detalle
                $array[$row->id]['detalle'][] = $row;
            }
            $col = array_column( $array, "id" );
            array_multisort( $col, SORT_DESC, $array );
            return json_encode($array);
        }else{
            return 0;
        }
    }    

    public function getDocumento(Request $request){
        $remisiones = new Remisiones;
        $dbnomina = $request->session()->get('dbnomina');
        $nameCarpeta = $request->session()->get('erp');
        $exist = $remisiones->getDocumento($request->id,$dbnomina);
        //return $fecha.','.$usuario.','.$turno;
        //dd($exist);
        if(isset($exist[0])){  
            $array = array();
            foreach($exist as $idx => $row){
                //Metemos cabecera
                $array[$row->id]['id'] = $row->id;
                $array[$row->id]['tipodoc'] = $row->tipodoc;
                $array[$row->id]['status'] = $row->status;
                $array[$row->id]['isAnticipo'] = $row->isAnticipo;
                $array[$row->id]['anticipo'] = $row->anticipo;
                $array[$row->id]['seriefolio'] = $row->serie.'-'.$row->folio;
                $array[$row->id]['id_tpv_cliente'] = $row->id_tpv_cliente;
                $array[$row->id]['cliente'] = $row->cliente;
                $array[$row->id]['id_tpv_usuario'] = $row->id_tpv_usuario;
                $array[$row->id]['usuario'] = $row->usuario;
                $array[$row->id]['status'] = $row->status;
                $array[$row->id]['id_tpv_almacen'] = $row->id_tpv_almacen;
                $array[$row->id]['almacen'] = $row->almacen;
                $array[$row->id]['id_tpv_vendedor'] = $row->id_tpv_vendedor;
                $array[$row->id]['vendedor'] = $row->vendedor;
                $array[$row->id]['seriearticulo'] = $row->seriearticulo;
                $array[$row->id]['id_tpv_turno'] = $row->id_tpv_turno;
                $array[$row->id]['turno'] = $row->turno;
                $array[$row->id]['metodopago'] = $row->metodopago;
                $array[$row->id]['id_con_cxcformaspago'] = $row->id_con_cxcformaspago;
                $array[$row->id]['cxcformaspago'] = $row->cxcformaspago;
                $array[$row->id]['fecha'] = date('d/m/Y',strtotime($row->fecha));
                $array[$row->id]['hora'] = $row->hora;
                $array[$row->id]['subtotal'] = $row->subtotal;
                $array[$row->id]['descuento'] = $row->descuento;
                $array[$row->id]['iva'] = $row->iva;
                $array[$row->id]['total'] = $row->total;
                $array[$row->id]['observaciones'] = $row->observaciones;
                $array[$row->id]['nameCarpeta'] = $nameCarpeta;
                //Metemos detalle
                $array[$row->id]['detalle'][$idx] = $row;                
                $array[$row->id]['detalle'][$idx]->nameCarpeta = $nameCarpeta;
                if($row->existenciaactual >= $row->cantidad){
                    // $result = $remisiones->afectaExistencia($row->idarticuloalmacen,$row->cantidad);
                    // if($result>0)
                    
                        $array[$row->id]['detalle'][$idx]->disponible = 1;
                    // else
                    //     $array[$row->id]['detalle'][$idx]->disponible = 0;
                }else{
                    $array[$row->id]['detalle'][$idx]->disponible = 0;
                }
                //////////////////////////////////////
                $flagImagen = 0;
                if($row->codigoproveedor != '' && $flagImagen == 0){
                    if (file_exists('../imagesprod/'.$nameCarpeta.'/'.$row->codigoproveedor.'.jpg')) {
                        $flagImagen = 1;
                        $array[$row->id]['detalle'][$idx]->imagen = $row->codigoproveedor;
                    }
                }

                if($row->codigo != '' && $flagImagen == 0) {
                    $arrayName = explode('/', $row->codigo);
                    $nameImagen = $arrayName[0];
                    $concat = '_slash_';
                    for ($j=1; $j < count($arrayName); $j++) { 
                        $nameImagen = $nameImagen.$concat.$arrayName[$j];
                    }
                    if (file_exists('../imagesprod/'.$nameCarpeta.'/'.$nameImagen.'.jpg')) {
                        $flagImagen = 1;
                        $array[$row->id]['detalle'][$idx]->imagen = $nameImagen;
                    }
                }

                if($flagImagen == 0) {
                    $array[$row->id]['detalle'][$idx]->imagen = "sinimagen";
                }
                // if($row->codigoproveedor != '')
                //     $array[$row->id]['detalle'][$idx]->imagen = $row->codigoproveedor;
                // else {
                    // $arrayName = explode('/', $row->codigo);
                    // $nameImagen = $arrayName[0];
                    // $concat = '_slash_';
                    // for ($j=1; $j < count($arrayName); $j++) { 
                    //    $nameImagen = $nameImagen.$concat.$arrayName[$j];
                    // }
                    // $array[$row->id]['detalle'][$idx]->imagen = $nameImagen;
                //}
            }
            $col = array_column( $array, "id" );
            array_multisort( $col, SORT_DESC, $array );
            return json_encode($array[0]);
        }else{
            return 0;
        }
    }

    public function solicitarTraspaso(Request $request) {
        $remisiones = new Remisiones;
        $traspasos = new Traspasos;
        $data = $request->data;
        $resp = $remisiones->getSolicitudTraspasoAlmacen($data);
        //dd(isset($resp[0]));
        if($request->session()->has('idusuario')) {
            $usuario = $request->session()->get('idusuario');
            $turno = $request->session()->get('idturno');
            if(isset($resp[0]) == false) { //SI ES FALSO; SE CREA UN NUEVO FOLIO DE TRASPASO 
                //dd($usuario,$turno,$data);              
                $resp1 = $traspasos->getFolioTraspaso($usuario,$turno,$data['idAlmacen']);
                if(isset($resp1[0])){
                    $folio = $resp1[0]->serie.'-'.$resp1[0]->folio;
                    $data['folio'] = $folio;
                    $data['observaciones'] = 'SE SOLICITO UNA PETICION DE TRASPASO, PENDIENTE DE ACEPTAR PARA ENVIAR';
                    $data['statusSolicitado'] = 1;
                    $data['statusEnviado'] = 0;
                    $data['statusRecibido'] = 0;
                    $data['status'] = 1;
                    //dd($data);
                    $idTraspaso = $traspasos->creaTraspaso($data, $usuario);
                    //dd($idTraspaso);
                    if($idTraspaso>0){
                        $check = $remisiones->agregarArticuloSolicitudTraspaso($data, $usuario, $idTraspaso, $data['idAlmacen'], $turno);
                        //dd($check);
                        if($check>0)
                            return 1;
                        else
                            return 'TRA02 :: Error al agregar el articulo al crear el traspaso';
                    }else 
                        return 'TRA01 :: Error al crear el traspaso';
                } else 
                    return 'TRA03 :: No existe un folio de traspaso creado para este usuario, comunicate con el área de T.I.';
            }else { //SI ES TRUE, YA EXISTE UNA SOLICITUD DE TRASPASO, SOLO SE AGREGA A ESE FOLIO CREADO
                $exist = $remisiones->checkArticuloSolicitud($data);    //VERIFICA QUE EL ARTICULO A INGRESAR, NO EXISTA EN LAS SOLICITUDES HACIA ESE ALMACEN
                //dd(isset($exist[0]));
                if(isset($exist[0])) {  //SI EXISTE, SE SUMARA LA CANTIDAD A SOLICITAR
                    //dd($data);
                    $existArticulo = $remisiones->validarExistenciaStock($data);
                    $cantSumar = $data['cantidad']+$exist[0]->cantidad;
                    if($cantSumar<=$existArticulo->existencia) { //SI LA CANTIDAD A SOLICITAR ES MENOR A LA EXISTENCIA DEL STOCK DE ESE ALMACEN, PROCEDE
                        $update = $remisiones->updateArticuloSolicitudTraspaso($data, $usuario, $exist[0]->id, $cantSumar, $resp[0]->id);
                        if($update==1)
                            return 1;
                        else
                            return 'TRA05 :: No se actualizo la información del artículo a solicitar';
                    } else {
                        return 'TRA04 :: La cantidad a solicitar en el traspaso es mayor a la existencia (Ya existe una cantidad solicitada de este artículo)';
                    }
                } else { //SI NO EXISTE ESE ARTICULO, SE CREARÁ UNO NUEVO PARA ESA SOLICITUD DE TRASPASO YA EXISTENTE
                    //dd($resp[0]->id);
                    $agregar = $remisiones->agregarArticuloSolicitudTraspaso($data, $usuario, $resp[0]->id, $data['idAlmacen'], $turno);
                    //dd($agregar);
                    if($agregar>0)
                        return 1;
                    else
                        return 'TRA06 :: Error al agregar el artículo al traspaso solicitado ya existente';
                }
            }
        }
        //return json_encode($array[0]);
    }

    public function getSerieFolioApartado(Request $request) {
        $remisiones = new Remisiones;
        $usuario = $request->session()->get('idusuario');
        $turno = $request->session()->get('idturno');
        $getFolio = $remisiones->getSerieFolio($usuario, $turno, 13, $request->idAlmacen);
        if(count($getFolio)>0) {
            return json_encode($getFolio[0]);
        } else {
            return 0;
        }
    }

    public function getAnticipoMinimo(){
        $remisiones = new Remisiones;
        $resp = $remisiones->getAnticipoMinimo();
        return json_encode(floatval($resp->monto));
    }

    /*public function guardarAnticipo(Request $request) {
        $remisiones = new Remisiones;
        $usuario = $request->session()->get('idusuario');
        $turno = $request->session()->get('idturno');
        $getFolio = $remisiones->getSerieFolio($usuario, $turno, 12, $request->idalmacen);
        if(count($getFolio)>0) {
            $resp = $remisiones->guardarAnticipo($request->idPedidoAnticipo, $usuario, $turno, $request->idalmacen, $request->total, $request->idTipoDoc, $getFolio[0]->serie, $getFolio[0]->folio);
            return json_encode($resp);
        } else {
            return 'El usuario no cuenta con un folio para anticipos. Si el problema persiste, comunicate con T.I.';
        }
    }*/
    
    public function validaExistenciaLiquidacion($idPedido) {
        //dd($idPedido);
        $remisiones = new Remisiones;
        $getExistencias = $remisiones->validaExistenciaLiquidacion($idPedido);
        return json_encode($getExistencias);
    }

    public function liquidarAnticipo(Request $request,$idpedido,$idalmacen) {
        $remisiones = new Remisiones;
        $usuario = $request->session()->get('idusuario');
        $turno = $request->session()->get('idturno');
        $liquidacion = $remisiones->liquidarAnticipo($idpedido,$usuario,$turno,$idalmacen);
        return json_encode($liquidacion);
    }

    public function validaEngancheCliente(Request $request) {
        //dd($request);
        $remisiones = new Remisiones;
        $folio = explode("-", $request->folio);
        $validaenganche = $remisiones->validaEngancheCliente($request->cliente, $request->enganche, $request->total, $folio[0], $folio[1]);
        return json_encode($validaenganche);
    }

    public function getMinimoEnganche(Request $request) {
        //dd($request);
        $remisiones = new Remisiones;
        $enganche = $remisiones->getMinimoEnganche($request->idcliente,$request->total,$request->idPedido,$request->folio,$request->modalidadpago);
        return $enganche;
    }

    public function getInfoPPD(Request $request) {        
        $lib = new Libreria;
        $remisiones = new Remisiones;
        $arr = array('numpagos'=>0,
                     'enganche'=>0,
                     'financiado'=>0,
                     'montopago'=>0);
        $plazo = $remisiones->getPlazo($request->plazo);
        if(!isset($plazo->exhibiciones))
            return $plazo;
        $formapago = $remisiones->getFormaPago($request->formapago);
        //dd($formapago, $plazo);
        if(!isset($formapago->dias))
            return $request->formapago;
        $dias = $lib->dateDif(date('Y-m-d'),date('Y-m-d',strtotime(date('Y-m-d').'+'.$plazo->exhibiciones.' months'))); 
        if($formapago->meses==1)
            $pagos = $plazo->exhibiciones;
        else if($formapago->meses==0 && $formapago->dias==15)
            $pagos = $plazo->exhibiciones*2;
        else
            $pagos = ceil($dias / $formapago->dias);
        $arr['numpagos'] = number_format($pagos,0,'.',',');
        $arr['enganche'] = number_format($request->enganche,2,'.',',');
        //dd($request);
        $financiado = $request->total - $request->enganche;
        $arr['financiado'] = number_format($financiado,2,'.',',');
        $montopago = $financiado/$pagos;
        //dd($montopago);
        $arr['montopago'] = number_format(ceil($montopago * 100)/100,2,'.',',');
        $arr['dias'] = $formapago->dias;
        return json_encode($arr);
    }

    public function getPreciosPlazo(Request $request) {
        $dbnomina = $request->session()->get('dbnomina');
        $remisiones = new Remisiones;
        $facturacion = new Facturacion;
        $preciosModelo = new Precios;
        $misc = new Misc;
        $empresa = $facturacion->datosEmisor();
        $precios = $remisiones->getPreciosPlazo($request->folio, $request->plazo);
        $articulos = $precios[0];
        $minimoEnganche = $precios[1];

        foreach($articulos as $row) {
            $interesesextra = $misc->getIntereses("PPD",$request->plazo, $row->id_tpv_articulomarca, $row->id_sys_empresa);

            //LISTAS DE PRECIOS DE CREDITO; PRIMERO OBTENEMOS LAS LISTAS QUE ESTÁN VIGENTES
            $listasPreciosVigentes = $preciosModelo->getListaCredito('activas', $request->plazo, $dbnomina);
            //dd($listasPreciosVigentes);
            $filtroSeleccionado = null;
            $listaAlmacen = null;
            //dd($interesesextra, $listasPreciosVigentes);
            foreach($listasPreciosVigentes as $item) {
                //REVISO SI EL ARTICULO BUSCADO TIENE UNA LISTA DE PRECIO
                //dd($listasPreciosVigentes, $row);
                if($item->id_tpv_articulo==$row->idArticulo){
                    //SI TIENE, SE REVISA QUE TENGA VINCULADO EL ALMACEN SELECCIONADO
                    $listaAlmacen = $preciosModelo->listaCreditoAlmacen($item->id, $request->idalmacen);
                    //dd($listaAlmacen, "ARTICULO", $item, $item->id, $request);
                    
                } else if($item->id_tpv_proveedor==$row->id_tpv_proveedor){ 
                    //REVISO SI EL PROVEEDOR DEL ARTICULO TIENE UNA LISTA DE PRECIO, SI TIENE, SE REVISA QUE TENGA VINCULADO EL ALMACEN SELECCIONADO
                    $listaAlmacen = $preciosModelo->listaAlmacen($item->id, $request->idalmacen);
                    //dd($listaAlmacen, "PROVEEDOR");
                    
                } else if($item->id_tpv_articulomarca==$row->id_tpv_articulomarca && is_null($item->id_tpv_articulomarca) == is_null($row->id_tpv_articulomarca)){ 
                    //REVISO SI LA MARCA DEL ARTICULO TIENE UNA LISTA DE PRECIO, SI TIENE, SE REVISA QUE TENGA VINCULADO EL ALMACEN SELECCIONADO
                    $listaAlmacen = $preciosModelo->listaAlmacen($item->id, $request->idalmacen);
                    //dd($listaAlmacen, "MARCA");
                
                } else if($item->id_tpv_articuloclasificacion==$row->id_tpv_articuloclasificacion && is_null($item->id_tpv_articuloclasificacion) == is_null($row->id_tpv_articuloclasificacion)){ 
                    //REVISO SI LA CLASIFICACION DEL ARTICULO TIENE UNA LISTA DE PRECIO, SI TIENE, SE REVISA QUE TENGA VINCULADO EL ALMACEN SELECCIONADO
                    $validaClasifi = $articulos->getClasificacionPadre($item->id_tpv_articuloclasificacion, $row->id_tpv_articuloclasificacion);
                    if($validaClasifi==1)
                        $listaAlmacen = $preciosModelo->listaAlmacen($item->id, $request->idalmacen);
                    //dd($listaAlmacen, "CLASIFICACION");
                
                } 
                //dd($listaAlmacen);
                //SI NO PASA EN NINGUNA DE LAS ANTERIORES, SE BUSCA SI EL CLIENTE TIENE UNA LISTA DE PRECIOS Y LA SUCURSAL SELECCINOADA
                $listaCliente = $preciosModelo->listaCreditoCliente($request->idcliente, $request->idalmacen, date("Y-m-d"),$item->id_con_cxcformaspago);
                //dd($listaCliente, "AQUI", isset($listaCliente));
                if(isset($listaCliente)) {
                    if(isset($listaAlmacen)) {
                        if($listaAlmacen->fecharegistro > $listaCliente->fecharegistro)
                            $filtroSeleccionado = $listaAlmacen;
                        else
                            $filtroSeleccionado = $listaCliente;
                    } else
                        $filtroSeleccionado = $listaCliente;
                } else {
                    $listaVendedor = $preciosModelo->listaCreditoVendedor($request->idvendedor, $request->idalmacen, date("Y-m-d"));
                    if(isset($listaVendedor)) {
                        if(isset($listaAlmacen)) {
                            if($listaAlmacen->fecharegistro > $listaVendedor->fecharegistro)
                                $filtroSeleccionado = $listaAlmacen;
                            else
                                $filtroSeleccionado = $listaVendedor;
                        } else
                            $filtroSeleccionado = $listaVendedor;
                    } else {
                        //dd(isset($listaAlmacen), $listaAlmacen);
                        if(isset($listaAlmacen) && ($listaAlmacen->id_tpv_cliente==$request->idcliente || $listaAlmacen->id_tpv_vendedor==$request->idvendedor)) {
                            $filtroSeleccionado = $listaAlmacen;
                        } else if(isset($listaAlmacen) && ($listaAlmacen->id_tpv_cliente==null || $listaAlmacen->id_tpv_vendedor==null)) {
                            //dd($listaAlmacen->id_tpv_cliente, $listaAlmacen->id_tpv_vendedor, $listaAlmacen, $item);
                            $filtroSeleccionado = $listaAlmacen;
                        }  else {
                            $filtroSeleccionado = null;
                        }
                    }
                }
            }

            if(isset($filtroSeleccionado)) {//SE ENCONTRO UNA LISTA DE PRECIO DE CREDITO
                if($filtroSeleccionado->interesnuevo>0)
                    $interesesextra->intereses = $filtroSeleccionado->interesnuevo;
                else {
                    //dd("ENTRA", $filtroSeleccionado);
                    $interesesextra->intereses = 0;
                    $precio = $filtroSeleccionado->preciofijo;
                }
            } else {
                if($interesesextra == null)
                    return [0, json_encode("El articulo a simular no cuenta con el plazo seleccionado. Seleccione los plazos disponibles.")];
                else {
                    if($interesesextra->interesnuevo==0)
                        $interesesextra->intereses = $interesesextra->interesfijo;
                    else
                        $interesesextra->intereses = $interesesextra->interesnuevo;
                    $precio = $interesesextra->preciofijo;
                }
            }

            if($interesesextra->intereses>0){
                if($empresa->id_cat_tipocosto==1){
                    $precio = $row->costopromedio * (1+($interesesextra->intereses/100));
                    $precioF = $row->costopromedio * (1+($interesesextra->intereses/100));
                }
                if($empresa->id_cat_tipocosto==2){
                    $precio = $row->costoactual * (1+($interesesextra->intereses/100));
                    $precioF = $row->costoactual * (1+($interesesextra->intereses/100));
                }
            }

            $row->precio = number_format($precio*(1 +$row->impuesto),2,'.','');
            $row->subtotal = number_format($row->precio*$row->cantidad,2,'.','');
            $row->total = number_format($row->subtotal-$row->descuento,2,'.','');
            $row->minimoenganche = $minimoEnganche;
        }
        //dd($articulos);
        return [1, json_encode($articulos)];
    }

    public function saveCotizacionCredito(Request $request) {
        $remisiones = new Remisiones;
        $lib = new Libreria;
        $request->fechainicio = $lib->fechaFormat($request->fechainicio,'H2M');
        $usuario = $request->session()->get('idusuario');
        $turno = $request->session()->get('idturno');
        $articulos = json_decode($request->arrayArticulos,true);
        $financiamiento = json_decode($request->arrayFinanciamiento,true);
        $idCotizacion = $remisiones->saveCotizacionCredito($usuario, $turno, $request->folio, $request->idalmacen, $request->idcliente, $request->idvendedor,
                                    $request->fechainicio, $request->numpagos, $request->formapago, $request->plazo, $request->enganche,
                                    $request->subtotal, $request->iva, $request->descuento, $request->total, $financiamiento, $articulos);
        return json_encode($idCotizacion);
    }

    public function getVendedorUsuario(Request $request) {
        $remisiones = new Remisiones;
        $usuario = $request->session()->get('idusuario');
        $turno = $request->session()->get('idturno');
        $dbnomina = $request->session()->get('dbnomina');
        $getVendedor = $remisiones->getVendedorUsuario($usuario, $turno, $dbnomina);
        return json_encode($getVendedor);
    }

    public function getMarcaArticulo(Request $request) {
        $remisiones = new Remisiones;
        $resp = $remisiones->getMarcas($request->text, $request->avanzado);
        return json_encode($resp);
    }
}