Sindbad~EG File Manager

Current Path : /var/www/html/carsanies.sumar.com.py/app/Http/Livewire/
Upload File :
Current File : //var/www/html/carsanies.sumar.com.py/app/Http/Livewire/Compras.php

<?php

namespace App\Http\Livewire;

use Livewire\Component;
use Livewire\WithPagination;
use App\Models\Cabeceracompra; 
use App\Models\Catalogo; 
use App\Models\Detallecompra;
use App\Models\Proveedor; 
use DB;
use Auth;
use Carbon\Carbon;
use App\Exports\CompraExport;
use Maatwebsite\Excel\Facades\Excel;

class Compras extends Component{

    protected $paginationTheme = 'bootstrap';
    use WithPagination;
    public $search='';
    
    public $updateMode = 0;

    public $proveedor_id,$nfactura,$selectpro,$cabecera_id,$banco,$fechaPago,$numeroBoletas,$numeroTarjeta,$inicio,$fin;
    public $TipoPago = 'Efectivo';
    public $tipoCompra;

    public $prod_cargados=[];
 
    public function mount() {
        $this->inicio = Carbon::now()->startOfWeek()->format('Y-m-d');
        $this->fin = Carbon::now()->endOfWeek()->format('Y-m-d');
    }
    
    public function render(){

        $productos=Catalogo::where('estado',1)->get();
        $proveedores=Proveedor::where('estado',1)->get();

        $encabezado=DB::table('cabeceracompras as cc')
            ->join('users as u','cc.usuario_id','u.id')
            ->join('proveedors as p','cc.proveedor_id','p.id')
            ->select('cc.*','u.name','p.nombre as proveedor')
            ->where('p.nombre','LIKE','%'.$this->search.'%')
            ->whereBetween('cc.created_at', [$this->inicio, $this->fin])
            ->paginate(20);

        $cabecera=DB::table('cabeceracompras as cc')
            ->join('proveedors as p','cc.proveedor_id','p.id')
            ->join('users as u','cc.usuario_id','u.id')
            ->select('cc.*','p.nombre as proveedor','u.name as comprador')
            ->where('cc.id',$this->cabecera_id)->first();

        $cabeceraproductos=DB::table('detallecompras as cp') 
            ->join('catalogos as p','cp.catalogo_id','p.id')
            ->select('cp.*','p.nombre')
            ->where('cp.cabecera_id',$this->cabecera_id)->get();
        
        return view('livewire.compras.index',["cabecera"=>$cabecera,"cabeceraproductos"=>$cabeceraproductos,"encabezado"=>$encabezado,"productos"=>$productos,"proveedores"=>$proveedores]);
    }

    public function descargar() {
        return Excel::download(
            new CompraExport($this->inicio, $this->fin, $this->search),
            'Comprasrealizadas.xlsx'
        );
    }
    
    private function resetInputFields(){
        
        $this->proveedor_id = '';
        $this->nfactura = '';
        $this->selectpro = '';
        $this->prod_cargados=[];

    }

    public function crear(){
        $this->updateMode = 1;
    }

    public function store(){
        $validatedDate = $this->validate([
            'proveedor_id' => 'required',
            'nfactura' => 'required',
        ]);
    
        $cabecera = new Cabeceracompra;
        
        $cabecera->nfactura = $this->nfactura;
        $cabecera->proveedor_id = $this->proveedor_id;
        $cabecera->usuario_id = Auth::user()->id;

        if($cabecera->save()){
            foreach($this->prod_cargados as $prod){
                $producto = new Detallecompra;
                $producto->catalogo_id = $prod['id'];
                $producto->cantidad = $prod['cantidad'];
                $producto->precio = $prod['precio'];
                $producto->cabecera_id = $cabecera->id;
                
                if($producto->save()){ 
                    $incremento = Catalogo::find($prod['id']);
                    $incremento->stock += $prod['cantidad'];
                    $incremento->update();
                }
            }
        }
    
        $this->emit('alert', ['type' => 'success', 'message' => 'Compra realizada correctamente!']);
    
        $this->resetInputFields();
        $this->updateMode = 0;
    }
    

    public function cancel()
    {
        $this->updateMode = false;
        $this->resetInputFields();
    }

    public function delete($id)
    {
        if($id){
            $productos=Detallecompra::where('cabecera_id',$id)->get();
            foreach($productos as $prod){
                $producto=Catalogo::find($prod->producto_id);
                    $producto->stock-=$prod->cantidad;
                $producto->update();
            }

            $cabecera = Cabeceracompra::find($id);
                $cabecera->estado=0;
            $cabecera->update();
            
            $this->emit('alert', ['type' => 'error', 'message' => 'Compra anulada correctamente!']);
        }
    }

    public function changeEvent(){
        $producto = Catalogo::where('id', $this->selectpro)->first();
        
        if (array_key_exists($producto->id, $this->prod_cargados)){
            $this->prod_cargados[$producto->id]['cantidad'] += 1;
        } else {
            $this->prod_cargados[$producto->id]['id'] = $producto->id;
            $this->prod_cargados[$producto->id]['codigo'] = $producto->id;
            $this->prod_cargados[$producto->id]['nombre'] = $producto->nombre;
            $this->prod_cargados[$producto->id]['cantidad'] = 1;
            
            if ($producto->oferta) {
                $this->prod_cargados[$producto->id]['precio'] = $producto->oferta;
            } else {
                $this->prod_cargados[$producto->id]['precio'] = $producto->precio1;
            }
    
            // Agregar los nuevos campos
            $this->prod_cargados[$producto->id]['TipoPago'] = ''; // Tipo de pago
            $this->prod_cargados[$producto->id]['banco'] = ''; // Banco
            $this->prod_cargados[$producto->id]['numeroTarjeta'] = ''; // Numero de tarjeta
            $this->prod_cargados[$producto->id]['fechaPago'] = ''; // Fecha de pago
            $this->prod_cargados[$producto->id]['numeroBoletas'] = ''; // Numero de boletas
        }
    
        $this->selectpro = "";
    }
    

    public function deleteitem($id){
        unset($this->prod_cargados[$id]);
    }

    public function changecantidad($cantidad,$id){
        $this->prod_cargados[$id]['cantidad']=$cantidad;
    }

    public function changeprecio($precio,$id){
        $this->prod_cargados[$id]['precio']=$precio;
    }

    public function leer($id){
        $this->cabecera_id=$id;
        
        $this->updateMode = 2;
    }
}


Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists