<?php

namespace App\Models;
use App\Http\Controllers\Libreria;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\Storage;

class Remisiones
{
    public function __construct() {
        $selectedDatabase = Session::get('selected_database', 'mysql');
        Config::set('database.default', $selectedDatabase);
    }

    public function insertlog($texto){
        //DB::beginTransaction();   
        $texto = date('Y-m-d').'-'.date('H:i:s').' > '.$texto.chr(13).chr(10);
        $xml_out_file = fopen($_SERVER['DOCUMENT_ROOT']."/naercriserp/log.txt", "w+");
        fwrite($xml_out_file, $texto);
        fclose($xml_out_file); 
    }

    public function getFolio($usuario,$turno,$iddoc,$almacen){
        DB::beginTransaction();   
        
        //$this->insertlog('Si entra a la funcion con usuario:'.$usuario.', turno:'.$turno);  
            //ELIMINA LOS ARTICULOS QUE FUERON AGREGADOS ANTES DE LIQUIDAR Y NO SE CONCLUYO EL PROCESO
        $artiAgregados = DB::table('tpv_pedidodetalle')
                            ->select(DB::raw('tpv_pedidodetalle.*,tpv_articulo.isService as isService'))
                            ->join('tpv_pedido','tpv_pedidodetalle.id_tpv_pedido','=','tpv_pedido.id')
                            ->join('tpv_articuloalmacen','tpv_pedidodetalle.id_tpv_articuloalmacen','=','tpv_articuloalmacen.id')
                            ->join('tpv_articulo','tpv_articuloalmacen.id_tpv_articulo','=','tpv_articulo.id')
                            ->where('tpv_pedido.isAnticipo','=',1)
                            ->where('tpv_pedido.id_cat_tipodoc', 13)
                            ->where('tpv_pedidodetalle.agregadoLiquidacion', 1)
                            ->where('tpv_pedido.isLiquidacion', 0)
                            ->get();
                            //dd($artiAgregados);
        foreach($artiAgregados as $item){
            if($item->isService!=1){
                $increment = DB::table('tpv_articuloalmacen')
                                ->where('id','=',$item->id_tpv_articuloalmacen)
                                ->increment('enproceso',$item->cantidad);
            }
            //dd($increment);
            if($increment>0) {
                $delete = DB::table('tpv_pedidodetalle')
                            ->where('id','=',$item->id)
                            ->delete();
                if($delete>0) {
                    //DB::commit();
                } else {
                    DB::rollBack();
                    return false;
                }
            } else {
                DB::rollBack();
                return false;
            }
        }

        $detalle = DB::table('tpv_pedido')
                    ->where('id_sys_usuario','=',$usuario)
                    ->where('id_tpv_turno','=',$turno)
                    ->where('status','=',0)
                    ->get();
        //dd($detalle);  
        //$this->insertlog('Si entra a la funcion con usuario:'.$usuario.', turno:'.$turno);  
        if(isset($detalle[0])){
            foreach($detalle as $det){  
                //$this->insertlog('Entra al forech '.json_encode($det));
                $detalle2 = DB::table('tpv_pedidodetalle')
                                ->select(DB::raw('tpv_pedidodetalle.*,tpv_articulo.isService as isService'))
                                ->join('tpv_articuloalmacen','tpv_pedidodetalle.id_tpv_articuloalmacen','=','tpv_articuloalmacen.id')
                                ->join('tpv_articulo','tpv_articuloalmacen.id_tpv_articulo','=','tpv_articulo.id')
                                ->where('id_tpv_pedido','=',$det->id)
                                ->get();
                foreach($detalle2 as $det2){                    
                    //$this->insertlog('Entra al forech 2 '.json_encode($det2));
                    //dd($det->id_cat_tipodoc != 13 && $det->id_cat_tipodoc != 4);
                    if($det->id_cat_tipodoc != 13 && $det->id_cat_tipodoc != 4) { //SI ES DIFERENTE A UN ANTICIPO, SE INCREMENTARA ENPROCESO
                        if($det2->isService!=1){
                            DB::table('tpv_articuloalmacen')
                                    ->where('id','=',$det2->id_tpv_articuloalmacen)
                                    ->increment('enproceso',$det2->cantidad);
                        }
                    } else {
                        DB::table('tpv_articuloapartado')
                            ->where('id_tpv_pedidodetalle','=',$det2->id)
                            ->delete();
                    }
                    DB::table('tpv_pedidodetalleimpuesto')
                        ->where('id_tpv_pedidodetalle','=',$det2->id)
                        ->delete();
                }
                DB::table('tpv_pedidodetalle')
                        ->where('id_tpv_pedido','=',$det->id)
                        ->delete();
            }
            $delpedido = DB::table('tpv_pedido')
                        ->where('id_sys_usuario','=',$usuario)
                        ->where('id_tpv_turno','=',$turno)
                        ->where('status','=',0)
                        ->delete();

            if($delpedido>0){
                DB::commit();
            }else{
                DB::rollBack();
                return false;
            }
        }
        
        //dd($usuario,$turno,$iddoc,$almacen);
        $result = DB::table('tpv_folio')
                    ->select(DB::raw('tpv_folio.*, cat_tipodoc.id as id_cat_tipodoc'))
                    ->join('cat_tipodoc', 'tpv_folio.id_cat_operacion', '=', 'cat_tipodoc.id_cat_operacion')
                    ->where('tpv_folio.id_sys_usuario','=',$usuario)
                    ->where('tpv_folio.id_tpv_turno','=',$turno)
                    ->where('cat_tipodoc.id','=', $iddoc)
                    ->where('tpv_folio.id_tpv_almacen', $almacen)
                    ->where('tpv_folio.status','=',1)
                    ->get();

        return $result;
    }
    
    public function getSerieFolio($usuario,$turno,$operacion,$almacen){        
        //dd($operacion);
        //EL DOC 4 QUE ES COTIZACION EN CAT_TIPODOC, SE CONVIERTE EN 2 PARA CAT_OPERACION
        if($operacion==4)
            $operacion=1;
        $result = DB::table('tpv_folio')
                    ->where('id_sys_usuario','=',$usuario)
                    ->where('id_tpv_turno','=',$turno)
                    ->where('id_cat_operacion','=',$operacion)
                    ->where('id_tpv_almacen','=',$almacen)
                    ->where('status','=',1)
                    ->get();
                    
        return $result;
    }

    public function getAllArticulos($buscar,$almacen) {
        //dd($almacen);
        $buscar = $buscar!==null?$buscar:'';
        $result = DB::table('tpv_articulo')
                    ->select(DB::raw("tpv_articulo.id,
                                 tpv_articulo.codigo,
                                 tpv_articulo.codigoproveedor,
                                 tpv_articulo.id_tpv_proveedor,
                                 tpv_articulo.descripcion,
                                 tpv_articulo.descripcioncorta,
                                 tpv_articulo.isService as isService,
                                 tpv_articulo.imagen,
                                 tpv_articuloclasificacion.descripcion as clasificacion,
                                 tpv_articulomarca.descripcion as marca,
                                 tpv_articuloprecio.precio,
                                 tpv_articulo.id_sat_unidadmedida,
                                 tpv_articuloalmacen.id as id_tpv_articuloalmacen,
                                 tpv_articuloalmacen.id_tpv_almacen,
                                 tpv_articuloalmacen.existencia, 
                                 tpv_articuloalmacen.enproceso,
                                 (tpv_articuloalmacen.existencia+tpv_articuloalmacen.enproceso) as existenciaReal,
                                 tpv_articuloalmacen.costopromedio,
                                 tpv_articuloalmacen.costoactual,
                                 sat_unidadmedida.descripcion as unidadmedida,
                                 tpv_articuloprecio.id as idprecio,
                                 (cat_impuesto.tasa/100) as impuesto,
                                 cat_impuesto.id as idimpuesto,
                                 tpv_articulo.id_sys_empresa,
                                 tpv_articulo.id_tpv_articulomarca,
                                 tpv_articulo.id_tpv_articuloclasificacion"))
                    ->leftjoin('tpv_articulomarca','tpv_articulo.id_tpv_articulomarca','=','tpv_articulomarca.id')
                    ->leftjoin('tpv_articuloclasificacion','tpv_articulo.id_tpv_articuloclasificacion','=','tpv_articuloclasificacion.id')
                    ->leftjoin('sat_unidadmedida','tpv_articulo.id_sat_unidadmedida','=','sat_unidadmedida.id')
                    ->join('tpv_articuloprecio','tpv_articulo.id','=','tpv_articuloprecio.id_tpv_articulo')
                    ->join('tpv_articuloimpuesto','tpv_articulo.id','=','tpv_articuloimpuesto.id_tpv_articulo')
                    ->join('cat_impuesto','tpv_articuloimpuesto.id_cat_impuesto','=','cat_impuesto.id')
                    ->leftjoin('tpv_articuloalmacen','tpv_articulo.id','=','tpv_articuloalmacen.id_tpv_articulo')
                    ->where('tpv_articuloalmacen.id_tpv_almacen', $almacen)
                    ->where(function($q) use($buscar){
                        $q->where(DB::raw("tpv_articulo.descripcion"), "LIKE", '%'.$buscar.'%')
                        ->orWhere('tpv_articulo.descripcioncorta', "LIKE", '%'.$buscar.'%')
                        ->orWhere('tpv_articulo.codigo', "LIKE", '%'.$buscar.'%')
                        ->orWhere('tpv_articulo.codigoproveedor', "=", $buscar);
                    })
                    ->where("tpv_articuloprecio.default", "=", 1)
                    ->where("tpv_articulo.status", 1)
                    ->groupBy("tpv_articulo.id")
                    ->get();

        return $result;
    }

    public function nuevoPedido($serie,$folio,$idusuario,$idturno){
        //dd($serie,$folio,$idusuario,$idturno);
        $result = DB::table('tpv_pedido')
                    ->where('id_sys_usuario','=',$idusuario)
                    ->where('id_tpv_turno','=',$idturno)
                    ->where('serie','=',$serie)
                    ->where('folio','=',$folio)
                    ->get();
                    
        return $result;
    }

    public function creaPedido($cliente,$usuario,$almacen,$vendedor,$turno,$serie,$folio,$tipodoc,$seriearticulo){
        DB::beginTransaction();
        $statusPedido = DB::table('tpv_pedido')
                    ->where('serie','=',$serie)
                    ->where('folio','=',$folio)
                    ->first();
        if(isset($statusPedido->id)){
            DB::rollBack();
            return -99;
        }

        $result = DB::table('tpv_pedido')->insertGetId(
            [
                'id_cat_tipodoc' => $tipodoc,
                'id_tpv_cliente' => $cliente,
                'id_sys_usuario' => $usuario,
                'id_tpv_almacen' => $almacen,
                'id_tpv_vendedor' => $vendedor,
                'seriearticulo' => strtoupper($seriearticulo),
                'id_tpv_turno' => $turno,
                'serie' => $serie,
                'folio' => $folio,
                'fecha' => date('Y-m-d'),
                'hora' => date('h:i:s'),
                'status' => 0
            ]);
        if($result>0){      
            DB::commit();
            return $result;
        }else{
            DB::rollBack();
            return 0;
        }
    }

    public function creaPedidoCotizacion($idcotizacion,$cliente,$usuario,$almacen,$vendedor,$turno,$serie,$folio){
        DB::beginTransaction();
        $statusPedido = DB::table('tpv_pedido')
                    ->where('serie','=',$serie)
                    ->where('folio','=',$folio)
                    ->first();
        if(isset($statusPedido->id)){
            DB::rollBack();
            return 404;
        }
        $result = DB::table('tpv_pedido')->insertGetId(
            [
                'id_cat_tipodoc' => 1,
                'id_tpv_cliente' => $cliente,
                'id_sys_usuario' => $usuario,
                'id_tpv_almacen' => $almacen,
                'id_tpv_vendedor' => $vendedor,
                'seriearticulo' => '',
                'id_tpv_turno' => $turno,
                'serie' => $serie,
                'folio' => $folio,
                'id_sat_metodopago' => 'PUE',
                'fecha' => date('Y-m-d'),
                'hora' => date('H:i:s'),
                'status' => 0
            ]
        );

        if($result>0){
            $errorg = 0;
            $pedido = DB::table('tpv_pedidodetalle')
                        ->where('id_tpv_pedido','=',$idcotizacion)
                        ->get();
            foreach($pedido as $det){
                $coddet = DB::table('tpv_articulo')
                            ->select(DB::raw('tpv_articulo.*'))
                            ->join('tpv_articuloalmacen','tpv_articulo.id','=','tpv_articuloalmacen.id_tpv_articulo')
                            ->where('tpv_articuloalmacen.id',$det->id_tpv_articuloalmacen)
                            ->first();
                $result1 = DB::table('tpv_pedidodetalle')->insertGetId(
                    [
                        'id_tpv_pedido' => $result,
                        'id_tpv_vendedor' => $vendedor,
                        'id_tpv_articuloalmacen' => $det->id_tpv_articuloalmacen,
                        'codigo'=>$coddet->codigo,
                        'descripcion'=>$coddet->descripcion,
                        'costo' => $det->costo,
                        'precio' => $det->precio,
                        'cantidad' => $det->cantidad,
                        'subtotal' => $det->subtotal,
                        'descuento' => $det->descuento,
                        'total' => $det->total,
                        'id_tpv_articuloprecio' => $det->id_tpv_articuloprecio
                    ]
                );
                if($result1>0){
                    $imp = DB::table('tpv_pedidodetalleimpuesto')
                        ->where('id_tpv_pedidodetalle','=',$det->id)
                        ->get();
                    $error = 0;
                    foreach($imp as $impuesto){
                        $result2 = DB::table('tpv_pedidodetalleimpuesto')->insertGetId(
                            [
                                'id_tpv_pedidodetalle' => $result1,
                                'id_cat_impuesto' => $impuesto->id_cat_impuesto,
                                'monto' => $impuesto->monto
                            ]
                        );
                        if($result2==0)
                            $error++;
                    }
                    if($error==0){              
                        // $update = DB::table('tpv_articuloalmacen')
                        //             ->where('id','=',$det->id_tpv_articuloalmacen)
                        //             ->decrement('enproceso');           
                        // if($update>0){    
                            $errorg = $errorg;
                        // }else{
                        //     $errorg++;
                        // }                        
                    }else{
                        $errorg++;
                    }
                }else{
                    $errorg++;
                }
            }
            if($errorg == 0){ 
                $update9 = DB::table('tpv_pedido')
                            ->where('id','=',$idcotizacion)
                            ->update(['status'=>98]);           
                if($update9>0){      
                    DB::commit();
                    return 1;
                }else{
                    DB::rollBack();
                    return 0;
                }         
            }else{
            }
        }else{
            DB::rollBack();
            return 0;
        }
    }

    public function getEmpresa($id){
        $result = DB::table('sys_empresa')
                    ->where('id',$id)
                    ->first();
        return $result;
    }

    public function agregaProducto($idremison,$vendedor,$idarticuloalmacen,$costopromedio,$cantidad,$precioR,$precio,$descuento,$idprecio,$impuestoid,$impuestomonto,$tipodoc,$isService,$usuario,$turno,$codigo,$descripcion){        
        DB::beginTransaction();
        $empresa = $this->getEmpresa(1);
        $pedido = DB::table('tpv_pedido')
                        ->where('id','=',$idremison)
                        ->get();

        $allArticulos = DB::table("tpv_pedidodetalle")
                        ->where("id_tpv_pedido", $idremison)
                        ->get();
                        
        if($tipodoc == 13 && $pedido[0]->isAnticipo==1)
            $agregadoLiquidacion = 1;
        else
            $agregadoLiquidacion = 0;
      
        $existe = DB::table('tpv_pedidodetalle')
                        ->select(DB::raw('tpv_pedidodetalle.*,
                                tpv_pedido.status as tipodoc,
                                tpv_pedido.subtotal as csubtotal,
                                tpv_pedido.descuento as cdescuento,
                                tpv_pedido.iva as civa,
                                tpv_pedido.total as ctotal,
                                tpv_pedido.serie, 
                                tpv_pedido.folio,
                                tpv_articuloalmacen.id_tpv_articulo,
                                tpv_articuloalmacen.id_tpv_almacen'))
                        ->join('tpv_pedido','tpv_pedidodetalle.id_tpv_pedido','=','tpv_pedido.id')
                        ->join('tpv_articuloalmacen','tpv_pedidodetalle.id_tpv_articuloalmacen','=','tpv_articuloalmacen.id')
                        ->where('tpv_pedidodetalle.id_tpv_pedido','=',$idremison)
                        ->where('tpv_pedidodetalle.id_tpv_articuloalmacen','=',$idarticuloalmacen)
                        ->where('tpv_pedidodetalle.id_tpv_articuloalmacen','!=',null)
                        ->get();
        //dd(count($existe));      

        foreach($existe as $row){ //SI EL ARTICULO QUE SE AGREGA, YA EXISTE EN TPV_PEDIDODETALLE, LO INCREMENTA
            $nuevoSubtotal = $precioR * ($row->cantidad + $cantidad);
            $nuevoDescuento = $row->descuento + $descuento;
            $nuevoImpuesto = (float)$impuestomonto * ((float)$row->cantidad + $cantidad);
            $nuevoImporte = (($precioR * ($row->cantidad + $cantidad)) - ($row->descuento + $descuento)); 
            $update = DB::table('tpv_pedidodetalle')
                            ->where('id','=',$row->id)
                            ->increment('cantidad',$cantidad,['subtotal'=>$nuevoSubtotal,'descuento'=>$nuevoDescuento,'total'=>$nuevoImporte]);
            $result3 = DB::table('tpv_movimientosarticulo')->insertGetId([
                'id_tpv_articulo' => $row->id_tpv_articulo,
                'id_tpv_almacen' => $row->id_tpv_almacen,
                'id_tpv_articuloalmacen' => $idarticuloalmacen,
                'id_sys_usuario' => $usuario,
                'id_tpv_turno' => $turno,
                'id_cat_operacion' => 1,
                'id_tabla' => $idremison,
                'name_tabla' => 'tpv_pedido',
                'folio' => $row->serie."-".$row->folio,
                'fecha' => date('Y-m-d'),
                'hora' => date('H:i:s'),
                'accion' => "AGREGAR",
                'precio' => $precioR,
                'cantidad' => $cantidad,
                'total' => ($precioR*$cantidad)-$descuento
            ]);
            if($update>0 && $result3>0){  
                if($tipodoc == 4) {
                    DB::commit();
                    return 1;
                } else if($tipodoc == 13) {
                    $updateApa = DB::table('tpv_articuloapartado')
                            ->where('id_tpv_pedidodetalle','=',$row->id)
                            ->increment('cantidadSolicitada',$cantidad,['subtotal'=>$nuevoSubtotal,'descuento'=>$nuevoDescuento,'total'=>$nuevoImporte]);
                    if($updateApa>0){
                        DB::commit();
                        return 1;
                    }else{
                        DB::rollBack();
                        return 0;
                    }
                } else if($isService!=1) {
                    $update2 = DB::table('tpv_articuloalmacen')
                                ->where('id','=',$idarticuloalmacen)
                                ->decrement('enproceso', $cantidad);
                    if($update2>0){             
                        DB::commit();
                        return 1;
                    }else{
                        DB::rollBack();
                        return 0;
                    }
                }
            }else{
                DB::rollBack();
                return 0;
            }
        }

        //SI NO EXISTE EN TPV_PEDIDODETALLE; SE AGREGA COMO UNO NUEVO
        $cidarticulo = 0;
        $cidalmacen = 0;
        $ccodigo = $codigo;
        $cdescripcion = $descripcion;
        $costoobtenido = 0;
        if($idarticuloalmacen>0){
            $coddet = DB::table('tpv_articulo')
                        ->select(DB::raw('tpv_articulo.*, tpv_articuloalmacen.id_tpv_almacen, tpv_articuloalmacen.costopromedio, tpv_articuloalmacen.costoactual'))
                        ->join('tpv_articuloalmacen','tpv_articulo.id','=','tpv_articuloalmacen.id_tpv_articulo')
                        ->where('tpv_articuloalmacen.id',$idarticuloalmacen)
                        ->first();
            $cidarticulo = $coddet->id;
            $cidalmacen = $coddet->id_tpv_almacen;
            $ccodigo = $coddet->codigo;
            $cdescripcion = $coddet->descripcion;
            if($empresa->id_cat_tipocosto==1){
                $costoobtenido = $coddet->costopromedio;
            }
            if($empresa->id_cat_tipocosto==2){
                $costoobtenido = $coddet->costoactual;
            }
        }

        $result = DB::table('tpv_pedidodetalle')->insertGetId([
                'id_tpv_pedido' => $idremison,
                'id_tpv_vendedor' => $vendedor,
                'id_tpv_articuloalmacen' => $idarticuloalmacen,
                'codigo'=>$ccodigo,
                'descripcion'=>$cdescripcion,
                'costo' => $costoobtenido,
                'precio' => $precioR,
                'cantidad' => $cantidad,
                'subtotal' => $precioR*$cantidad,
                'descuento' => $descuento,
                'total' => ($precioR*$cantidad)-$descuento,
                'id_tpv_articuloprecio' => $idprecio,
                'agregadoliquidacion' => $agregadoLiquidacion
            ]);

        $result3 = DB::table('tpv_movimientosarticulo')->insertGetId([
                'id_tpv_articulo' => $cidarticulo,
                'id_tpv_almacen' => $cidalmacen,
                'id_tpv_articuloalmacen' => $idarticuloalmacen,
                'id_sys_usuario' => $usuario,
                'id_tpv_turno' => $turno,
                'id_cat_operacion' => 1,
                'id_tabla' => $idremison,
                'name_tabla' => 'tpv_pedido',
                'folio' => $pedido[0]->serie."-".$pedido[0]->folio,
                'fecha' => date('Y-m-d'),
                'hora' => date('H:i:s'),
                'accion' => "AGREGAR",
                'precio' => $precioR,
                'cantidad' => $cantidad,
                'total' => ($precioR*$cantidad)-$descuento
            ]);
  
        if($result>0 && $result3>0){
            if($tipodoc == 13) {
                $idarticuloapartado = DB::table('tpv_articuloapartado')->insertGetId([
                                            'id_tpv_pedido' => $idremison,
                                            'id_tpv_pedidodetalle' => $result,
                                            'id_sys_usuario' => $usuario,
                                            'id_tpv_turno' => $turno,
                                            'id_tpv_articuloalmacen' => $idarticuloalmacen,
                                            'id_tpv_articuloprecio' => $idprecio,
                                            'precio' => $precioR,
                                            'codigo' => $codigo,
                                            'descripcion' => $descripcion,
                                            'cantidadsolicitada' => $cantidad,
                                            'subtotal' => $precioR*$cantidad,
                                            'descuento' => $descuento,
                                            'total' => ($precio*$cantidad)-$descuento
                                        ]);
                if($idarticuloapartado>0) {
         
                } else {
                    DB::rollBack();
                    return 'Detalle al insertar el artículo en tpv_articuloapartado';
                }
            }   

            $result2 = DB::table('tpv_pedidodetalleimpuesto')->insertGetId(
                [
                    'id_tpv_pedidodetalle' => $result,
                    'id_cat_impuesto' => $impuestoid,
                    'monto' => $impuestomonto 
                ]
            );
      
            if($result2>0){ 
                if(($tipodoc == 4 || $tipodoc == 13) && $isService>=0 && $pedido[0]->isAnticipo==0) {
                    DB::commit();
                    return 1;
                } else if($isService!=1) {
                    //dd("DECREMENTA");
                    $update = DB::table('tpv_articuloalmacen')
                                ->where('id','=',$idarticuloalmacen)
                                ->decrement('enproceso', $cantidad);           
                    if($update>0){   
                        DB::commit();
                        return 1;
                    }else{
                        DB::rollBack();
                        return 0;
                    }
                } else {
                    /*$update = DB::table('tpv_pedido')
                                ->where('id','=',$idremison)
                                ->update(['subtotal'=>($pedido[0]->subtotal+($precioR-$impuestomonto-$descuento)),'descuento'=>($pedido[0]->descuento+$descuento),'iva'=>($pedido[0]->iva+$impuestomonto),'total'=>($pedido[0]->total+$precioR)]);
                    */DB::commit();
                    return 1;
                }           
            }else{
                DB::rollBack();
                return 0;
            }
        }else{
            DB::rollBack();
            return 0;
        }
                    
    }

    public function getDetalle($usuario,$turno,$serie,$folio,$almacen,$cliente,$vendedor,$nameCarpeta){
        $result = DB::table('tpv_pedidodetalle')
                    ->select(
                        DB::raw("tpv_pedido.id as idpedido,
                                 tpv_pedidodetalle.id as id_tpv_pedidodetalle,
                                 tpv_pedido.status as status,
                                 tpv_pedido.isAnticipo as isAnticipo,
                                 tpv_articuloalmacen.id as idarticuloalmacen,
                                 tpv_articulo.id as idarticulo,
                                 tpv_articulo.codigo as codigo,
                                 tpv_articulo.codigoproveedor as codigoproveedor,
                                 tpv_articulo.descripcioncorta as descripcioncorta,
                                 tpv_articulo.imagen as imagen,
                                 tpv_articulo.isService as isService,
                                 tpv_articuloimpuesto.id_cat_impuesto,
                                 (cat_impuesto.tasa/100) as tasa,
                                 tpv_pedidodetalle.precio as precio,
                                 tpv_pedidodetalleimpuesto.monto as impuesto,
                                 tpv_pedidodetalle.id as id,
                                 tpv_pedidodetalle.id_tpv_articuloprecio as idprecio,
                                 tpv_pedidodetalle.cantidad as cantidad,
                                 ROUND(tpv_pedidodetalle.subtotal/1.16, 2) as subtotal,
                                 tpv_articuloapartado.cantidadsolicitada as cantidadsolicitada,
                                 tpv_articuloapartado.cantidadasignada as cantidadasignada,
                                 SUM(tpv_pedidodetalle.total) as total,
                                 SUM(tpv_pedidodetalle.descuento) as descuento,
                                 '".$nameCarpeta."' as nameCarpeta"))
                    ->join('tpv_pedido','tpv_pedidodetalle.id_tpv_pedido','=','tpv_pedido.id')
                    ->leftjoin('tpv_articuloapartado','tpv_pedidodetalle.id','=','tpv_articuloapartado.id_tpv_pedidodetalle')
                    ->leftjoin('tpv_articuloalmacen','tpv_pedidodetalle.id_tpv_articuloalmacen','=','tpv_articuloalmacen.id')
                    ->leftjoin('tpv_articulo','tpv_articuloalmacen.id_tpv_articulo','=','tpv_articulo.id')
                    ->leftjoin('tpv_articuloimpuesto','tpv_articulo.id','=','tpv_articuloimpuesto.id_tpv_articulo')
                    ->leftjoin('cat_impuesto','tpv_articuloimpuesto.id_cat_impuesto','=','cat_impuesto.id')
                    ->leftjoin('tpv_pedidodetalleimpuesto','tpv_pedidodetalle.id','=','tpv_pedidodetalleimpuesto.id_tpv_pedidodetalle')
                    ->where('tpv_pedido.id_sys_usuario','=',$usuario)
                    ->where('tpv_pedido.id_tpv_turno','=',$turno)
                    ->where('tpv_pedido.serie','=',$serie)
                    ->where('tpv_pedido.folio','=',$folio)
                    ->where('tpv_pedido.id_tpv_almacen','=',$almacen)
                    ->where('tpv_pedido.id_tpv_cliente','=',$cliente)
                    ->where('tpv_pedido.id_tpv_vendedor','=',$vendedor)
                    ->where('tpv_pedidodetalle.id_tpv_articuloalmacen', '!=', null)
                    ->groupBy('tpv_articulo.id')
                    ->get();
        //dd($result);
        return $result;
    }

    public function getDetalleSinArticulo($usuario,$turno,$serie,$folio,$almacen,$cliente,$vendedor){
        $result = DB::table('tpv_pedidodetalle')
                    ->select(
                        DB::raw("tpv_pedido.id as idpedido,
                                 tpv_pedidodetalle.id as id_tpv_pedidodetalle,
                                 tpv_pedido.status as status,
                                 tpv_pedido.isAnticipo as isAnticipo,
                                 tpv_pedidodetalle.precio as precio,
                                 tpv_pedidodetalle.id as id,
                                 tpv_pedidodetalle.id_tpv_articuloprecio as idprecio,
                                 tpv_pedidodetalle.cantidad as cantidad,
                                 tpv_articuloapartado.cantidadsolicitada as cantidadsolicitada,
                                 tpv_articuloapartado.cantidadasignada as cantidadasignada,
                                 tpv_pedidodetalle.total as total,
                                 tpv_pedidodetalle.descuento as descuento,
                                 tpv_articuloapartado.id as idarticuloapartado,
                                 tpv_articuloapartado.id_tpv_articuloalmacen as idarticuloalmacenapartado,
                                 tpv_articuloapartado.codigo as codigoarticuloapartado,
                                 tpv_articuloapartado.descripcion as descripcionarticuloapartado,
                                 tpv_articuloapartado.cantidadsolicitada as cantidadarticuloapartado"))
                    ->join('tpv_pedido','tpv_pedidodetalle.id_tpv_pedido','=','tpv_pedido.id')
                    ->join('tpv_articuloapartado','tpv_pedidodetalle.id','=','tpv_articuloapartado.id_tpv_pedidodetalle')
                    ->where('tpv_pedido.id_sys_usuario','=',$usuario)
                    ->where('tpv_pedido.id_tpv_turno','=',$turno)
                    ->where('tpv_pedido.serie','=',$serie)
                    ->where('tpv_pedido.folio','=',$folio)
                    ->where('tpv_pedido.id_tpv_almacen','=',$almacen)
                    ->where('tpv_pedido.id_tpv_cliente','=',$cliente)
                    ->where('tpv_pedido.id_tpv_vendedor','=',$vendedor)
                    ->where('tpv_articuloapartado.id_tpv_articuloalmacen','=',null)
                    ->groupBy('tpv_pedidodetalle.id')
                    ->get();
        //dd($result);
        return $result;
    }

    public function quitaItem($idpedido,$idpedidodetalle,$idarticulo,$cantidad,$tipodoc,$usuario,$turno){   
        //dd($idpedido,$idpedidodetalle,$idarticulo,$cantidad,$tipodoc);     
        DB::beginTransaction();
        $statusPedido = DB::table('tpv_pedido')
                    ->where('id','=',$idpedido)
                    ->first();
        if($statusPedido->status != 0){
            DB::rollBack();
            return 404;
        }
        //SI QUEDA SOLO 1 ARTICULO TPV_PEDIDODETALLE, NO ELIMINAR EL ITEM
        $status = DB::table('tpv_pedidodetalle')
                    ->select(DB::raw('tpv_pedidodetalle.*'))
                    ->join('tpv_pedido', 'tpv_pedidodetalle.id_tpv_pedido', '=', 'tpv_pedido.id')
                    ->where('tpv_pedidodetalle.id_tpv_pedido','=',$idpedido)
                    ->where('tpv_pedido.id_cat_tipodoc','=',$tipodoc)
                    ->where('tpv_pedido.isAnticipo','=',1)
                    ->get();
        
        if(count($status)==1) {
            DB::rollBack();
            return 'Imposible eliminar, ya que el pedido no debe quedar vacío.';
        } else {
            $result = DB::table('tpv_pedidodetalle')
                        ->select(DB::raw('tpv_pedidodetalle.*,tpv_articuloapartado.cantidadsolicitada, tpv_articuloapartado.cantidadasignada,tpv_articulo.isService as isService, 
                                        tpv_articulo.id as id_tpv_articulo, tpv_articuloalmacen.id_tpv_almacen as id_tpv_almacen, tpv_pedido.serie, tpv_pedido.folio'))
                        ->join('tpv_articuloalmacen', 'tpv_pedidodetalle.id_tpv_articuloalmacen', '=', 'tpv_articuloalmacen.id')
                        ->join('tpv_articulo', 'tpv_articuloalmacen.id_tpv_articulo', '=', 'tpv_articulo.id')
                        ->join('tpv_pedido', 'tpv_pedidodetalle.id_tpv_pedido', '=', 'tpv_pedido.id')
                        ->leftjoin('tpv_articuloapartado', 'tpv_pedidodetalle.id', '=', 'tpv_articuloapartado.id_tpv_pedidodetalle')
                        ->where('tpv_pedidodetalle.id_tpv_pedido','=',$idpedido)
                        ->where('tpv_pedidodetalle.id_tpv_articuloalmacen','=',$idarticulo)
                        ->get();
           
            foreach($result as $row){        
                $deldet = DB::table('tpv_pedidodetalle')
                                ->where('id','=',$row->id)
                                ->delete();
                $deldetimp = DB::table('tpv_pedidodetalleimpuesto')
                                ->where('id_tpv_pedidodetalle','=',$row->id)
                                ->delete();
                $result3 = DB::table('tpv_movimientosarticulo')->insertGetId([
                    'id_tpv_articulo' => $row->id_tpv_articulo,
                    'id_tpv_almacen' => $row->id_tpv_almacen,
                    'id_tpv_articuloalmacen' => $idarticulo,
                    'id_sys_usuario' => $usuario,
                    'id_tpv_turno' => $turno,
                    'id_cat_operacion' => 1,
                    'id_tabla' => $idpedido,
                    'name_tabla' => 'tpv_pedido',
                    'folio' => $row->serie."-".$row->folio,
                    'fecha' => date('Y-m-d'),
                    'hora' => date('H:i:s'),
                    'accion' => "QUITAR",
                    'precio' => $row->precio,
                    'cantidad' => $cantidad,
                    'total' => $row->precio*$cantidad
                ]);
                if($result3>0)
                    $movArticulo = 1;
                else {
                    DB::rollBack();
                    return 'Ocurrio un detalle al registrar el movimiento del articulo'; 
                }
                $sum = $deldet + $deldetimp + $movArticulo;
                //dd($sum);
                if($sum == 3){   
                    //dd($entra);   
                    if($tipodoc==4) {
                        DB::commit();
                        return 1;
                    } else if($tipodoc==13 && $row->cantidadsolicitada>0 && $row->cantidadasignada==null) {
                        //dd("ELIMINA EL ARTICULOAPARTADO");
                        $delapartado = DB::table('tpv_articuloapartado')
                                        ->where('id_tpv_pedidodetalle','=',$row->id)
                                        ->delete();
                        if($delapartado>0) {
                            DB::commit();
                            return 1;
                        }else{
                            DB::rollBack();
                            return 0;
                        }
                    } else {
                        if($tipodoc==13) {
                        // dd("INCREMENTA EN EXISTENCIA PORQUE LA CANTIDAD YA FUE ASIGNADA");
                            $update = DB::table('tpv_articuloalmacen')
                                        ->where('id','=',$idarticulo)
                                        ->increment('existencia',$cantidad);
                            if($update>0){    
                                if($row->cantidadasignada>0) {
                                    $delapartado = DB::table('tpv_articuloapartado')
                                                    ->where('id_tpv_pedidodetalle','=',$row->id)
                                                    ->delete();
                                    if($delapartado==0) {
                                        DB::rollBack();
                                        return 0;
                                    }
                                }
                                DB::commit();
                                return 1;        
                            }else{
                                DB::rollBack();
                                return 0;
                            }
                        } else {
                            //dd("INCREMENTA EN EXISTENCIA PORQUE SE DEVOLVIO EL ARTICULO DE LA REMISION");
                            if($row->isService!=1){
                                $update = DB::table('tpv_articuloalmacen')
                                            ->where('id','=',$idarticulo)
                                            ->increment('enproceso',$cantidad);    
                                if($update>0){    
                                    DB::commit();
                                    return 1;        
                                }else{
                                    DB::rollBack();
                                    return 0;
                                }
                            }else{  
                                DB::commit();
                                return 1;  
                            }
                        }
                    }
                }else{
                    DB::rollBack();
                    return 0;
                }            
            }
            //ELIMINA LOS ARTICULOS CREADOS MANUALMENTE SIN STOCK
            $delapartado = DB::table('tpv_articuloapartado')
                            ->where('id_tpv_pedidodetalle','=',$idpedidodetalle)
                            ->delete();
            $deldet = DB::table('tpv_pedidodetalle')
                            ->where('id','=',$idpedidodetalle)
                            ->delete();
            $deldetimp = DB::table('tpv_pedidodetalleimpuesto')
                            ->where('id_tpv_pedidodetalle','=',$idpedidodetalle)
                            ->delete();
            $sum = $delapartado + $deldet + $deldetimp;
            if($sum == 3){
                DB::commit();
                return 1;
            }else{
                DB::rollBack();
                return 'Ocurrio un detalle, comuniquele al administrador del sistema';
            }
        }
    }

    public function validaMetodoPago($metodopago, $usuario) {
        $getMetodoPago = DB::table('tpv_usuariotipoventa')
                        ->where('id_sys_usuario','=',$usuario)
                        ->where('id_sat_metodopago','=',$metodopago)
                        ->where('status','=',1)
                        ->exists();
        return $getMetodoPago;
    }

    public function checkStatusPedido($id) {
        $statusPedido = DB::table('tpv_pedido')
                    ->select(DB::raw('tpv_pedido.*'))
                    ->join('tpv_pedidodetalle','tpv_pedido.id','=','tpv_pedidodetalle.id_tpv_pedido')
                    ->where('tpv_pedidodetalle.id','=',$id)
                    ->first();
        if($statusPedido->status != 0){
            return 404;
        }else{
            return 1;
        }
    }

    public function updateTotalesPedido($idpedido) {
        DB::beginTransaction();
        $getPedido = DB::table('tpv_pedidodetalle')
                        ->where('id_tpv_pedido','=',$idpedido)
                        ->get();
        $subtotal = 0;
        $descuento = 0;
        $iva = 0;
        $total = 0;

        foreach($getPedido as $item) {
            $subtotal = $subtotal + ($item->subtotal/1.16);
            $iva = $iva + ($item->subtotal-($item->subtotal/1.16));
            $descuento = $descuento + $item->descuento;
            $total = $total + $item->total;
        }
        $result = DB::table('tpv_pedido')
                    ->where('id','=',$idpedido)
                    ->update(['subtotal'=>$subtotal,'iva'=>$iva,'descuento'=>$descuento,'total'=>$total]);
        if($result>0){
            DB::commit();
            return 1;
        }else{
            DB::rollBack();
            return 0;
        }
    }

    public function editaItem($id,$precio,$cantidad,$descuento,$importe,$idarticuloalmacen,$idprecio,$isService,$tasaArticulo,$idimpuesto,$usuario,$turno){       
        DB::beginTransaction();
        $statusPedido = DB::table('tpv_pedido')
                    ->select(DB::raw('tpv_pedido.*'))
                    ->join('tpv_pedidodetalle','tpv_pedido.id','=','tpv_pedidodetalle.id_tpv_pedido')
                    ->where('tpv_pedidodetalle.id','=',$id)
                    ->first();
        if($statusPedido->status != 0){
            DB::rollBack();
            return 404;
        }
        $anterior = DB::table('tpv_pedidodetalle')
                    ->select(DB::raw('tpv_pedidodetalle.* ,tpv_pedido.status as tipodoc,tpv_pedido.id_cat_tipodoc as tipodoc2, tpv_pedido.serie, tpv_pedido.folio, tpv_articuloalmacen.id_tpv_articulo, tpv_articuloalmacen.id_tpv_almacen'))
                    ->join('tpv_pedido','tpv_pedidodetalle.id_tpv_pedido','=','tpv_pedido.id')
                    ->join('tpv_articuloalmacen','tpv_pedidodetalle.id_tpv_articuloalmacen','=','tpv_articuloalmacen.id')
                    ->where('tpv_pedidodetalle.id','=',$id)
                    ->get();
                    //return $id.",".$precio.",".$cantidad.",".$descuento.",".$importe.",".$idarticuloalmacen.",".$idprecio;
        $bandera = false;
        foreach($anterior as $rw){
            $subtotal = $precio * $cantidad;
            $cantOld = $rw->cantidad;
            $cantNew = $cantOld - $cantidad;
            $desc = $subtotal * ($descuento/100);
            $importe = $subtotal - $desc;
            if($idprecio==$rw->id_tpv_articuloprecio && $precio==$rw->precio && $cantidad==$rw->cantidad && $subtotal==$rw->subtotal && $desc==$rw->descuento && $importe==$rw->total){
                DB::commit();
                return 1;
            }
            $update = 1;
            $accion = 'CAMBIO DE PRECIO';
            if($rw->tipodoc != 4 && $isService!=1){
                if($rw->tipodoc2 != 4){
                    if($cantNew>0){
                        $update = DB::table('tpv_articuloalmacen')
                                    ->where('id','=',$idarticuloalmacen)
                                    ->increment('enproceso',$cantNew);
                        $accion = "QUITAR";
                    }
                    if($cantNew<0){
                        $update = DB::table('tpv_articuloalmacen')
                                    ->where('id','=',$idarticuloalmacen)
                                    ->decrement('enproceso',abs($cantNew));
                        $accion = "AGREGAR";
                    }
                }
            }

            if($update == 0)
                $bandera = 'REM09: Error al afectar existencias en proceso';
            
            $result = DB::table('tpv_pedidodetalle')
                    ->where('id','=',$id)
                    ->update(['id_tpv_articuloprecio'=>$idprecio,'precio'=>$precio,'cantidad'=>$cantidad,'subtotal'=>$subtotal,'descuento'=>$desc,'total'=>$importe]);

            $result3 = DB::table('tpv_movimientosarticulo')->insertGetId([
                'id_tpv_articulo' => $rw->id_tpv_articulo,
                'id_tpv_almacen' => $rw->id_tpv_almacen,
                'id_tpv_articuloalmacen' => $idarticuloalmacen,
                'id_sys_usuario' => $usuario,
                'id_tpv_turno' => $turno,
                'id_cat_operacion' => 1,
                'id_tabla' => $rw->id_tpv_pedido,
                'name_tabla' => 'tpv_pedido',
                'folio' => $rw->serie."-".$rw->folio,
                'fecha' => date('Y-m-d'),
                'hora' => date('H:i:s'),
                'accion' => $accion,
                'precio' => $precio,
                'cantidad' => abs($cantNew),
                'total' => ($precio*abs($cantNew))-$descuento
            ]);
            
            if($result == 0 || $result3 == 0)
                $bandera = 'REM09: Error al afectar el detalle del pedido';
            
            $monto = $precio-($precio/(1+floatval($tasaArticulo)));
            $result1 = DB::table('tpv_pedidodetalleimpuesto')
                    ->where('id_tpv_pedidodetalle','=',$id)
                    ->update(['id_cat_impuesto'=>$idimpuesto,'monto'=>($cantidad*$monto)]);
            //dd($result1);
            if($result1>=0)
                $bandera = $bandera;
            else
                $bandera = 'REM09: Error al afectar el monto del impuesto del pedido';      
        }
        
        if(!$bandera){
            DB::commit();
            return 1;
        }else{
            DB::rollBack();
            return $bandera;
        }
    }

    public function cancelaPedido($idpedido){
        $pedido = DB::table('tpv_pedido')
                    ->where('id','=',$idpedido)
                    ->get();
        switch($pedido[0]->status){
            case 0:{
                DB::beginTransaction();
                $delpedido = DB::table('tpv_pedido')
                            ->where('id','=',$idpedido)
                            ->delete();
                if($delpedido>0){
                    $detalle = DB::table('tpv_pedidodetalle')
                                ->where('id_tpv_pedido','=',$idpedido)
                                ->get();
                    foreach($detalle as $det){                        
                        DB::table('tpv_articuloalmacen')
                                ->where('id','=',$det->id_tpv_articuloalmacen)
                                ->increment('enproceso',$det->cantidad);
                                
                        DB::table('tpv_pedidodetalleimpuesto')
                                ->where('id_tpv_pedidodetalle','=',$det->id)
                                ->delete();

                        DB::table('tpv_articuloapartado')
                                ->where('id_tpv_pedidodetalle','=',$det->id)
                                ->delete();
                    }
                    $delpedidodet = DB::table('tpv_pedidodetalle')
                                    ->where('id_tpv_pedido','=',$idpedido)
                                    ->delete();

                    if($delpedidodet>0){
                        DB::commit();
                        return true;
                    }else{
                        DB::rollBack();
                        return false;
                    }
                }else{
                    DB::rollBack();
                    return false;
                }
                break;
            }            
            case 1:{
                DB::beginTransaction();
                $delpedido = DB::table('tpv_pedido')
                            ->where('id','=',$idpedido)
                            ->update(['status'=>99]);
                if($delpedido>0){
                    $detalle = DB::table('tpv_pedidodetalle')
                                ->select(DB::raw('tpv_pedidodetalle.*,tpv_articulo.isService as isService'))
                                ->join('tpv_articuloalmacen','tpv_pedidodetalle.id_tpv_articuloalmacen','=','tpv_articuloalmacen.id')
                                ->join('tpv_articulo','tpv_articuloalmacen.id_tpv_articulo','=','tpv_articulo.id')
                                ->where('id_tpv_pedido','=',$idpedido)
                                ->get();
                    foreach($detalle as $det){
                        if($det->isService!=1){
                            DB::table('tpv_articuloalmacen')
                                ->where('id','=',$det->id_tpv_articuloalmacen)
                                ->increment('existencia',$det->cantidad);
                        }
                        DB::table('tpv_pedidodetalleimpuesto')
                                ->where('id_tpv_pedidodetalle','=',$det->id)
                                ->update(['status'=>99]);

                        DB::table('tpv_articuloapartado')
                                ->where('id_tpv_pedidodetalle','=',$det->id)
                                ->update(['status'=>99]);
                    }
                    $delpedidodet = DB::table('tpv_pedidodetalle')
                                    ->where('id_tpv_pedido','=',$idpedido)
                                    ->update(['status'=>99]);

                    if($delpedidodet>0){
                        DB::commit();
                        return true;
                    }else{
                        DB::rollBack();
                        return false;
                    }
                }else{
                    DB::rollBack();
                    return false;
                }
                break;
            }
            case 4:
            case 13:{
                DB::beginTransaction();
                $updpedido = DB::table('tpv_pedido')
                                ->where('id','=',$idpedido)
                                ->update(['status'=>99]);
                if($updpedido>0){
                    $detalle = DB::table('tpv_pedidodetalle')
                                ->where('id_tpv_pedido','=',$idpedido)
                                ->get();
                    foreach($detalle as $det){                               
                        DB::table('tpv_pedidodetalleimpuesto')
                                ->where('id_tpv_pedidodetalle','=',$det->id)
                                ->update(['status'=>99]);

                        DB::table('tpv_articuloapartado')
                                ->where('id_tpv_pedidodetalle','=',$det->id)
                                ->update(['status'=>99]);
                    }
                    $updpedidodet = DB::table('tpv_pedidodetalle')
                                ->where('id_tpv_pedido','=',$idpedido)
                                ->update(['status'=>99]);
                
                    if($updpedidodet>0){
                        DB::commit();
                        return true;
                    }else{
                        DB::rollBack();
                        return false;
                    }
                }else{
                    DB::rollBack();
                    return false;
                }
                break;
            }
        }
    }

    public function guardapagoanticipo($params, $idpedido) {
        DB::beginTransaction();
        $sinproblema = true;
        //dd($params);
        //dd($params->efectivo > 0);
        if($params->efectivo > 0){
            $r1 = DB::table('tpv_pedidoformapago')->insertGetId(
                [
                    'id_tpv_pedido' => $idpedido,
                    'id_sat_formapago' => '01',
                    'fecha' => date('Y-m-d'),
                    'hora' => date('H:i:s'),
                    'monto' => $params->efectivo,
                    'isAnticipo' => 1,                    
                    'status' => 0
                ]
            );
            if($r1>0)
                $sinproblema = $sinproblema;
            else
                $sinproblema = false;
        }
        if($params->deposito > 0){
            $r2 = DB::table('tpv_pedidoformapago')->insertGetId(
                [
                    'id_tpv_pedido' => $idpedido,
                    'id_sat_formapago' => '',
                    'fecha' => date('Y-m-d'),
                    'hora' => date('H:i:s'),
                    'monto' => $params->deposito,
                    'isDeposito' => 1,          
                    'isAnticipo' => 1,            
                    'status' => 0
                ]
            );
            if($r2>0)
                $sinproblema = $sinproblema;
            else
                $sinproblema = false;
        }
        if($params->td > 0){
            $r3 = DB::table('tpv_pedidoformapago')->insertGetId(
                [
                    'id_tpv_pedido' => $idpedido,
                    'id_sat_formapago' => '28',
                    'fecha' => date('Y-m-d'),
                    'hora' => date('H:i:s'),
                    'monto' => $params->td,
                    'id_sat_banco' => $params->tdbanco,
                    'identificador' => $params->tdreferencia,
                    'isAnticipo' => 1,  
                    'status' => 0
                ]
            );
            if($r3>0)
                $sinproblema = $sinproblema;
            else
                $sinproblema = false;
        }
        if($params->tc> 0){
            $r4 = DB::table('tpv_pedidoformapago')->insertGetId(
                [
                    'id_tpv_pedido' => $idpedido,
                    'id_sat_formapago' => '04',
                    'fecha' => date('Y-m-d'),
                    'hora' => date('H:i:s'),
                    'monto' => $params->tc,
                    'id_sat_banco' => $params->tcbanco,
                    'id_tpv_bancomensualidad' => $params->tcmensualidad,
                    'identificador' => $params->tcreferencia,
                    'isAnticipo' => 1,  
                    'status' => 0
                ]
            );
            if($r4>0)
                $sinproblema = $sinproblema;
            else
                $sinproblema = false;
        }
        if($params->cheque > 0){
            $r5 = DB::table('tpv_pedidoformapago')->insertGetId(
                [
                    'id_tpv_pedido' => $idpedido,
                    'id_sat_formapago' => '02',
                    'fecha' => date('Y-m-d'),
                    'hora' => date('H:i:s'),
                    'monto' => $params->cheque,
                    'id_sat_banco' => $params->chequebanco,
                    'identificador' => $params->chequenum,
                    'isAnticipo' => 1,  
                    'status' => 0
                ]
            );
            if($r5>0)
                $sinproblema = $sinproblema;
            else
                $sinproblema = false;
        }
        if($params->transfer > 0){
            $r6 = DB::table('tpv_pedidoformapago')->insertGetId(
                [
                    'id_tpv_pedido' => $idpedido,
                    'id_sat_formapago' => '03',
                    'fecha' => date('Y-m-d'),
                    'hora' => date('H:i:s'),
                    'monto' => $params->transfer,
                    'id_sat_banco' => $params->transferbanco,
                    'identificador' => $params->transferfolio,
                    'isAnticipo' => 1,  
                    'status' => 0
                ]
            );
            if($r6>0)
                $sinproblema = $sinproblema;
            else
                $sinproblema = false;
        }
        if($params->monedero > 0){
            $r7 = DB::table('tpv_pedidoformapago')->insertGetId(
                [
                    'id_tpv_pedido' => $idpedido,
                    'id_sat_formapago' => '05',
                    'fecha' => date('Y-m-d'),
                    'hora' => date('H:i:s'),
                    'monto' => $params->monedero,
                    'id_tpv_monedero' => $params->monederocomp,
                    'identificador' => $params->monederoid,
                    'isAnticipo' => 1,  
                    'status' => 0
                ]
            );
            if($r7>0)
                $sinproblema = $sinproblema;
            else
                $sinproblema = false;
        }
        //dd(!$sinproblema);
        if(!$sinproblema){
            DB::rollBack();
            return 0;
        }else{
            DB::commit();
            return $sinproblema;
        }
    }

    public function guardaPedido($idpedido,$almacen,$usuario,$turno,$subtotal,$descuento,$iva,$total,$observaciones,$metodopago,$formapago,$numpagos,$modalidadpago,$fecpromesa,$tipoDocumento,$vlinea,$vmodelo,$vcolor,$anticipo,$request){
        DB::beginTransaction();
        //dd($idpedido,$almacen,$usuario,$turno,$subtotal,$descuento,$iva,$total,$observaciones,$metodopago,$tipoDocumento,$vmodelo,$vcolor,$anticipo);
        $yanohay = array();
        $id_con_cxcformaspago = $modalidadpago;
        if($metodopago=='PPD'){
            //VALIDA LINEA DE CREDITO (limite inferior, limite superior, limite diario, limite mensual, limite anual)
            $cxccl = DB::table('tpv_pedido')
                        ->select(DB::raw('con_cxccliente.*'))
                        ->join('con_cxccliente','tpv_pedido.id_tpv_cliente','=','con_cxccliente.id_tpv_cliente')
                        ->where('tpv_pedido.id',$idpedido)
                        ->first();
            if(isset($cxccl->id)){
                if($total > $cxccl->limitesuperior && $modalidadpago!=34){
                    DB::rollBack();
                    return 'El monto de la venta se encuentra por encima de su límite de crédito ($ '.number_format($cxccl->limitesuperior,2,'.',',').')';
                }
                if($cxccl->limiteinferior>0){
                    if($total < $cxccl->limiteinferior){
                        DB::rollBack();
                        return 'El monto de la venta se encuentra por debajo de su compra mínima a crédito ($ '.number_format($cxccl->limiteinferior,2,'.',',').')';
                    }
                }
                $cdiariam = 0;
                $cmensualm = 0;
                $canualm = 0;
                //Compra diaria
                $cdiaria = DB::table('tpv_pedido')
                            ->where('fecha',date('Y-m-d'))
                            ->where('id_sat_metodopago','PPD')
                            ->where('id_tpv_cliente',$cxccl->id_tpv_cliente)
                            ->whereIn('status',[2,3])
                            ->get();
                
                if(isset($cdiaria[0])){
                    foreach($cdiaria as $cd){
                        $cdiariam = $cdiariam + $cd->total;
                    }
                }
                if($cxccl->limitediario>0){
                    $sumcdiaria = $cdiariam + $total;
                    if($sumcdiaria > $cxccl->limitediario){
                        DB::rollBack();
                        return 'El monto de la venta se encuentra por encima de su compra diaria a crédito ($ '.number_format($cxccl->limiteinferior,2,'.',',').')';
                    }
                }
                //Compra en el mes
                $cmensual = DB::table('tpv_pedido')
                            ->whereRaw("MONTH(fecha)=".date('n'))
                            ->where('id_sat_metodopago','PPD')
                            ->where('id_tpv_cliente',$cxccl->id_tpv_cliente)
                            ->whereIn('status',[2,3])
                            ->get();
                
                if(isset($cmensual[0])){
                    foreach($cmensual as $cm){
                        $cmensualm = $cmensualm + $cm->total;
                    }
                }
                if($cxccl->limitemensual>0){
                    $sumcmensual = $cmensualm + $total;
                    if($sumcmensual > $cxccl->limitemensual){
                        DB::rollBack();
                        return 'El monto de la venta se encuentra  por encima de su compra mensual a crédito ($ '.number_format($cxccl->limiteinferior,2,'.',',').')';
                    }
                }

                //Compra en el año
                $canual = DB::table('tpv_pedido')
                            ->whereRaw("YEAR(fecha)=".date('Y'))
                            ->where('id_sat_metodopago','PPD')
                            ->where('id_tpv_cliente',$cxccl->id_tpv_cliente)
                            ->whereIn('status',[2,3])
                            ->get();
                
                if(isset($canual[0])){
                    foreach($canual as $ca){
                        $canualm = $canualm + $ca->total;
                    }
                }
                if($cxccl->limiteanual>0){
                    $sumcanual = $canualm + $total;
                    if($sumcanual > $cxccl->limiteanual){
                        DB::rollBack();
                        return 'El monto de la venta se encuentra  por encima de su compra por año a crédito ($ '.number_format($cxccl->limiteinferior,2,'.',',').')';
                    }
                }
            }

        }

        if($tipoDocumento == 13) {
            $getSerieFolio = $this->getSerieFolio($usuario,$turno,$tipoDocumento,$almacen);
            //dd($getSerieFolio);
            if(count($getSerieFolio)>0) {
                //$vehiculo = 1;
                $delpedido = DB::table('tpv_pedido')
                                ->where('id','=',$idpedido)
                                ->update(['id_cat_tipodoc'=>$tipoDocumento, 'status'=>$tipoDocumento, 'serie'=>$getSerieFolio[0]->serie, 'folio'=>$getSerieFolio[0]->folio, 'subtotal'=>$subtotal,'descuento'=>$descuento,'iva'=>$iva,'total'=>$total,'id_sat_metodopago'=>'ANT','fechapromesa'=>$fecpromesa,'observaciones'=>$observaciones,'fecha'=>date('Y-m-d'),'hora'=>date('H:i:s')]);
                //dd($delpedido);
            } else {
                DB::rollBack();
                return 'Este usuario no cuenta con un folio para realizar este anticipo';
            }
        } else if($tipoDocumento == 4) {
            $delpedido = DB::table('tpv_pedido')
                            ->where('id','=',$idpedido)
                            ->update(['id_cat_tipodoc'=>1, 'status'=>1,'subtotal'=>$subtotal,'descuento'=>$descuento,'iva'=>$iva,'total'=>$total,'id_sat_metodopago'=>"PUE",'id_con_cxcformaspago'=>$id_con_cxcformaspago,'observaciones'=>$observaciones,'fecha'=>date('Y-m-d'),'hora'=>date('H:i:s')]);
            //dd($delpedido);

        } else {
            $delpedido = DB::table('tpv_pedido')
                            ->where('id','=',$idpedido)
                            ->update(['id_con_cxcformaspago_dias'=>$request->diascredito,
                                    'id_cat_tipodoc'=>$tipoDocumento,
                                    'status'=>$tipoDocumento,
                                    'subtotal'=>$subtotal,
                                    'descuento'=>$descuento,
                                    'iva'=>$iva,
                                    'total'=>$total,
                                    'id_sat_metodopago'=>$metodopago,
                                    'id_con_cxcformaspago'=>$id_con_cxcformaspago,
                                    'id_cat_periodicidadpago'=>$formapago,
                                    'numpagos'=>$numpagos,
                                    'observaciones'=>$observaciones,
                                    'fecha'=>date('Y-m-d'),
                                    'hora'=>date('H:i:s')]);
            /*$vehiculo = DB::table('tpv_pedidovehiculo')->insertGetId([
                            'id_tpv_pedido'=>$idpedido,
                            'id_cat_vehiculo'=>$vlinea,
                            'anio' =>$vmodelo,
                            'color'=>$vcolor
                        ]);*/
        }
        //if($delpedido>0 && $vehiculo>0){
        if($delpedido>0){
            if($tipoDocumento == 4){
                $result = DB::table('tpv_folio')
                    ->where('id_sys_usuario','=',$usuario)
                    ->where('id_tpv_turno','=',$turno)
                    ->where('id_tpv_almacen','=',$almacen)
                    ->where('id_cat_operacion','=',1)
                    ->where('status','=',1)
                    ->increment('folio');
            }else{
                $result = DB::table('tpv_folio')
                        ->where('id_sys_usuario','=',$usuario)
                        ->where('id_tpv_turno','=',$turno)
                        ->where('id_tpv_almacen','=',$almacen)
                        ->where('id_cat_operacion','=',$tipoDocumento)
                        ->where('status','=',1)
                        ->increment('folio');
            }
            //dd($result);
            if($result>0){
                $detalle = DB::table('tpv_pedidodetalle')
                            ->select(DB::raw('tpv_pedidodetalle.*, tpv_articulo.id as idArticulo, tpv_articuloalmacen.id_tpv_almacen, tpv_articulo.codigo as codigo, tpv_articulo.isService as isService,
                                            tpv_pedido.id_cat_tipodoc, tpv_pedido.serie, tpv_pedido.folio, tpv_articuloalmacen.costoactual'))
                            ->join('tpv_articuloalmacen','tpv_pedidodetalle.id_tpv_articuloalmacen','=','tpv_articuloalmacen.id')
                            ->join('tpv_articulo','tpv_articuloalmacen.id_tpv_articulo','=','tpv_articulo.id')
                            ->join('tpv_pedido', 'tpv_pedidodetalle.id_tpv_pedido', '=', 'tpv_pedido.id')
                            ->where('tpv_pedidodetalle.id_tpv_pedido','=',$idpedido)
                            ->get();
                $band = 0;
                //dd($detalle);
                foreach($detalle as $det){
                    //dd($det);
                    //AQUI SE GUARDA EL MOVIMIENTO EN EL KARDEX
                    $idKardex = DB::table('tpv_kardex')->insertGetId([
                        'id_sys_usuario' => $usuario,
                        'id_tpv_turno' => $turno,
                        'id_tpv_articulo' => $det->idArticulo,
                        'id_tpv_almacen' => $det->id_tpv_almacen,
                        'id_tpv_articuloalmacen' => $det->id_tpv_articuloalmacen,
                        'id_cat_tipodoc' => $det->id_cat_tipodoc,
                        'id_cat_operacion' => 6,
                        'id_cat_operacion_movimiento' => null,
                        'id_cat_acciones' => 5,
                        'nombretabla' => 'tpv_pedidodetalle',
                        'idregistro' => $det->id,
                        'folio' => $det->serie."-".$det->folio,
                        'fecha' => date('Y-m-d'),
                        'hora' => date('H:i:s'),
                        'cantidad' => $det->cantidad,
                        'costopromedio' => $det->costo,
                        'costoactual' => $det->costoactual,
                    ]);
                    if($idKardex==0) {
                        DB::rollBack();
                        return 'Detalle al guardar el movimiento en el kardex';
                    }
                    
                    if($det->isService==0 && $tipoDocumento != 13){
                        $arxalm = DB::table('tpv_articuloalmacen')
                                ->select(DB::raw('existencia+enproceso as existencia'))
                                ->where('id','=',$det->id_tpv_articuloalmacen)
                                ->first();
                        if($arxalm->existencia >= 0){
                            DB::table('tpv_articuloalmacen')
                                    ->where('id','=',$det->id_tpv_articuloalmacen)
                                    ->decrement('existencia',$det->cantidad);    
                            if($tipoDocumento!=4){                        
                                DB::table('tpv_articuloalmacen')
                                        ->where('id','=',$det->id_tpv_articuloalmacen)
                                        ->increment('enproceso',$det->cantidad);
                            }
                        }else{
                            $yanohay[$det->id] = $det->codigo;
                            $band++;
                        }
                    }
                }
                //dd("Band: ".$band);
                if($band>0){                    
                    DB::rollBack();
                    return $yanohay;
                }else{
                    if($tipoDocumento == 13) {
                        $idupdateapartado = DB::table('tpv_pedido')
                                                ->where('id','=',$idpedido)
                                                ->update(['anticipo'=>$anticipo, 'status'=>$tipoDocumento]);
                        if($idupdateapartado>0) {
                            DB::commit();
                            return 1;
                        } else {
                            DB::rollBack();
                            return 'Detalle al actualizar el monto del apartado del cliente';
                        }
                    } else {
                        DB::commit();
                        return 1;
                    }
                }
            }else{
                DB::rollBack();
                return 'ERR :: Problemas al incrementar el folio';
            }
        }else{
            DB::rollBack();
            return 'ERR :: Problemas al actualizar el documento';
        }
    }

    public function guardaCotizacion($idpedido,$almacen,$serie,$folio,$usuario,$turno,$subtotal,$descuento,$iva,$total,$observaciones,$metodopago,$tipoDocumento,$isRemision,$seriearticulo){
        DB::beginTransaction();
        $delpedido = DB::table('tpv_pedido')
                    ->where('id','=',$idpedido)
                    ->update(['id_cat_tipodoc'=>$tipoDocumento,'seriearticulo'=>strtoupper($seriearticulo),'serie'=>$serie,'folio'=>$folio,'status'=>4,'subtotal'=>$subtotal,'descuento'=>$descuento,'iva'=>$iva,'total'=>$total,'id_sat_metodopago'=>$metodopago,'observaciones'=>$observaciones,'fecha'=>date('Y-m-d'),'hora'=>date('H:i:s')]);
        if($delpedido>0){
            $result = DB::table('tpv_folio')
                    ->where('id_sys_usuario','=',$usuario)
                    ->where('id_tpv_turno','=',$turno)
                    ->where('id_tpv_almacen','=',$almacen)
                    ->where('id_cat_operacion','=',2)
                    ->where('status','=',1)
                    ->increment('folio');
            if($result>0){
                if($isRemision == 1) {
                    $detalle = DB::table('tpv_pedidodetalle')
                                ->where('id_tpv_pedido','=',$idpedido)
                                ->get();
                    foreach($detalle as $det){                          
                        DB::table('tpv_articuloalmacen')
                                ->where('id','=',$det->id_tpv_articuloalmacen)
                                ->increment('enproceso',$det->cantidad);
                    }
                }
                DB::commit();
                return true;
            }else{
                DB::rollBack();
                return false;
            }
        }else{
            DB::rollBack();
            return false;
        }
    }
    
    public function ticketCabecera($id,$tipodoc){
        $result = DB::table('sys_empresa')
                    ->select(
                        DB::raw("sys_empresa.*, sys_direccion.calle AS ledireccion, sys_direccion.cp AS lecp, sys_direccion.numexterior AS lenumExterior, sys_direccion.colonia AS lecolonia, cat_pais.descripcion AS lepais, cat_estado.descripcion AS leestado, cat_municipio.descripcion AS lemunicipio, tpv_almacen.logotipo as logo, tpv_almacen.telefono as letelefono, tpv_almacen.descripcion as sucursal"))
                    ->leftjoin('tpv_almacen','sys_empresa.id','=','tpv_almacen.id_sys_empresa')
                    ->leftjoin('tpv_pedido','tpv_pedido.id_tpv_almacen','=','tpv_almacen.id')
                    ->leftjoin('sys_direccion','sys_direccion.id','=','tpv_almacen.id_sys_direccion')
                    ->leftjoin('cat_pais','cat_pais.clave','=','sys_direccion.pais')
                    ->leftjoin('cat_estado','cat_estado.id','=','sys_direccion.estado')
                    ->leftjoin('cat_municipio','cat_municipio.id','=','sys_direccion.municipio')
                    ->where('tpv_pedido.id','=',$id)
                    ->get();
                    
        return $result;
    }   
    
    public function ticketTexto($id,$tipodoc){
        //dd($id,$tipodoc);
        $result = DB::table('tpv_notaimpresion')
                    ->select(
                        DB::raw("tpv_notaimpresion.*,cat_tipodoc.descripcion as tipodoc"))
                    ->join('tpv_almacen','tpv_notaimpresion.id_tpv_almacen','=','tpv_almacen.id')
                    ->join('tpv_pedido','tpv_pedido.id_tpv_almacen','=','tpv_almacen.id')
                    ->leftjoin('cat_tipodoc','tpv_notaimpresion.id_cat_tipodoc','=','cat_tipodoc.id')
                    ->where('tpv_pedido.id','=',$id)
                    ->where('tpv_notaimpresion.id_cat_tipodoc','=',$tipodoc)
                    ->where('tpv_notaimpresion.status','=',1)
                    ->get();
                    
        return $result;
    }

    public function ticketCabeceraCotizacionCredito($id,$tipodoc){
        $result = DB::table('sys_empresa')
                    ->select(
                        DB::raw("sys_empresa.*, sys_direccion.calle AS ledireccion, sys_direccion.cp AS lecp, sys_direccion.numexterior AS lenumExterior, sys_direccion.colonia AS lecolonia, cat_pais.descripcion AS lepais, cat_estado.descripcion AS leestado, cat_municipio.descripcion AS lemunicipio, tpv_almacen.logotipo as logo, tpv_almacen.telefono as letelefono, tpv_almacen.descripcion as sucursal"))
                    ->join('tpv_almacen','sys_empresa.id','=','tpv_almacen.id_sys_empresa')
                    ->join('tpv_cotizacioncredito','tpv_cotizacioncredito.id_tpv_almacen','=','tpv_almacen.id')
                    ->join('sys_direccion','sys_direccion.id','=','tpv_almacen.id_sys_direccion')
                    ->join('cat_pais','cat_pais.clave','=','sys_direccion.pais')
                    ->join('cat_estado','cat_estado.id','=','sys_direccion.estado')
                    ->join('cat_municipio','cat_municipio.id','=','sys_direccion.municipio')
                    ->where('tpv_cotizacioncredito.id','=',$id)
                    ->get();
                    
        return $result;
    }   
    
    public function ticketTextoCotizacionCredito($id,$tipodoc){
        $result = DB::table('tpv_notaimpresion')
                    ->select(
                        DB::raw("tpv_notaimpresion.*,cat_tipodoc.descripcion as tipodoc"))
                    ->join('tpv_almacen','tpv_notaimpresion.id_tpv_almacen','=','tpv_almacen.id')
                    ->join('tpv_cotizacioncredito','tpv_cotizacioncredito.id_tpv_almacen','=','tpv_almacen.id')
                    ->join('cat_tipodoc','tpv_notaimpresion.id_cat_tipodoc','=','cat_tipodoc.id')
                    ->where('tpv_cotizacioncredito.id','=',$id)
                    ->where('tpv_notaimpresion.id_cat_tipodoc','=',$tipodoc)
                    ->where('tpv_notaimpresion.status','=',1)
                    ->get();
                    
        return $result;
    }

    public function getIDPedido($serie,$folio,$usuario,$turno){
        $result = DB::table('tpv_pedido')
                    //->where('tpv_pedido.id_sys_usuario','=',$usuario)
                    //->where('tpv_pedido.id_tpv_turno','=',$turno)
                    ->where('tpv_pedido.serie','=',$serie)
                    ->where('tpv_pedido.folio','=',$folio)
                    ->get();
                    
        return $result;
    }
    
    public function ticketFormaPago($id,$tipodoc){
        $result = DB::table('tpv_pedidoformapago')
                    ->select(DB::raw("tpv_pedidoformapago.*,sat_formapago.descripcion as tipo, sat_banco.descripcion as banco, sat_mesessinintereses.descripcion as meses"))
                    ->leftjoin('sat_formapago','tpv_pedidoformapago.id_sat_formapago','=','sat_formapago.id')
                    ->leftjoin('sat_banco','tpv_pedidoformapago.id_sat_banco','=','sat_banco.id')
                    ->leftjoin('sat_mesessinintereses', 'tpv_pedidoformapago.id_tpv_bancomensualidad', '=', 'sat_mesessinintereses.id')
                    ->where('tpv_pedidoformapago.id_tpv_pedido','=',$id)
                    //->where('tpv_pedidoformapago.status','=',1)
                    ->get();
                    
        return $result;
    }

    public function ticketRemision($id,$tipodoc,$dbnomina){
        $result = DB::table('tpv_pedido')
        ->select(DB::raw("tpv_pedido.id as id,
                     tpv_pedido.serie as serie,
                     tpv_pedido.folio as folio,
                     tpv_pedido.fecha as fecha,
                     tpv_pedido.hora as hora,
                     tpv_pedido.subtotal as subtotal,
                     tpv_pedido.descuento as descuento,
                     tpv_pedido.iva as iva,
                     tpv_pedido.total as total,
                     tpv_pedido.efectivo as efectivo,
                     tpv_pedido.cambio as cambio,
                     tpv_pedido.anticipo as anticipo,
                     tpv_pedido.isAnticipo as isAnticipo,
                     tpv_pedido.isLiquidacion as isLiquidacion,
                     tpv_pedido.fechaLiquidacion as fechaLiquidacion,
                     tpv_pedido.id_sat_metodopago as metodopago,
                     tpv_pedido.id_cat_tipodoc as id_cat_tipodoc,
                     tpv_pedido.observaciones as observaciones,
                     tpv_pedido.numpagos as numpagos,
                     tpv_pedidodetalleserie.numeroserie as numeroserie,
                     con_cxcformaspago.descripcion as formapago,
                     cat_periodicidadpago.descripcion as periodicidad,
                     pusuarios.idempleado as id_tpv_usuario,
                     pusuarios.username as usuario,
                     tpv_cliente.id as id_tpv_cliente,
                     sys_persona.nombre as cliente,
                     tpv_almacen.id as id_tpv_almacen,
                     tpv_almacen.descripcion as almacen,
                     tpv_turno.id as id_tpv_turno,
                     tpv_turno.descripcion as turno,
                     tpv_pedido.id_tpv_vendedor as id_tpv_vendedor,
                     pu.nombre as vendedor,
                     tpv_vendedorcomisiones.codigovendedor as codigovendedor,
                     tpv_articuloalmacen.id as idarticuloalmacen,
                     tpv_articulo.id as idarticulo,
                     tpv_articulo.codigo as codigo,
                     tpv_articulo.codigoproveedor as codigoproveedor,
                     tpv_articulo.imagen as imagen,
                     tpv_pedido.seriearticulo as seriearticulo,
                     sat_unidadmedida.descripcion as unidadmedida,
                     tpv_pedidodetalle.precio as precio,
                     SUM(tpv_pedidodetalleimpuesto.monto) as impuesto,
                     tpv_pedidodetalle.id as idpedidodetalle,
                     tpv_pedidodetalle.id_tpv_articuloprecio as idprecio,
                     tpv_pedidodetalle.cantidad as cantidad,
                     tpv_pedidodetalle.descripcion as descripcioncorta,
                     tpv_articuloapartado.cantidadsolicitada as cantidadsolicitada,
                     tpv_articuloapartado.cantidadasignada as cantidadasignada,
                     SUM(tpv_pedidodetalle.total) as detalletotal,
                     SUM(tpv_pedidodetalle.descuento) as detalledescuento"))
        ->join($dbnomina.'.pusuarios','tpv_pedido.id_sys_usuario','=','pusuarios.idempleado')
        ->join('tpv_cliente','tpv_pedido.id_tpv_cliente','=','tpv_cliente.id')
        ->join('sys_persona','tpv_cliente.id_sys_persona','=','sys_persona.id')
        ->join('tpv_almacen','tpv_pedido.id_tpv_almacen','=','tpv_almacen.id')
        ->join('tpv_turno','tpv_pedido.id_tpv_turno','=','tpv_turno.id')
        ->join('tpv_vendedorcomisiones','tpv_pedido.id_tpv_vendedor','=','tpv_vendedorcomisiones.id')
        ->join($dbnomina.'.pusuarios AS pu','tpv_vendedorcomisiones.id_tpv_vendedor','=','pu.idempleado')
        ->join('tpv_pedidodetalle','tpv_pedido.id','=','tpv_pedidodetalle.id_tpv_pedido')
        ->leftjoin('tpv_articuloapartado','tpv_pedidodetalle.id','=','tpv_articuloapartado.id_tpv_pedidodetalle')
        ->join('tpv_articuloalmacen','tpv_pedidodetalle.id_tpv_articuloalmacen','=','tpv_articuloalmacen.id')
        ->join('tpv_articulo','tpv_articuloalmacen.id_tpv_articulo','=','tpv_articulo.id')
        ->join('sat_unidadmedida', 'tpv_articulo.id_sat_unidadmedida', '=', 'sat_unidadmedida.id')
        ->join('tpv_pedidodetalleimpuesto','tpv_pedidodetalle.id','=','tpv_pedidodetalleimpuesto.id_tpv_pedidodetalle')
        ->leftjoin('cat_periodicidadpago', 'tpv_pedido.id_cat_periodicidadpago', 'cat_periodicidadpago.id')
        ->leftjoin('con_cxcformaspago', 'tpv_pedido.id_con_cxcformaspago', 'con_cxcformaspago.id')
        ->leftjoin('tpv_pedidodetalleserie', 'tpv_pedidodetalle.id', '=', 'tpv_pedidodetalleserie.id_tpv_pedidodetalle')
        ->where('tpv_pedido.id','=',$id)
        ->groupBy('tpv_articulo.id')
        ->get();
        //dd($result, $id);
        return $result;
    }

    public function ticketRemisionCotizacionCredito($id,$tipodoc,$dbnomina){
        $result = DB::table('tpv_cotizacioncredito')
        ->select(DB::raw("tpv_cotizacioncredito.id as id,
                    tpv_cotizacioncredito.folio as folio,
                    tpv_cotizacioncredito.fecha as fecha,
                    tpv_cotizacioncredito.hora as hora,
                    tpv_cotizacioncredito.subtotal as subtotal,
                    tpv_cotizacioncredito.descuento as descuento,
                    tpv_cotizacioncredito.iva as iva,
                    tpv_cotizacioncredito.total as total,
                    tpv_cotizacioncredito.id_sat_metodopago as metodopago,
                    tpv_cotizacioncredito.id_cat_tipodoc as id_cat_tipodoc,
                    tpv_cotizacioncredito.numpagos as numpagos,
                    '' as serie,
                    '' as numeroserie,
                    '' as fechaLiquidacion,
                    tpv_cotizacioncredito.enganche as anticipo,
                    '' as observaciones,
                     con_cxcformaspago.descripcion as formapago,
                     cat_periodicidadpago.descripcion as periodicidad,
                     pusuarios.idempleado as id_tpv_usuario,
                     pusuarios.username as usuario,
                     tpv_cliente.id as id_tpv_cliente,
                     sys_persona.nombre as cliente,
                     tpv_almacen.id as id_tpv_almacen,
                     tpv_almacen.descripcion as almacen,
                     tpv_turno.id as id_tpv_turno,
                     tpv_turno.descripcion as turno,
                     tpv_cotizacioncredito.id_tpv_vendedor as id_tpv_vendedor,
                     pu.nombre as vendedor,
                     tpv_vendedorcomisiones.codigovendedor as codigovendedor,
                     tpv_articuloalmacen.id as idarticuloalmacen,
                     tpv_articulo.id as idarticulo,
                     tpv_articulo.codigo as codigo,
                     tpv_articulo.codigoproveedor as codigoproveedor,
                     tpv_articulo.descripcioncorta as descripcioncorta,
                     tpv_articulo.imagen as imagen,
                     sat_unidadmedida.descripcion as unidadmedida,
                     tpv_cotizacioncreditodetalle.precio as precio,
                     tpv_cotizacioncreditodetalle.id as idcotizacioncreditodetalle,
                     tpv_cotizacioncreditodetalle.cantidad as cantidad,
                     SUM(tpv_cotizacioncreditodetalle.total) as detalletotal,
                     SUM(tpv_cotizacioncreditodetalle.descuento) as detalledescuento"))
        ->leftjoin($dbnomina.'.pusuarios','tpv_cotizacioncredito.id_sys_usuario','=','pusuarios.idempleado')
        ->leftjoin('tpv_cliente','tpv_cotizacioncredito.id_tpv_cliente','=','tpv_cliente.id')
        ->leftjoin('sys_persona','tpv_cliente.id_sys_persona','=','sys_persona.id')
        ->leftjoin('tpv_almacen','tpv_cotizacioncredito.id_tpv_almacen','=','tpv_almacen.id')
        ->leftjoin('tpv_turno','tpv_cotizacioncredito.id_tpv_turno','=','tpv_turno.id')
        ->leftjoin('tpv_vendedorcomisiones','tpv_cotizacioncredito.id_tpv_vendedor','=','tpv_vendedorcomisiones.id')
        ->leftjoin($dbnomina.'.pusuarios AS pu','tpv_vendedorcomisiones.id_tpv_vendedor','=','pu.idempleado')
        ->leftjoin('tpv_cotizacioncreditodetalle','tpv_cotizacioncredito.id','=','tpv_cotizacioncreditodetalle.id_tpv_cotizacioncredito')
        ->leftjoin('tpv_articuloalmacen','tpv_cotizacioncreditodetalle.id_tpv_articuloalmacen','=','tpv_articuloalmacen.id')
        ->leftjoin('tpv_articulo','tpv_articuloalmacen.id_tpv_articulo','=','tpv_articulo.id')
        ->leftjoin('sat_unidadmedida', 'tpv_articulo.id_sat_unidadmedida', '=', 'sat_unidadmedida.id')
        ->leftjoin('cat_periodicidadpago', 'tpv_cotizacioncredito.id_cat_periodicidadpago', 'cat_periodicidadpago.id')
        ->leftjoin('con_cxcformaspago', 'tpv_cotizacioncredito.id_con_cxcformaspago', 'con_cxcformaspago.id')
        ->where('tpv_cotizacioncredito.id','=',$id)
        ->groupBy('tpv_articulo.id')
        ->get();

        return $result;
    }

    public function getPagosCotizacionCredito($id) {
        $result = DB::table('tpv_cotizacioncreditoamortizacion')
                ->select(DB::raw("tpv_cotizacioncreditoamortizacion.*, tpv_cotizacioncreditoamortizacion.fechapago as fecfija,
                                tpv_cotizacioncreditoamortizacion.montopago as pago"))
                ->where('id_tpv_cotizacioncredito','=',$id)
                ->get();
                
        return $result;
    }
    
    public function ticketApartado($id,$tipodoc,$dbnomina){
        /*$result = DB::table('tpv_pedido')
                    ->select(
                        DB::raw("tpv_pedido.id as id,
                                 tpv_pedido.serie as serie,
                                 tpv_pedido.folio as folio,
                                 tpv_pedido.fecha as fecha,
                                 tpv_pedido.hora as hora,
                                 tpv_pedido.subtotal as subtotal,
                                 tpv_pedido.descuento as descuento,
                                 tpv_pedido.iva as iva,
                                 tpv_pedido.total as total,
                                 tpv_pedido.efectivo as efectivo,
                                 tpv_pedido.cambio as cambio,
                                 tpv_pedido.id_sat_metodopago as metodopago,
                                 tpv_pedido.observaciones as observaciones,
                                 sys_usuario.id as id_tpv_usuario,
                                 sys_usuario.username as usuario,
                                 tpv_cliente.id as id_tpv_cliente,
                                 sys_persona.nombre as cliente,
                                 tpv_almacen.id as id_tpv_almacen,
                                 tpv_almacen.descripcion as almacen,
                                 tpv_turno.id as id_tpv_turno,
                                 tpv_turno.descripcion as turno,
                                 tpv_vendedor.id as id_tpv_vendedor,
                                 (SELECT sp.nombre FROM sys_persona sp INNER JOIN rhh_empleado rh ON sp.id=rh.id_sys_persona INNER JOIN tpv_vendedor ven ON rh.id=ven.id_rhh_empleado WHERE ven.id=tpv_vendedor.id) as vendedor,
                                 tpv_articuloalmacen.id as idarticuloalmacen,
                                 tpv_articulo.id as idarticulo,
                                 tpv_articulo.codigo as codigo,
                                 tpv_articulo.codigoproveedor as codigoproveedor,
                                 tpv_articulo.descripcioncorta as descripcioncorta,
                                 tpv_articulo.imagen as imagen,
                                 tpv_pedidodetalle.precio as precio,
                                 SUM(tpv_pedidodetalleimpuesto.monto) as impuesto,
                                 tpv_pedidodetalle.id as idpedidodetalle,
                                 tpv_pedidodetalle.id_tpv_articuloprecio as idprecio,
                                 SUM(tpv_pedidodetalle.cantidad) as cantidad,
                                 SUM(tpv_pedidodetalle.total) as detalletotal,
                                 SUM(tpv_pedidodetalle.descuento) as detalledescuento"))
                    ->join('sys_usuario','tpv_pedido.id_sys_usuario','=','sys_usuario.id')
                    ->join('tpv_cliente','tpv_pedido.id_tpv_cliente','=','tpv_cliente.id')
                    ->join('sys_persona','tpv_cliente.id_sys_persona','=','sys_persona.id')
                    ->join('tpv_almacen','tpv_pedido.id_tpv_almacen','=','tpv_almacen.id')
                    ->join('tpv_turno','tpv_pedido.id_tpv_turno','=','tpv_turno.id')
                    ->join('tpv_vendedor','tpv_pedido.id_tpv_vendedor','=','tpv_vendedor.id')
                    ->join('tpv_pedidodetalle','tpv_pedido.id','=','tpv_pedidodetalle.id_tpv_pedido')
                    ->join('tpv_articuloalmacen','tpv_pedidodetalle.id_tpv_articuloalmacen','=','tpv_articuloalmacen.id')
                    ->join('tpv_articulo','tpv_articuloalmacen.id_tpv_articulo','=','tpv_articulo.id')
                    ->join('tpv_pedidodetalleimpuesto','tpv_pedidodetalle.id','=','tpv_pedidodetalleimpuesto.id_tpv_pedidodetalle')
                    ->where('tpv_pedido.id','=',$id)
                    ->groupBy('tpv_articulo.id')
                    ->get();*/

        $result = DB::table('tpv_pedido')
                    ->select(DB::raw("tpv_pedido.id as id,
                                 tpv_pedido.serie as serie,
                                 tpv_pedido.folio as folio,
                                 tpv_pedido.fecha as fecha,
                                 tpv_pedido.hora as hora,
                                 tpv_pedido.subtotal as subtotal,
                                 tpv_pedido.descuento as descuento,
                                 tpv_pedido.iva as iva,
                                 tpv_pedido.total as total,
                                 tpv_pedido.efectivo as efectivo,
                                 tpv_pedido.cambio as cambio,
                                 tpv_pedido.anticipo as anticipo,
                                 tpv_pedido.isAnticipo as isAnticipo,
                                 tpv_pedido.isLiquidacion as isLiquidacion,
                                 tpv_pedido.fechaLiquidacion as fechaLiquidacion,
                                 tpv_pedido.id_sat_metodopago as metodopago,
                                 tpv_pedido.id_cat_tipodoc as id_cat_tipodoc,
                                 tpv_pedido.observaciones as observaciones,
                                 pusuarios.idempleado as id_tpv_usuario,
                                 pusuarios.username as usuario,
                                 tpv_cliente.id as id_tpv_cliente,
                                 sys_persona.nombre as cliente,
                                 tpv_almacen.id as id_tpv_almacen,
                                 tpv_almacen.descripcion as almacen,
                                 tpv_turno.id as id_tpv_turno,
                                 tpv_turno.descripcion as turno,
                                 tpv_pedido.id_tpv_vendedor as id_tpv_vendedor,
                                 pu.nombre as vendedor,
                                 tpv_vendedorcomisiones.codigovendedor as codigovendedor,
                                 tpv_articuloalmacen.id as idarticuloalmacen,
                                 tpv_articulo.id as idarticulo,
                                 tpv_articulo.codigo as codigo,
                                 tpv_articulo.codigoproveedor as codigoproveedor,
                                 tpv_articulo.descripcioncorta as descripcioncorta,
                                 tpv_articulo.imagen as imagen,
                                 tpv_pedido.seriearticulo as seriearticulo,
                                 tpv_pedidodetalleserie.numeroserie as numeroserie,
                                 sat_unidadmedida.descripcion as unidadmedida,
                                 tpv_pedidodetalle.precio as precio,
                                 SUM(tpv_pedidodetalleimpuesto.monto) as impuesto,
                                 tpv_pedidodetalle.id as idpedidodetalle,
                                 tpv_pedidodetalle.id_tpv_articuloprecio as idprecio,
                                 tpv_pedidodetalle.cantidad as cantidad,
                                 tpv_articuloapartado.cantidadsolicitada as cantidadsolicitada,
                                 tpv_articuloapartado.cantidadasignada as cantidadasignada,
                                 SUM(tpv_pedidodetalle.total) as detalletotal,
                                 SUM(tpv_pedidodetalle.descuento) as detalledescuento"))
                    ->join($dbnomina.'.pusuarios','tpv_pedido.id_sys_usuario','=','pusuarios.idempleado')
                    ->join('tpv_cliente','tpv_pedido.id_tpv_cliente','=','tpv_cliente.id')
                    ->join('sys_persona','tpv_cliente.id_sys_persona','=','sys_persona.id')
                    ->join('tpv_almacen','tpv_pedido.id_tpv_almacen','=','tpv_almacen.id')
                    ->join('tpv_turno','tpv_pedido.id_tpv_turno','=','tpv_turno.id')
                    ->join('tpv_vendedorcomisiones','tpv_pedido.id_tpv_vendedor','=','tpv_vendedorcomisiones.id')
                    ->join($dbnomina.'.pusuarios AS pu','tpv_vendedorcomisiones.id_tpv_vendedor','=','pu.idempleado')
                    ->join('tpv_pedidodetalle','tpv_pedido.id','=','tpv_pedidodetalle.id_tpv_pedido')
                    ->join('tpv_articuloapartado','tpv_pedidodetalle.id','=','tpv_articuloapartado.id_tpv_pedidodetalle')
                    ->join('tpv_articuloalmacen','tpv_pedidodetalle.id_tpv_articuloalmacen','=','tpv_articuloalmacen.id')
                    ->join('tpv_articulo','tpv_articuloalmacen.id_tpv_articulo','=','tpv_articulo.id')
                    ->join('sat_unidadmedida', 'tpv_articulo.id_sat_unidadmedida', '=', 'sat_unidadmedida.id')
                    ->join('tpv_pedidodetalleimpuesto','tpv_pedidodetalle.id','=','tpv_pedidodetalleimpuesto.id_tpv_pedidodetalle')
                    ->leftjoin('tpv_pedidodetalleserie', 'tpv_pedidodetalle.id', '=', 'tpv_pedidodetalleserie.id_tpv_pedidodetalle')
                    ->where('tpv_pedido.id','=',$id)
                    ->groupBy('tpv_articulo.id');

        $resultAnticipo = DB::table('tpv_pedido')
                    ->select(DB::raw("tpv_pedido.id as id,
                                 tpv_pedido.serie as serie,
                                 tpv_pedido.folio as folio,
                                 tpv_pedido.fecha as fecha,
                                 tpv_pedido.hora as hora,
                                 tpv_pedido.subtotal as subtotal,
                                 tpv_pedido.descuento as descuento,
                                 tpv_pedido.iva as iva,
                                 tpv_pedido.total as total,
                                 tpv_pedido.efectivo as efectivo,
                                 tpv_pedido.cambio as cambio,
                                 tpv_pedido.anticipo as anticipo,
                                 tpv_pedido.isAnticipo as isAnticipo,
                                 tpv_pedido.isLiquidacion as isLiquidacion,
                                 tpv_pedido.fechaLiquidacion as fechaLiquidacion,
                                 tpv_pedido.id_sat_metodopago as metodopago,
                                 tpv_pedido.id_cat_tipodoc as id_cat_tipodoc,
                                 tpv_pedido.observaciones as observaciones,
                                 pusuarios.idempleado as id_tpv_usuario,
                                 pusuarios.username as usuario,
                                 tpv_cliente.id as id_tpv_cliente,
                                 sys_persona.nombre as cliente,
                                 tpv_almacen.id as id_tpv_almacen,
                                 tpv_almacen.descripcion as almacen,
                                 tpv_turno.id as id_tpv_turno,
                                 tpv_turno.descripcion as turno,
                                 tpv_pedido.id_tpv_vendedor as id_tpv_vendedor,
                                 pu.nombre as vendedor,
                                 tpv_vendedorcomisiones.codigovendedor as codigovendedor,
                                 tpv_articuloapartado.id_tpv_articuloalmacen as idarticuloalmacenapartado,
                                 NULL as idarticuloapartado,
                                 tpv_articuloapartado.codigo as codigo,
                                 tpv_articuloapartado.codigo as codigoproveedor,
                                 tpv_articuloapartado.descripcion as descripcioncorta,
                                 tpv_articuloapartado.codigo as imagen,
                                 tpv_pedido.seriearticulo as seriearticulo,
                                 tpv_pedidodetalleserie.numeroserie as numeroserie,
                                 'Pieza' as unidadmedida,
                                 tpv_pedidodetalle.precio as precio,
                                 tpv_articuloapartado.precio-(tpv_articuloapartado.precio/1.16) as impuesto,
                                 tpv_pedidodetalle.id as idpedidodetalle,
                                 tpv_pedidodetalle.id_tpv_articuloprecio as idprecio,
                                 tpv_pedidodetalle.cantidad as cantidad,
                                 tpv_articuloapartado.cantidadsolicitada as cantidadsolicitada,
                                 tpv_articuloapartado.cantidadasignada as cantidadasignada,
                                 tpv_pedidodetalle.total as detalletotal,
                                 tpv_pedidodetalle.descuento as detalledescuento"))
                    ->join($dbnomina.'.pusuarios','tpv_pedido.id_sys_usuario','=','pusuarios.idempleado')
                    ->join('tpv_cliente','tpv_pedido.id_tpv_cliente','=','tpv_cliente.id')
                    ->join('sys_persona','tpv_cliente.id_sys_persona','=','sys_persona.id')
                    ->join('tpv_almacen','tpv_pedido.id_tpv_almacen','=','tpv_almacen.id')
                    ->join('tpv_turno','tpv_pedido.id_tpv_turno','=','tpv_turno.id')
                    ->join('tpv_vendedorcomisiones','tpv_pedido.id_tpv_vendedor','=','tpv_vendedorcomisiones.id')
                    ->join($dbnomina.'.pusuarios AS pu','tpv_vendedorcomisiones.id_tpv_vendedor','=','pu.idempleado')
                    ->join('tpv_pedidodetalle','tpv_pedido.id','=','tpv_pedidodetalle.id_tpv_pedido')
                    ->leftjoin('tpv_articuloapartado','tpv_pedidodetalle.id','=','tpv_articuloapartado.id_tpv_pedidodetalle')
                    ->leftjoin('tpv_pedidodetalleserie', 'tpv_pedidodetalle.id', '=', 'tpv_pedidodetalleserie.id_tpv_pedidodetalle')
                    ->where('tpv_pedido.id','=',$id)
                    ->where('tpv_articuloapartado.id_tpv_articuloalmacen','=',null)
                    ->orderBy('tpv_articuloapartado.id','desc'); 

        $unionResult = $result->union($resultAnticipo)->get();               
        return $unionResult;
    }
    
    public function getDocumentos($fecha,$cliente,$almacenes,$dbnomina,$fechafin,$articulo){
        //dd($fecha,$cliente,$almacenes,$dbnomina,$fechafin,$articulo);
        $result = DB::table('tpv_pedido')
                    ->select(DB::raw("IFNULL(cat_tipodoc.descripcion,'') as tipodoc,
                                    tpv_pedido.id as id,
                                    tpv_pedido.status as status,
                                    tpv_pedido.serie as serie,
                                    tpv_pedido.folio as folio,
                                    tpv_pedido.fecha as fecha,
                                    tpv_pedido.hora as hora,
                                    tpv_pedido.subtotal as subtotal,
                                    tpv_pedido.descuento as descuento,
                                    tpv_pedido.iva as iva,
                                    tpv_pedido.total as total,
                                    tpv_pedido.anticipo as anticipo,
                                    tpv_pedido.isAnticipo as isAnticipo,
                                    tpv_pedido.isLiquidacion as isLiquidacion,
                                    tpv_pedido.fechaLiquidacion as fechaLiquidacion,
                                    tpv_pedido.id_sat_metodopago as metodopago,
                                    tpv_pedido.observaciones as observaciones,
                                    tpv_pedido.id_cat_tipodoc,
                                    pusuarios.idempleado as id_tpv_usuario,
                                    pusuarios.username as usuario,
                                    tpv_cliente.id as id_tpv_cliente,
                                    sys_persona.nombre as cliente,
                                    tpv_almacen.id as id_tpv_almacen,
                                    tpv_almacen.descripcion as almacen,
                                    tpv_turno.id as id_tpv_turno,
                                    tpv_turno.descripcion as turno,
                                    tpv_pedido.id_tpv_vendedor as id_tpv_vendedor,
                                    pempleado.nombre as vendedor,
                                    tpv_pedidodetalle.codigo,
                                    tpv_pedidodetalle.descripcion,
                                    '' as seriefactura,
                                    '' as foliofactura"))
                    ->leftjoin($dbnomina.'.pusuarios','tpv_pedido.id_sys_usuario','=','pusuarios.idempleado')
                    ->leftjoin('tpv_cliente','tpv_pedido.id_tpv_cliente','=','tpv_cliente.id')
                    ->leftjoin('sys_persona','tpv_cliente.id_sys_persona','=','sys_persona.id')
                    ->leftjoin('tpv_almacen','tpv_pedido.id_tpv_almacen','=','tpv_almacen.id')
                    ->leftjoin('tpv_turno','tpv_pedido.id_tpv_turno','=','tpv_turno.id')
                    ->leftjoin('tpv_vendedorcomisiones','tpv_pedido.id_tpv_vendedor','=','tpv_vendedorcomisiones.id')
                    ->leftjoin($dbnomina.'.pempleado','tpv_vendedorcomisiones.id_tpv_vendedor','=','pempleado.nip')
                    ->leftjoin('cat_tipodoc','tpv_pedido.status','=','cat_tipodoc.id')
                    ->join("tpv_pedidodetalle", "tpv_pedido.id", "=", "tpv_pedidodetalle.id_tpv_pedido")
                    //->leftjoin('tpv_factura','tpv_pedido.id','=','tpv_factura.id_tpv_pedido')
                    ->whereIn('tpv_almacen.id',$almacenes)
                    ->where('tpv_pedido.fecha','>=',$fecha)
                    ->where('tpv_pedido.fecha','<=',$fechafin)
                    ->where('sys_persona.nombre','like','%'.$cliente.'%')
                    //->where('tpv_factura.status',1)
                    ->whereIn('tpv_pedido.status',[1,2,3,4,13,14,99])
                    ->where(function($q) use($articulo){
                        $q->where("tpv_pedidodetalle.codigo", "LIKE", "%".$articulo."%")
                        ->orWhere("tpv_pedidodetalle.descripcion", "LIKE", "%".$articulo."%");
                    })
                    ->orderBy('tpv_pedido.id','desc')
                    ->groupBy('tpv_pedido.id')
                    ->get();
        //dd($result, $dbnomina, $almacenes, $fecha, $cliente); 
        
        foreach ($result as $key => $item) {
            if($item->status==3 || $item->status==99) {
                $status = $item->status==3?1:99;
                $fact = DB::table("tpv_factura")
                            ->where("id_tpv_pedido", $item->id)
                            ->where("status", $status)
                            ->first();
                if(isset($fact)) {
                    $item->seriefactura = $fact->serie;
                    $item->foliofactura = $fact->folio;
                }
            }
        }
        return $result;
    }
    
    public function getDocumento($id,$dbnomina){
        $result = DB::table('tpv_pedido')
                    ->select(DB::raw("cat_tipodoc.descripcion as tipodoc,
                                 tpv_pedido.id as id,
                                 tpv_pedido.status as status,
                                 tpv_pedido.serie as serie,
                                 tpv_pedido.folio as folio,
                                 tpv_pedido.fecha as fecha,
                                 tpv_pedido.hora as hora,
                                 tpv_pedido.subtotal as subtotal,
                                 tpv_pedido.descuento as descuento,
                                 tpv_pedido.iva as iva,
                                 tpv_pedido.total as total,
                                 tpv_pedido.isAnticipo as isAnticipo,
                                 tpv_pedido.anticipo as anticipo,
                                 tpv_pedido.id_cat_tipodoc as id_cat_tipodoc,
                                 tpv_pedido.id_sat_metodopago as metodopago,
                                 tpv_pedido.id_con_cxcformaspago,
                                 con_cxcformaspago.descripcion as cxcformaspago,
                                 tpv_pedido.observaciones as observaciones,
                                 '' as nameCarpeta,
                                 pusuarios.idempleado as id_tpv_usuario,
                                 pusuarios.username as usuario,
                                 tpv_cliente.id as id_tpv_cliente,
                                 sys_persona.nombre as cliente,
                                 tpv_almacen.id as id_tpv_almacen,
                                 tpv_almacen.descripcion as almacen,
                                 tpv_turno.id as id_tpv_turno,
                                 tpv_turno.descripcion as turno,
                                 tpv_pedido.id_tpv_vendedor as id_tpv_vendedor,
                                 pu.nombre as vendedor,
                                 tpv_articuloalmacen.id as idarticuloalmacen,
                                 (tpv_articuloalmacen.existencia+tpv_articuloalmacen.enproceso) as existenciaactual,
                                 tpv_articulo.id as idarticulo,
                                 tpv_articulo.codigo as codigo,
                                 tpv_articulo.codigoproveedor as codigoproveedor,
                                 tpv_articulo.descripcioncorta as descripcioncorta,
                                 tpv_articulo.imagen as imagen,
                                 tpv_pedido.seriearticulo as seriearticulo,
                                 tpv_pedidodetalle.precio as precio,
                                 1 as disponible,
                                 tpv_pedidodetalleimpuesto.id_cat_impuesto,
                                 (cat_impuesto.tasa/100) as tasa,
                                 SUM(tpv_pedidodetalleimpuesto.monto) as impuesto,
                                 tpv_pedidodetalle.id as idpedidodetalle,
                                 tpv_pedidodetalle.id_tpv_articuloprecio as idprecio,
                                 tpv_pedidodetalle.cantidad as cantidad,
                                 tpv_articuloapartado.cantidadsolicitada as cantidadsolicitada,
                                 tpv_articuloapartado.cantidadasignada as cantidadasignada,
                                 tpv_pedidodetalle.total as detalletotal,
                                 tpv_pedidodetalle.descuento as detalledescuento"))
                    ->join($dbnomina.'.pusuarios','tpv_pedido.id_sys_usuario','=','pusuarios.idempleado')
                    ->leftjoin('tpv_cliente','tpv_pedido.id_tpv_cliente','=','tpv_cliente.id')
                    ->join('sys_persona','tpv_cliente.id_sys_persona','=','sys_persona.id')
                    ->join('tpv_almacen','tpv_pedido.id_tpv_almacen','=','tpv_almacen.id')
                    ->leftjoin('tpv_turno','tpv_pedido.id_tpv_turno','=','tpv_turno.id')
                    ->leftjoin('con_cxcformaspago', 'tpv_pedido.id_con_cxcformaspago', '=', 'con_cxcformaspago.id')
                    ->leftjoin('tpv_vendedorcomisiones','tpv_pedido.id_tpv_vendedor','=','tpv_vendedorcomisiones.id')
                    ->leftjoin($dbnomina.'.pusuarios AS pu','tpv_vendedorcomisiones.id_tpv_vendedor','=','pu.idempleado')
                    ->leftjoin('tpv_pedidodetalle','tpv_pedido.id','=','tpv_pedidodetalle.id_tpv_pedido')
                    ->leftjoin('tpv_articuloapartado','tpv_pedidodetalle.id','=','tpv_articuloapartado.id_tpv_pedidodetalle')
                    ->join('tpv_articuloalmacen','tpv_pedidodetalle.id_tpv_articuloalmacen','=','tpv_articuloalmacen.id')
                    ->join('tpv_articulo','tpv_articuloalmacen.id_tpv_articulo','=','tpv_articulo.id')
                    ->leftjoin('tpv_pedidodetalleimpuesto','tpv_pedidodetalle.id','=','tpv_pedidodetalleimpuesto.id_tpv_pedidodetalle')
                    ->leftjoin('cat_impuesto','tpv_pedidodetalleimpuesto.id_cat_impuesto','=','cat_impuesto.id')
                    ->leftjoin('cat_tipodoc','tpv_pedido.status','=','cat_tipodoc.id')
                    ->where('tpv_pedido.id','=',$id)
                    ->groupBy('tpv_articulo.id')
                    ->orderBy('tpv_pedido.id','desc');
                    

        $resultAnticipo = DB::table('tpv_pedido')
                    ->select(DB::raw("cat_tipodoc.descripcion as tipodoc,
                                 tpv_pedido.id as id,
                                 tpv_pedido.status as status,
                                 tpv_pedido.serie as serie,
                                 tpv_pedido.folio as folio,
                                 tpv_pedido.fecha as fecha,
                                 tpv_pedido.hora as hora,
                                 tpv_pedido.subtotal as subtotal,
                                 tpv_pedido.descuento as descuento,
                                 tpv_pedido.iva as iva,
                                 tpv_pedido.total as total,
                                 tpv_pedido.isAnticipo as isAnticipo,
                                 tpv_pedido.anticipo as anticipo,
                                 tpv_pedido.id_cat_tipodoc as id_cat_tipodoc,
                                 tpv_pedido.id_sat_metodopago as metodopago,
                                 tpv_pedido.id_con_cxcformaspago,
                                 con_cxcformaspago.descripcion as cxcformaspago,
                                 tpv_pedido.observaciones as observaciones,
                                 '' as nameCarpeta,
                                 pusuarios.idempleado as id_tpv_usuario,
                                 pusuarios.username as usuario,
                                 tpv_cliente.id as id_tpv_cliente,
                                 sys_persona.nombre as cliente,
                                 tpv_almacen.id as id_tpv_almacen,
                                 tpv_almacen.descripcion as almacen,
                                 tpv_turno.id as id_tpv_turno,
                                 tpv_turno.descripcion as turno,
                                 tpv_pedido.id_tpv_vendedor as id_tpv_vendedor,
                                 pu.nombre as vendedor,
                                 tpv_articuloapartado.id_tpv_articuloalmacen as idarticuloalmacen,
                                 0 as existenciaactual,
                                 null as idarticulo,
                                 tpv_articuloapartado.codigo as codigo,
                                 tpv_articuloapartado.codigo as codigoproveedor,
                                 tpv_articuloapartado.descripcion as descripcioncorta,
                                 tpv_articuloapartado.codigo as imagen,
                                 tpv_pedido.seriearticulo as seriearticulo,
                                 tpv_pedidodetalle.precio as precio,
                                 1 as disponible,
                                 null as id_cat_impuesto,
                                 .16 as tasa,
                                 tpv_articuloapartado.precio-(tpv_articuloapartado.precio/1.16) as impuesto,
                                 tpv_pedidodetalle.id as idpedidodetalle,
                                 tpv_pedidodetalle.id_tpv_articuloprecio as idprecio,
                                 tpv_pedidodetalle.cantidad as cantidad,
                                 tpv_articuloapartado.cantidadsolicitada as cantidadsolicitada,
                                 tpv_articuloapartado.cantidadasignada as cantidadasignada,
                                 tpv_pedidodetalle.total as detalletotal,
                                 tpv_pedidodetalle.descuento as detalledescuento"))
                    ->join($dbnomina.'.pusuarios','tpv_pedido.id_sys_usuario','=','pusuarios.idempleado')
                    ->join('tpv_cliente','tpv_pedido.id_tpv_cliente','=','tpv_cliente.id')
                    ->join('sys_persona','tpv_cliente.id_sys_persona','=','sys_persona.id')
                    ->join('tpv_almacen','tpv_pedido.id_tpv_almacen','=','tpv_almacen.id')
                    ->join('tpv_turno','tpv_pedido.id_tpv_turno','=','tpv_turno.id')
                    ->leftjoin('con_cxcformaspago', 'tpv_pedido.id_con_cxcformaspago', '=', 'con_cxcformaspago.id')
                    ->join('tpv_vendedorcomisiones','tpv_pedido.id_tpv_vendedor','=','tpv_vendedorcomisiones.id')
                    ->join($dbnomina.'.pusuarios AS pu','tpv_vendedorcomisiones.id_tpv_vendedor','=','pu.idempleado')
                    ->join('tpv_pedidodetalle','tpv_pedido.id','=','tpv_pedidodetalle.id_tpv_pedido')
                    ->leftjoin('tpv_articuloapartado','tpv_pedidodetalle.id','=','tpv_articuloapartado.id_tpv_pedidodetalle')
                    ->leftjoin('cat_tipodoc','tpv_pedido.status','=','cat_tipodoc.id')
                    ->where('tpv_articuloapartado.id_tpv_pedido','=',$id)
                    ->where('tpv_articuloapartado.id_tpv_articuloalmacen', null)
                    ->groupBy('tpv_articuloapartado.id')
                    ->orderBy('tpv_pedido.id','desc');
                        
        $unionResult = $result->union($resultAnticipo)->get();     
        //dd($unionResult);          
        return $unionResult;
    }

    function afectaExistencia($idarticuloalmacen,$cantidad){
        DB::beginTransaction();
        $update2 = DB::table('tpv_articuloalmacen')
                    ->where('id','=',$idarticuloalmacen)
                    ->decrement('enproceso',$cantidad);
        if($update2>0){             
            DB::commit();
            return 1;
        }else{
            DB::rollBack();
            return 0;
        }
    }
    
    public function getSolicitudTraspasoAlmacen($data){
        //SELECT * FROM tpv_traspaso WHERE statusSolicitado = 1 AND id_tpv_almacendestino = 3
        $result = DB::table('tpv_traspaso')
                    ->where('statusSolicitado','=',1)
                    ->where('statusEnviado','=',0)
                    ->where('statusRecibido','=',0)
                    ->where('statusCancelado','=',0)
                    ->where('id_tpv_almacendestino','=',$data['almacenDestino'])
                    ->where('id_tpv_almacenorigen','=',$data['almacenOrigen'])
                    ->get();
                    
        return $result;
    }

    public function checkArticuloSolicitud($data){
        $result = DB::table('tpv_traspaso')
                    ->select(
                        DB::raw("tpv_traspasodet.id, tpv_traspasodet.cantidad"))
                    ->join('tpv_traspasodet', 'tpv_traspasodet.id_tpv_traspaso', '=', 'tpv_traspaso.id')
                    ->where('tpv_traspaso.statusSolicitado','=',1)
                    ->where('tpv_traspaso.statusEnviado','=',0)
                    ->where('tpv_traspaso.statusRecibido','=',0)
                    ->where('tpv_traspaso.id_tpv_almacendestino','=',$data['almacenDestino'])
                    ->where('tpv_traspaso.id_tpv_almacenorigen','=',$data['almacenOrigen'])
                    ->where('tpv_traspasodet.id_tpv_articulo', '=', $data['idArticulo'])
                    ->get();
                    
        return $result;
    }

    public function validarExistenciaStock($data) {
        $result = DB::table('tpv_articuloalmacen')
                    ->where('id','=',$data['idArticuloAlmacen'])
                    ->first();
                    
        return $result;
    }

    public function updateArticuloSolicitudTraspaso($articulo, $usuario, $idTraspasoDet, $cantidad, $idTraspaso){
        DB::beginTransaction();
        $update = DB::table('tpv_traspasodet')
                    ->where('id','=',$idTraspasoDet)
                    ->update(['costounitario' => $articulo['costoUnit'],
                            'cantidad' => $cantidad,
                            'costopromedio' => $articulo['costoUnit']*$cantidad,  
                            'iva' => ($articulo['costoUnit']*$cantidad)*$articulo['impuestoArticulo'],
                            'costopromediototal' => ($articulo['costoUnit']*$cantidad)*(1+$articulo['impuestoArticulo'])]);
        if($update>0){   
            $totales = DB::table('tpv_traspasodet')
                            ->select(DB::raw('SUM(cantidad) AS cant, SUM(costopromedio) AS subtotal, SUM(iva) AS iva, SUM(costopromediototal) AS total'))
                            ->where('id_tpv_traspaso', $idTraspaso)
                            ->get();
            $id = DB::table('tpv_traspaso')->where('id', $idTraspaso)->update(['subtotal' => $totales[0]->subtotal, 'iva' => $totales[0]->iva, 
                            'total' => $totales[0]->total, 'cantidad' => $totales[0]->cant]);   
            DB::commit();
            return 1;
        }else{
            DB::rollBack();
            return 0;
        }         
    }

    public function agregarArticuloSolicitudTraspaso($articulo, $usuario, $idTraspaso, $almacen, $turno) {
        DB::beginTransaction();

        $result = DB::table('tpv_traspasodet')
                ->where('id_tpv_traspaso','=',$idTraspaso)
                ->where('id_tpv_articulo','=',$articulo['idArticulo'])
                ->get();

        if(count($result)==0) { //Si no existe el articulo en la tabla, lo crea
            $id = DB::table('tpv_traspasodet')->insertGetId(
                [
                    'id_tpv_traspaso' => $idTraspaso,
                    'id_tpv_articulo' => $articulo['idArticulo'],
                    'costounitario' => $articulo['costoUnit'],
                    'cantidad' => $articulo['cantidad'],
                    'costopromedio' => $articulo['costo'],
                    'iva' => $articulo['iva'],
                    'costopromediototal' => $articulo['total']
                ]
            );
            if($id>0) {       
                $update1 = DB::table('tpv_folio')
                            ->where('id_sys_usuario','=',$usuario)
                            ->where('id_tpv_turno','=',$turno)
                            ->where('id_tpv_almacen','=',$almacen)
                            ->where('id_cat_operacion','=',4)
                            ->where('status','=',1)
                            ->increment('folio');
 
                $totales = DB::table('tpv_traspasodet')
                            ->select(DB::raw('SUM(cantidad) AS cant, SUM(costopromedio) AS subtotal, SUM(iva) AS iva, SUM(costopromediototal) AS total'))
                            ->where('id_tpv_traspaso', $idTraspaso)
                            ->get();
                $id = DB::table('tpv_traspaso')->where('id', $idTraspaso)->update(['subtotal' => $totales[0]->subtotal, 'iva' => $totales[0]->iva, 
                                'total' => $totales[0]->total, 'cantidad' => $totales[0]->cant, 'timestampSolicitado' => date('Y-m-d H:i:s')]);
                
                DB::commit();
                return 1;
            }else{
                DB::rollBack();
                return 0;
            }
        } 
        else { //Si lo encuentra, lo actualiza con la n cantidad ingresada
            $detTraspaso = $result[0];
            $costounitario = $detTraspaso->costounitario + $articulo['costoUnit'];
            $costopromedio = $detTraspaso->costopromedio + $articulo['costo'];
            $iva = $detTraspaso->iva + $articulo['iva'];
            $cantidad = $detTraspaso->cantidad + $articulo['cantidad'];
            $costopromediototal = $detTraspaso->costopromediototal + $articulo['total'];

            $update = DB::table('tpv_traspasodet')
                ->where('id_tpv_traspaso','=',$idTraspaso)->where('id_tpv_articulo','=',$articulo['idArticulo'])
                ->update(['costounitario' => $costounitario, 'iva' => $iva, 'costopromedio' => $costopromedio, 'cantidad' => $cantidad, 
                        'costopromediototal' => $costopromediototal]);

            if($update>0){  
                $update1 = DB::table('tpv_folio')
                            ->where('id_sys_usuario','=',$usuario)
                            ->where('id_tpv_turno','=',$turno)
                            ->where('id_tpv_almacen','=',$almacen)
                            ->where('id_cat_operacion','=',4)
                            ->where('status','=',1)
                            ->increment('folio');
                $totales = DB::table('tpv_traspasodet')
                            ->select(DB::raw('SUM(cantidad) AS cant, SUM(costopromedio) AS subtotal, SUM(iva) AS iva, SUM(costopromediototal) AS total'))
                            ->where('id_tpv_traspaso', $idTraspaso)
                            ->get();
                //dd($totales[0]);
                $id = DB::table('tpv_traspaso')->where('id', $idTraspaso)->update(['subtotal' => $totales[0]->subtotal, 'iva' => $totales[0]->iva, 
                                'total' => $totales[0]->total, 'cantidad' => $totales[0]->cant]);             
                DB::commit();
                return 1;
            }else{
                DB::rollBack();
                return 0;
            }
        } 
    }

    public function getAnticipoMinimo() {
        $result = DB::table('sys_parametros')
                    ->where('id', 1)
                    ->first();

        return $result;
    }

    public function validaExistenciaLiquidacion($idPedido) {
        $arrayCodigos = array();
        $result = DB::table('tpv_articuloapartado')
                    ->where('id_tpv_pedido', $idPedido)
                    ->where('status', 1)
                    ->get();

        foreach($result as $detalle) {
            //dd($detalle->id_tpv_articuloalmacen);
            /*$getExistencia = DB::table('tpv_articuloalmacen')
                                ->select(DB::raw('tpv_articuloalmacen.*, tpv_articulo.codigo, tpv_articulo.descripcion'))
                                ->join('tpv_articulo', 'tpv_articuloalmacen.id_tpv_articulo', '=', 'tpv_articulo.id')
                                ->where('tpv_articuloalmacen.id', $detalle->id_tpv_articuloalmacen)
                                ->where('tpv_articuloalmacen.status', 1)
                                ->first();*/
            if($detalle->cantidadasignada != 0) {
                
            } else {
                array_push($arrayCodigos, $detalle->codigo);
            }
        }
        return $arrayCodigos;
    }

    public function liquidarAnticipo($idPedido,$usuario,$turno,$idalmacen) {
        DB::beginTransaction();
        $result = DB::table('tpv_articuloapartado')
                ->where('id_tpv_pedido','=',$idPedido)
                ->get();

        $folio = $this->getSerieFolio($usuario,$turno,14,$idalmacen);
        if(count($folio)>0) {
            
            foreach($result as $apartado) {
                $update = DB::table('tpv_pedidodetalle')
                            ->where('id','=',$apartado->id_tpv_pedidodetalle)
                            ->update(['id_tpv_articuloalmacen' => $apartado->id_tpv_articuloalmacen, 
                                        'cantidad' => $apartado->cantidadasignada, 
                                        'precio' => $apartado->precio, 
                                        'subtotal' => $apartado->cantidadasignada*$apartado->precio, 
                                        'descuento' => $apartado->descuento, 
                                        'total' => ($apartado->cantidadasignada*$apartado->precio)-$apartado->descuento,
                                        'timestampliquidacion' => date('Y-m-d')." ".date('h:i:s')]);
                if($update==0) {
                    DB::rollBack();
                    return 0;
                }
            }
            $result2 = DB::table('tpv_pedidodetalle')
                ->where('id_tpv_pedido','=',$idPedido)
                ->get();

            $subtotal = 0;
            $descuento = 0;
            $iva = 0;
            $total = 0;

            foreach($result2 as $articulo) {
                $subtotal = $subtotal+(($articulo->cantidad*$articulo->precio)/1.16);
                $descuento = $descuento+$articulo->descuento;
                $iva = $iva+(($articulo->cantidad*$articulo->precio)-($articulo->cantidad*$articulo->precio)/1.16);
                $total = $total+(($articulo->cantidad*$articulo->precio)-$articulo->descuento);

                if($articulo->agregadoliquidacion == 1) {
                    DB::table('tpv_articuloalmacen')
                            ->where('id','=',$articulo->id_tpv_articuloalmacen)
                            ->decrement('existencia',$articulo->cantidad);                            
                    DB::table('tpv_articuloalmacen')
                            ->where('id','=',$articulo->id_tpv_articuloalmacen)
                            ->increment('enproceso',$articulo->cantidad);
                }
            }

            $updatePedido = DB::table('tpv_pedido')
                            ->where('id','=',$idPedido)
                            ->update(['id_cat_tipodoc' => 14, 
                                        'serie' => $folio[0]->serie,
                                        'folio' => $folio[0]->folio,
                                        'id_sat_metodopago' => 'PUE',
                                        'subtotal' => $subtotal,
                                        'descuento' => $descuento,
                                        'iva' => $iva,
                                        'total' => $total,
                                        'isAnticipo' => 0,
                                        'isLiquidacion' => 1,
                                        'id_sys_usuario_liquido' => $usuario,
                                        'fecha_liquido' => date("Y-m-d"),
                                        'status' => 14]);
            if($updatePedido>0) {
                $updateIncrement = DB::table('tpv_folio')
                                    ->where('id_sys_usuario','=',$usuario)
                                    ->where('id_tpv_turno','=',$turno)
                                    ->where('id_tpv_almacen','=',$idalmacen)
                                    ->where('id_cat_operacion','=',14)
                                    ->where('status','=',1)
                                    ->increment('folio');
                if($updateIncrement) {
                    DB::commit();
                    return 1;
                } else {
                    DB::rollBack();
                    return 'No se pudo incrementar el folio de liquidacion, comunicate con T.I.';
                }
            } else {
                DB::rollBack();
                return 'No se pudo convertir el anticipo a una liquidacion, comunicate con T.I.';
            }
        } else {
            DB::rollBack();
            return 'El usuario no cuenta con folio de liquidación, comunicate con T.I.';
        }
    }

    public function validaEngancheCliente($cliente, $valorenganche, $total, $serie, $folio) {
        //dd($cliente, $enganche, $total, $serie, $folio);
        DB::beginTransaction();
        $result = DB::table('tpv_pedidodetalle')
                    ->select(DB::raw('tpv_pedidodetalle.*, tpv_articulo.id as idArticulo, tpv_articulomarca.id_cat_grupomarca, SUM(tpv_pedidodetalle.total) as totalFinanciado, SUM(tpv_articuloprecio.precio)*1.16 as totalContado'))
                    ->join("tpv_pedido", "tpv_pedidodetalle.id_tpv_pedido", "=", "tpv_pedido.id")
                    ->join("tpv_articuloalmacen", "tpv_pedidodetalle.id_tpv_articuloalmacen", "=", "tpv_articuloalmacen.id")
                    ->join("tpv_articulo", "tpv_articuloalmacen.id_tpv_articulo", "=", "tpv_articulo.id")
                    ->leftjoin("tpv_articulomarca", "tpv_articulo.id_tpv_articulomarca", "=", "tpv_articulomarca.id")
                    ->leftjoin("tpv_articuloprecio", "tpv_articulo.id", "=", "tpv_articuloprecio.id_tpv_articulo")
                    ->where('tpv_pedido.serie','=',$serie)
                    ->where('tpv_pedido.folio','=',$folio)
                    ->where('tpv_articuloprecio.id_tpv_precio', 1)
                    ->first();
        //dd($result);
        if(isset($result)) {
            $enganche = DB::table('con_cxcsolicitudgrupoenganche')
                    ->select(DB::raw('con_cxcsolicitudgrupoenganche.*, cat_tipoenganche.descripcion as tipo'))
                    ->join("cat_tipoenganche", "con_cxcsolicitudgrupoenganche.id_cat_tipoenganche", "=", "cat_tipoenganche.id")
                    ->where('con_cxcsolicitudgrupoenganche.id_tpv_cliente','=',$cliente)
                    ->where('con_cxcsolicitudgrupoenganche.id_cat_grupomarca','=',$result->id_cat_grupomarca)
                    ->first();
            //dd($enganche);
            if(isset($enganche)) {
                if($enganche->id_cat_tipoenganche==1) { //SOBRE EL TOTAL CONTADO
                    $miniEnganche = $result->totalContado*($enganche->porcentajeenganche/100);
                }
                if($enganche->id_cat_tipoenganche==2) { //SOBRE EL TOTAL FINANCIADO
                    $miniEnganche = $result->totalFinanciado*($enganche->porcentajeenganche/100);
                }
                //dd($valorenganche, $miniEnganche);
                if($valorenganche >= $miniEnganche) {
                    $updatePedido = DB::table('tpv_pedido')
                                ->where('serie','=',$serie)
                                ->where('folio','=',$folio)
                                ->update(['anticipo' => $valorenganche, 'timestamp' => date('Y-m-d')." ".date('h:i:s'),]);
        
                    if($updatePedido>0) {
                        DB::commit();
                        return 1;
                    } else {
                        DB::rollBack();
                        return 'Ocurrio un detalle al ingresar el enganche al pedido, comunicate con el administrador del sistema';
                    }
                } else {
                    DB::rollBack();
                    return 'El enganche esta por debajo del minimo del cliente. El minimo es $'.round($miniEnganche, 2, PHP_ROUND_HALF_UP);
                }
            } else
                return 'El cliente no tiene configurado el porcentaje de enganche para el financiamiento. Comuniquese con el administrador del sistema.';    
        } else
            return 'El articulo no tiene registrada una marca para obtener el grupo de marca al que pertenece. Comuniquese con el administrador del sistema.';



        
        /*$result = DB::table('con_cxccliente')
                ->where('id_tpv_cliente','=',$cliente)
                ->get();
        if(count($result)>0) {
            $miniEnganche = $total*($result[0]->engancheminimo/100);
            if($enganche >= $miniEnganche) {
                $updatePedido = DB::table('tpv_pedido')
                            ->where('serie','=',$serie)
                            ->where('folio','=',$folio)
                            ->update(['anticipo' => $enganche, 'timestamp' => date('Y-m-d')." ".date('h:i:s'),]);
    
                if($updatePedido>0) {
                    DB::commit();
                    return 1;
                } else {
                    DB::rollBack();
                    return 'Ocurrio un detalle al ingresar el enganche al pedido, comunicate con el administrador del sistema';
                }
            } else {
                DB::rollBack();
                return 'El enganche esta por debajo del minimo del cliente, comunicate con T.I.';
            }
        }else{
            DB::rollBack();
            return 'No se encontro registro del cliente '.$cliente.' en cxccliente';
        }*/
    }    

    public function getMinimoEnganche($cliente, $total, $idPedido, $folio,$modalidadpago) {
        //dd($cliente, $total, $idPedido, $folio, $modalidadpago);
        if($modalidadpago!=34) { //34 SIGNIFICA QUE ES UNA VENTA A CREDITO POR DIAS
            $seriefolio = explode("-", $folio);
            $result = DB::table('tpv_pedidodetalle')
                        ->select(DB::raw('tpv_pedidodetalle.*, tpv_articulo.id as idArticulo, tpv_articulomarca.id_cat_grupomarca, SUM(tpv_pedidodetalle.total) as totalFinanciado, SUM(tpv_articuloprecio.precio)*1.16 as totalContado'))
                        ->join("tpv_pedido", "tpv_pedidodetalle.id_tpv_pedido", "=", "tpv_pedido.id")
                        ->join("tpv_articuloalmacen", "tpv_pedidodetalle.id_tpv_articuloalmacen", "=", "tpv_articuloalmacen.id")
                        ->join("tpv_articulo", "tpv_articuloalmacen.id_tpv_articulo", "=", "tpv_articulo.id")
                        ->leftjoin("tpv_articulomarca", "tpv_articulo.id_tpv_articulomarca", "=", "tpv_articulomarca.id")
                        ->leftjoin("tpv_articuloprecio", "tpv_articulo.id", "=", "tpv_articuloprecio.id_tpv_articulo")
                        ->where('tpv_pedido.serie','=',$seriefolio[0])
                        ->where('tpv_pedido.folio','=',$seriefolio[1])
                        ->where('tpv_articuloprecio.id_tpv_precio', 1)
                        ->first();
            //dd($result);
            if(isset($result)) {
                $enganche = DB::table('con_cxcsolicitudgrupoenganche')
                        ->select(DB::raw('con_cxcsolicitudgrupoenganche.*, cat_tipoenganche.descripcion as tipo'))
                        ->join("cat_tipoenganche", "con_cxcsolicitudgrupoenganche.id_cat_tipoenganche", "=", "cat_tipoenganche.id")
                        ->where('con_cxcsolicitudgrupoenganche.id_tpv_cliente','=',$cliente)
                        ->where('con_cxcsolicitudgrupoenganche.id_cat_grupomarca','=',$result->id_cat_grupomarca)
                        ->first();
                //dd($enganche);
                if(isset($enganche)) {
                    if($enganche->id_cat_tipoenganche==1) { //SOBRE EL TOTAL CONTADO
                        $miniEnganche = $result->totalContado*($enganche->porcentajeenganche/100);
                        //dd("ENGANCHE DE CONTADO", $result, $miniEnganche);
                        return round($miniEnganche, 2, PHP_ROUND_HALF_UP);
                    }
                    if($enganche->id_cat_tipoenganche==2) { //SOBRE EL TOTAL FINANCIADO
                        $miniEnganche = $result->totalFinanciado*($enganche->porcentajeenganche/100);
                        return round($miniEnganche, 2, PHP_ROUND_HALF_UP);
                    }
                } else
                    return 'El cliente no tiene configurado el porcentaje de enganche para el financiamiento. Comuniquese con el administrador del sistema.';    
            } else {
                return 'El articulo no tiene registrada una marca para obtener el grupo de marca al que pertenece. Comuniquese con el administrador del sistema.';    
            }
        }
    }    

    public function getPlazo($id) {
        $result = DB::table('con_cxcformaspago')
                ->where('id',$id)
                ->first();
        if(isset($result->id)) {
            return $result;
        }else{
            return 'No se encontro registro de los plazos';
        }
    }

    public function getFormaPago($id) {
        $result = DB::table('cat_periodicidadpago')
                ->where('id',$id)
                ->first();
        if(isset($result->id)) {
            return $result;
        }else{
            return 'No se encontro registro de las formas de pago';
        }
    }

    public function getPreciosPlazo($folio, $plazo) {
        $arrayFolio = explode("-", $folio);
        $articulos = DB::table('tpv_pedidodetalle')
                    ->select(DB::raw("tpv_pedidodetalle.*, tpv_articuloalmacen.costopromedio, tpv_articuloalmacen.costoactual, (cat_impuesto.tasa/100) as impuesto, tpv_articulo.id as idArticulo,
                                    tpv_articulo.id_sys_empresa, tpv_articulo.id_tpv_articulomarca, tpv_articulo.id_tpv_proveedor, tpv_articulo.id_tpv_articuloclasificacion"))
                    ->join('tpv_pedido','tpv_pedidodetalle.id_tpv_pedido','=','tpv_pedido.id')
                    ->join('tpv_articuloalmacen','tpv_pedidodetalle.id_tpv_articuloalmacen','=','tpv_articuloalmacen.id')
                    ->join('tpv_articulo','tpv_articuloalmacen.id_tpv_articulo','=','tpv_articulo.id')
                    ->join("tpv_articuloimpuesto", 'tpv_articulo.id', "=", 'tpv_articuloimpuesto.id_tpv_articulo')
                    ->join('cat_impuesto', 'tpv_articuloimpuesto.id_cat_impuesto', '=', 'cat_impuesto.id')
                    ->where('tpv_pedido.serie','=',$arrayFolio[0])
                    ->where('tpv_pedido.folio','=',$arrayFolio[1])
                    ->get();
        //dd($articulos);
        /*foreach($articulos as $item) {
            
            $result = DB::table('tpv_listapreciocredito')
                        ->select(DB::raw("tpv_listapreciocredito.*"))
                        ->where("tpv_listapreciocredito.interesnuevo", "!=", 0)
                        ->where("tpv_listapreciocredito.id_con_cxcformaspago", $plazo)
                        ->where("tpv_listapreciocredito.id_tpv_articulomarca", $item->id_tpv_articulomarca)
                        ->where("tpv_listapreciocredito.id_sys_empresa", $item->id_sys_empresa)
                        ->first();
            //dd($result);
            if(isset($result)) {
                if($result->interesnuevo>0)
                    $item->intereses = $result->interesnuevo;
                else
                    dd("NO ES MAYOR A CERO");
            } else {
                $result = DB::table('tpv_listapreciocredito')
                        ->select(DB::raw("tpv_listapreciocredito.*"))
                        ->where("tpv_listapreciocredito.interesnuevo", "!=", 0)
                        ->where("tpv_listapreciocredito.id_con_cxcformaspago", $plazo)
                        ->where("tpv_listapreciocredito.id_tpv_articulomarca", 0)
                        ->where("tpv_listapreciocredito.id_sys_empresa", $item->id_sys_empresa)
                        ->first();
                dd($result);     
                if(isset($result)) {
                    if(intval($result->interesnuevo)>0)
                        $item->intereses = $result->interesnuevo;
                    else
                        dd("OTRO");
                } else {
                    $result = DB::table('tpv_listapreciocredito')
                            ->select(DB::raw("tpv_listapreciocredito.*"))
                            ->where("tpv_listapreciocredito.interesnuevo", 0)
                            ->where("tpv_listapreciocredito.id_con_cxcformaspago", $plazo)
                            ->where("tpv_listapreciocredito.id_tpv_articulomarca", 0)
                            ->where("tpv_listapreciocredito.id_sys_empresa", $item->id_sys_empresa)
                            ->first();
                    //dd($result);
                    if(isset($result)) {
                        if(intval($result->interesnuevo)>0)
                            $item->intereses = $result->interesnuevo;
                        else
                            $item->intereses = $result->interesfijo;
                    } else
                        $item->intereses = null;
                } 
            }
        }*/

        $minimoenganche = DB::table('sys_parametros')
                            ->where('id', 2)
                            ->first();

        return [$articulos, ($minimoenganche->monto/100)];
    }

    public function saveCotizacionCredito($usuario, $turno, $folio, $idalmacen, $idcliente, $idvendedor, $fechainicio, $numpagos, $periodicidad, 
                                        $plazo, $enganche, $subtotal, $iva, $descuento, $total, $financiamiento, $articulos) {
        /*dd($folio, $idalmacen, $idcliente, $idvendedor, $fechainicio, $numpagos, $periodicidad, $plazo, $enganche,
        $subtotal, $iva, $descuento, $total);*/
        DB::beginTransaction();
        $lib = new Libreria;
        $idCot = DB::table('tpv_cotizacioncredito')->insertGetId(
            [
                'id_cat_tipodoc' => 4,
                'id_tpv_cliente' => $idcliente,
                'id_sys_usuario' => $usuario,
                'id_tpv_almacen' => $idalmacen,
                'id_tpv_vendedor' => $idvendedor,
                'id_tpv_turno' => $turno,
                'fechainicio' => $fechainicio,
                'id_con_cxcformaspago' => $plazo,
                'id_cat_periodicidadpago' => $periodicidad,
                'numpagos' => $numpagos,
                'enganche' => $enganche,
                'folio' => $folio,
                'id_sat_metodopago' => 'PPD',
                'fecha' => date('Y-m-d'),
                'hora' => date('h:i:s'),
                'subtotal' => $subtotal,
                'descuento' => $descuento,
                'iva' => $iva,
                'total' => $total
            ]);
        if($idCot>0){     
            foreach($articulos as $articulo) {
                $idDetalle = DB::table('tpv_cotizacioncreditodetalle')->insertGetId(
                    [
                        'id_tpv_cotizacioncredito' => $idCot,
                        'id_tpv_articuloalmacen' => $articulo['id_tpv_articuloalmacen'],
                        'codigo' => $articulo['codigo'],
                        'descripcion' => $articulo['descripcion'],
                        'costopromedio' => $articulo['costopromedio'],
                        'costoactual' => $articulo['costoactual'],
                        'precio' => $articulo['precio'],
                        'cantidad' => $articulo['cantidad'],
                        'subtotal' => $articulo['subtotal'],
                        'descuento' => $articulo['descuento'],
                        'iva' => $articulo['subtotal']*$articulo['impuesto'],
                        'total' => $articulo['total']
                    ]);
                if($idDetalle==0) {
                    DB::rollBack();
                    return 'Ocurrio un detalle al insertar un articulo. Comuniquelo con el administrador del sistema';
                }
            }
            if($idDetalle> 0) {
                foreach($financiamiento as $item) {
                    $fechapago = $lib->fechaFormat($item['fecha'],'H2M');
                    //dd($item);
                    $idamortizacion = DB::table('tpv_cotizacioncreditoamortizacion')->insertGetId(
                        [
                            'id_tpv_cotizacioncredito' => $idCot,
                            'numpago' => $item['numero'],
                            'fechapago' => $fechapago,
                            'montopago' => str_replace(",", "", $item['monto'])
                        ]);
                        //dd($item['monto']);
                    if($idamortizacion==0) {
                            DB::rollBack();
                            return 'Ocurrio un detalle al insertar una amortización. Comuniquelo con el administrador del sistema';
                        }
                }
                if($idamortizacion>0) {
                    $increment = DB::table('tpv_folio')
                                ->where('id_sys_usuario','=',$usuario)
                                ->where('id_tpv_turno','=',$turno)
                                ->where('id_tpv_almacen','=',$idalmacen)
                                ->where('id_cat_operacion','=', 2)
                                ->where('status','=',1)
                                ->increment('folio');
                    if($increment>0) {
                        DB::commit();
                        return $idCot;
                    }else {
                        DB::rollBack();
                        return 'Ocurrio un detalle al incrementar el folio de cotización. Comuniquelo con el administrador del sistema';
                    }
                }
            }
        }else{
            DB::rollBack();
            return 0;
        }
    }

    public function getVendedorUsuario($usuario, $turno, $dbnomina) {
        $result = DB::table('tpv_vendedorcomisiones')
                    ->select(DB::raw("tpv_vendedorcomisiones.*, pempleado.nombre"))
                    ->join($dbnomina.'.pempleado', 'tpv_vendedorcomisiones.id_tpv_vendedor', '=', 'pempleado.nip')
                    ->where('tpv_vendedorcomisiones.id_tpv_vendedor', $usuario)
                    ->where('tpv_vendedorcomisiones.status', 1)
                    ->get();
        return $result;
    }
    
    public function getMarcas($text, $avanzado) {
        $txtMarca = $text!==null?$text:'';
        $txtAvanzado = $avanzado!==null?$avanzado:'';

        $result = DB::table('tpv_articulo')
                    ->select(DB::raw("tpv_articulomarca.*"))
                    ->leftjoin("tpv_articulomarca", "tpv_articulo.id_tpv_articulomarca", "=", "tpv_articulomarca.id")
                    ->where('tpv_articulomarca.descripcion', 'LIKE', '%'.$txtMarca.'%')
                    ->where(function($q) use($txtAvanzado){
                        $q->where(DB::raw("tpv_articulo.descripcion"), "LIKE", '%'.$txtAvanzado.'%')
                        ->orWhere('tpv_articulo.descripcioncorta', "LIKE", '%'.$txtAvanzado.'%')
                        ->orWhere('tpv_articulo.codigo', "LIKE", '%'.$txtAvanzado.'%')
                        ->orWhere('tpv_articulo.codigoproveedor', "=", $txtAvanzado);
                    })
                    ->where('tpv_articulo.status', 1)
                    ->groupBy("tpv_articulomarca.id")
                    ->get();
        /*dd($result);
        $result = DB::table('tpv_articulomarca')
                    ->where('descripcion', 'LIKE', '%'.$txtMarca.'%')
                    ->where('status', 1)
                    ->orderBy('descripcion', 'ASC')
                    ->get();*/
        if(count($result)>0) 
            return $result;
        else 
            return 0;
    }
}
?>