<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use DB;
use PDF;

class ProduitController extends Controller
{


    function VoirSuppression ($id) {

        $produi= DB::table('produit_vendable')->where('id',$id)->first();
        return [

            'produi' => $produi,
        ];
    }

    function supprimer () {

        $id=request('id');

        $veri =  DB::table('produit_vendable_fini')->where('pv_id', $id)->first();

        if($veri ) {

            return redirect()->route('nouveauProduit')->with('error', 'Suppression impossible ! Ce produit a été déjà utilisé ');
        
        }else{

            DB::table('produit_vendable')->where('id', $id)->delete();
    
            return redirect()->route('nouveauProduit')->with('status', 'Suppression effectuée avec succes');
        }

    }

    function VoirSuppressionpf ($id) {

        $prodfi= DB::table('produit_vendable_fini')->where('id',$id)->first();
        return [

            'prodfi' => $prodfi,
        ];
    }

    function supprimerpf () {

        $id=request('id');

        $veri =  DB::table('ligne_vente')->where('produit_id', $id)->first();

        $verif =  DB::table('ligne_vente_client')->where('produit_id', $id)->first();

        if($veri || $verif ) {

            return redirect()->route('nouveau_produit_fini')->with('error', 'Suppression impossible ! Ce produit a été déjà utilisé pour une vente');
        
        }else{

            DB::table('produit_vendable_fini')->where('id', $id)->delete();
    
            return redirect()->route('nouveau_produit_fini')->with('status', 'Suppression effectuée avec succes');
        }

    }

    public function produit_fini(){

        if(session('user')== null) {
            return redirect('/');
        }

        $pv=DB::table('produit_vendable')->get();
        $produit=DB::table('produit_vendable_fini')->orderBydesc('id')->get();
		return view('produit/produit_fini', [
			'pv'=> $pv,
            'produit'=> $produit,
		]);
    }


    function modifpf(Request $request, $id)
    {
        $pv=request('pv');
        $pordi=request('pordi');
        $pvip=request('pvip');
        $designation=request('designation');
        $stock_mini=request('stock_mini');
        $unite_mesure=request('unite_mesure');
      

        /*$verification= DB::table('produit_vendable_fini')->where('stock_mini',$stock_mini)->where('prix_vip',$pvip)->where('prix_ordinaire',$pordi)->where('designation',$designation)->first();
        if($verification){
            $message = [
                "title" => 'Erreur d\'enregistrement',
                "type" => 'error',
                "response" => 'Ce produit existe déjà',
            ];

            return $message;

        }
        else {
		*/
            $idcategorie = DB::table('produit_vendable')->where('id',$pv)->first()->categorie_id;

            if( $idcategorie == "4" ){

                $stokproduit = DB::table('produit_vendable')->where('id',$pv)->first()->stock_general;
                 
                DB::table('produit_vendable_fini')->where('id', $id)->update(
                    [
    
                        'pv_id' => $pv,
                        'designation' => $designation,
                        'prix_ordinaire' => $pordi,
                        'prix_vip' => $pvip,
                        'stock_mini' => $stock_mini,
                        'stock_gene' => $stokproduit,
                        'cat_id' => $idcategorie,
                        'unite_mesure' => $unite_mesure,
                             
                    ]
                );

                 $message = [
                    "title" => 'success',
                    "type" => 'success',
                    "response" => 'Modification effectuée avec succès !',
                ];
    
                return $message;

            }else{

                DB::table('produit_vendable_fini')->where('id', $id)->update(
                    [
    
                        'pv_id' => $pv,
                        'designation' => $designation,
                        'prix_ordinaire' => $pordi,
                        'prix_vip' => $pvip,
                        'stock_mini' => $stock_mini,
                        'cat_id' => $idcategorie,
                        'unite_mesure' => $unite_mesure,
                       
                        
                    ]
                );
                 $message = [
                    "title" => 'success',
                    "type" => 'success',
                    "response" => 'Modification effectuée avec succès !',
                ];
    
                return $message;

            }      
        /*}*/
           
    }

    function modifierpf($id) {

        if(session('user')== null) {
            return redirect('/');
        }

        $pv=DB::table('produit_vendable')->get();
        $produit=DB::table('produit_vendable_fini')->orderBydesc('id')->get();
        $pf = DB::table('produit_vendable_fini')->where('id', $id)->first(); 

		return view('produit/modification_produit_fini', [
			'pv'=> $pv,
            'produit'=> $produit,
            'pf'=> $pf,
		]);
    }
    

    function enregistrer_produit_fini(Request $request)
    {
        $pv=request('pv');
        $pordi=request('pordi');
        $pvip=request('pvip');
        $designation=request('designation');
        $stock_mini=request('stock_mini');
        $unite_mesure=request('unite_mesure');
        $cat = DB::table('produit_vendable')->where('id', $pv)->first()->categorie_id;

        $verification= DB::table('produit_vendable_fini')->where('designation',$designation)->first();
        if($verification){
            $message = [
                "title" => 'Erreur d\'enregistrement',
                "type" => 'error',
                "response" => 'Ce produit existe déjà',
            ];

            return $message;

        }
        else {

            $idcategorie = DB::table('produit_vendable')->where('id',$pv)->first()->categorie_id;

            if( $idcategorie == "4" ){

                $stokproduit = DB::table('produit_vendable')->where('id',$pv)->first()->stock_general;
                 
                DB::table('produit_vendable_fini')->insert(
                    [
    
                        'pv_id' => $pv,
                        'designation' => $designation,
                        'prix_ordinaire' => $pordi,
                        'prix_vip' => $pvip,
                        'stock_mini' => $stock_mini,
                        'stock_gene' => $stokproduit,
                        'cat_id' => $idcategorie,
                        'unite_mesure' => $unite_mesure,
                        'categorie_id' => $cat,
                             
                    ]
                );

                 $message = [
                    "title" => 'success',
                    "type" => 'success',
                    "response" => 'Produit enregistré avec succès !',
                ];
    
                return $message;

            }else{

                DB::table('produit_vendable_fini')->insert(
                    [
    
                        'pv_id' => $pv,
                        'designation' => $designation,
                        'prix_ordinaire' => $pordi,
                        'prix_vip' => $pvip,
                        'stock_mini' => $stock_mini,
                        'cat_id' => $idcategorie,
                        'unite_mesure' => $unite_mesure,
                        'categorie_id' => $cat,
                        
                    ]
                );
                 $message = [
                    "title" => 'success',
                    "type" => 'success',
                    "response" => 'Produit enregistré avec succès !',
                ];
    
                return $message;

            }      
        }
           
    }




	//VOIR PAGE D'ENREGISTREMENT PRODUIT
    public function voirproduit(){

        if(session('user')== null) {
            return redirect('/');
        }

		$categorie=DB::table('categorie')->get();
		$produit=DB::table('produit_vendable')->orderBydesc('id')->get();
		return view('produit/nouveau', [
			'categorie'=> $categorie,
			'produit'=> $produit,
		]);
	}
	//VOIR PAGE APPRO
	    public function voirappro(){

        if(session('user')== null) {
            return redirect('/');
        }

		$produit=DB::table('produit')->get();
		$fournisseur=DB::table('fournisseur')->get();
		$appro = DB::table('approvisionnement')->orderBydesc('id') ->limit(5)->get();
		return view('appro', [
			'produit'=> $produit,
			'fournisseur'=> $fournisseur,
			'appro'=> $appro,
		]);
	}
	//ANNULER APPROVISIONNEMENT
	function annuler () {

        $id=request('id');

        /*DB::table('approvisionnement')->where('id', $id)->update(
            [
                'etat2' => "Annulée",
            ]
        );*/

        //$vo = DB::table('ligne_appro')->where('appro_id', $id)->get();
		$supl = DB::table('ligne_appro')->where('appro_id', $id)->delete();
		$supl = DB::table('approvisionnement')->where('id', $id)->delete();


        return redirect()->route('nouvelappro')->with('status', 'Achat supprimé avec succès');
    }
	//VALIDATION APPROVISIONNEMENT
	function valider () {

        $id=request('id');
		$todayyy = date('Y-m-d');

            DB::table('approvisionnement')->where('id', $id)->update(
                [
                    'etat2' => "Validé",
                ]
            );
			DB::table('ligne_appro')->where('appro_id', $id)->update(
                [
                    'etat2' => "Validé",
                ]
            );

        $vo = DB::table('ligne_appro')->where('appro_id', $id)->where('etat2','Validé')->get();
        $fou = DB::table('approvisionnement')->where('id', $id)->first()->fournisseur_id;
        $ref = DB::table('approvisionnement')->where('id', $id)->first()->reference;
        $mont_devise = DB::table('approvisionnement')->where('id', $id)->first()->mont_devise;
		$lh = DB::table('approvisionnement')->where('id', $id)->first()->montant_appro;
        $today = date('Y-m-d'); 
        foreach($vo as $vos){

            $qtesto = DB::table('produit')->where('id', $vos->produit_id)->first()->stock_general;
            $qteval = $vos->qte;
            
            DB::table('produit')->where('id', $vos->produit_id)->update(
                [
                    'stock_general' => ($qtesto + $qteval),
                ]
            );
			/*DB::table('produit')->where('id', $pep[0 +$i])->update(
                [
                    'stock_general' => ($qtesto + $pep[1 +$i]),
                ]
            );*/
   
        }
		$totalfou = DB::table('ligne_appro')->where('fournisseur_id', $fou)->get()->sum('montligne');
				$totalfou2 = DB::table('paiement_fou')->where('fournisseur_id', $fou)->get()->sum('montant');
				$soldo = $totalfou - $totalfou2;
				DB::table('transaction_fournisseur')->insert(
                    [
                        'date' => $todayyy,
                        'libelle' => 'Achat '.$ref,
                        'montant' => $lh,
						'solde' => $soldo,
						'type' => 'Crédit',
						'fournisseur_id' => $fou,
						'devise' => $mont_devise,
						'appro_id' => $id,
                    ]
                );
       
        return redirect()->route('nouvelappro')->with('status', 'Achat validé avec succès !');
	}
	function voirvalider ($id) {

        $appro= DB::table('approvisionnement')->where('id',$id)->first();
        return [
            'appro' => $appro,
        ];
	}

	function voirannuler ($id) {

        $appros= DB::table('approvisionnement')->where('id',$id)->first();
        return [
            'appros' => $appros,
        ];
	}
	function modifappro($id) {
        if(session('user')== null) {
            return redirect('/');
        }
        $fournisseur = DB::table('fournisseur')->get();
        $produit = DB::table('produit')->get();
        $appro = DB::table('approvisionnement')->where('id',$id)->first();
        $ligne_appro = DB::table('ligne_appro')->where('appro_id',$id)->get();
        return view('modif_appro',[
            'appro' => $appro,
            'produit' => $produit,
            'ligne_appro' => $ligne_appro,
            'fournisseur' => $fournisseur,
        ]);
    }
	function modifapprop($id)
    {
		$supl = DB::table('ligne_appro')->where('appro_id', $id)->delete();

		$dat = date('d/m/Y');

        $hour = date('H:i:s');

		$today = date('Y-m-d H:i:s');
		$todayyy = date('Y-m-d');
		$fou=request('fou');
        $ref=request('ref');
        $devise=request('devise');
        $mont_devise=request('mont_devise');

        $peps=collect(request('peps'))->chunk(3);
		
		
        DB::table('approvisionnement')->where('id', $id)->update(
            [
				//'date' => $today,
				//'date2' => $todayyy,
				'fournisseur_id' => $fou,
				'reference' => $ref,
				'devise' => $devise,
				'mont_devise' => $mont_devise,
            ]
        );
        $idLastappro = DB::table('approvisionnement')->where('id', $id)->first()->id;

		$i=0;
		
        foreach ($peps as $key=> $pep){
            
            $qtesto =  DB::table('produit')->where('id', $pep[0 +$i])->first()->stock_general;

            $desi =  DB::table('produit')->where('id', $pep[0 +$i])->first()->designation;
            //$id =  DB::table('produit')->where('id', $pep[0 +$i])->first()->id;

            if ($devise=="CFA"){
				$montligne= $pep[1 +$i] * $pep[2 +$i];
				$mont_devise1=1;
				$paaa = $pep[2 +$i] * $mont_devise1;
			} else{
				$montligne= $pep[1 +$i] * $pep[2 +$i] * $mont_devise;
				$mont_devise1=$mont_devise;
				$paaa = $pep[2 +$i] * $mont_devise1;
			} /*else {
				$montligne= $pep[1 +$i] * $pep[2 +$i] * 655.95;
				$mont_devise1=655.95;
				$paaa = $pep[2 +$i] * $mont_devise1;
			}*/
               
                DB::table('ligne_appro')->insert(
                    [
                        'appro_id' => $idLastappro,
                        'produit_id' => $pep[0 +$i],
                        'qte' => $pep[1 +$i],
						'pa' => $pep[2 +$i],
						'pa_vrai' => $paaa,
                        'montligne_euro' => ($pep[1 +$i] * $pep[2 +$i]),
                        'montligne' => $montligne,
                        'date' => $todayyy,
                        'devise' => $devise,
                        'mont_devise' => $mont_devise1,
                        'fournisseur_id' => $fou,
                        'en_stock' => $qtesto,
                        'apres' => ($qtesto + $pep[1 +$i]),
                    ]
                );
				
                $i += count($pep->toArray()); 
        }
		$lh = DB::table('ligne_appro')->where('appro_id', $idLastappro)->get()->sum('montligne');
		$lh22 = DB::table('ligne_appro')->where('appro_id', $idLastappro)->get()->sum('montligne_euro');
			
              //$lh1 =  number_format($lh, 0, ' ', ' ');
				DB::table('approvisionnement')->where('id', $idLastappro)->update(
                            [
                             'montant_appro' => $lh,
                             'total_devise' => $lh22,
                            ]);
		$rek = DB::table('approvisionnement')->where('id', $id)->first();
		if ($rek->etat2 == "Validé"){
			$rek2 = DB::table('transaction_fournisseur')->where('appro_id', $id)->first();
			if($rek2){
				DB::table('transaction_fournisseur')->where('appro_id', $id)->update(
                            [
                             'montant' => $lh,
                             'devise' => $mont_devise,
                            ]);
			}
		}
		$message = [
            "title" => 'success',
            "type" => 'success',
            "response" => 'Modification effectuée avec succès !',
        ];

        return $message;
        
    }
	function enregistrer_appro()
    {

		$dat = date('d/m/Y');

        $hour = date('H:i:s');

		$today = date('Y-m-d H:i:s');
		$todayyy = date('Y-m-d');
		$fou=request('fou');
        $ref=request('ref');
        $devise=request('devise');
        $mont_devise=request('mont_devise');

        $peps=collect(request('peps'))->chunk(3);

		$verifi= DB::table('approvisionnement')->where('etat2','Non validé')->first();
        if($verifi){
            $message = [
                "title" => 'Erreur d\'enregistrement',
                "type" => 'error',
                "response" => 'Vous avez un achat non validé, validez ou supprimez avant de continuer',
            ];

            return $message;

        } else{
			$verification= DB::table('approvisionnement')->where('reference',$ref)->first();
        if($verification){
            $message = [
                "title" => 'Erreur d\'enregistrement',
                "type" => 'error',
                "response" => 'Un approvisionnement a déjà été enregistré avec cette référence',
            ];

            return $message;

        } else{
			
        DB::table('approvisionnement')->insert(
            [
				'date' => $today,
				'date2' => $todayyy,
				'fournisseur_id' => $fou,
				'reference' => $ref,
				'devise' => $devise,
				'mont_devise' => $mont_devise,
            ]
        );
        $idLastappro = DB::table('approvisionnement')->get()->last()->id;
        $idLast= strlen($idLastappro);

        if ($idLast==1){
            DB::table('approvisionnement')->where('id', $idLastappro)->update(
                [
                    'numero' => 'AP-000'.$idLastappro,
                ]
            );
        } elseif ($idLast==2){
    
			DB::table('approvisionnement')->where('id', $idLastappro)->update(
                [
                    'numero' => 'AP-00'.$idLastappro,
                ]
            );
        } elseif ($idLast==3){
            DB::table('approvisionnement')->where('id', $idLastappro)->update(
                [
                    'numero' => 'AP-0'.$idLastappro,
                ]
            );
        } else {
            DB::table('approvisionnement')->where('id', $idLastappro)->update(
                [
                    'numero' => $idLastappro,
                ]
            );
        }

		$i=0;
		
                foreach ($peps as $key=> $pep){
            
            $qtesto =  DB::table('produit')->where('id', $pep[0 +$i])->first()->stock_general;

            $desi =  DB::table('produit')->where('id', $pep[0 +$i])->first()->designation;
            //$id =  DB::table('produit')->where('id', $pep[0 +$i])->first()->id;

            if ($devise=="CFA"){
				$montligne= $pep[1 +$i] * $pep[2 +$i];
				$mont_devise1=1;
				$paaa = $pep[2 +$i] * $mont_devise1;
			} else{
				$montligne= $pep[1 +$i] * $pep[2 +$i] * $mont_devise;
				$mont_devise1=$mont_devise;
				$paaa = $pep[2 +$i] * $mont_devise1;
			} /*else {
				$montligne= $pep[1 +$i] * $pep[2 +$i] * 655.95;
				$mont_devise1=655.95;
				$paaa = $pep[2 +$i] * $mont_devise1;
			}*/
               
                DB::table('ligne_appro')->insert(
                    [
                        'appro_id' => $idLastappro,
                        'produit_id' => $pep[0 +$i],
                        'qte' => $pep[1 +$i],
						'pa' => $pep[2 +$i],
						'pa_vrai' => $paaa,
                        'montligne_euro' => ($pep[1 +$i] * $pep[2 +$i]),
                        'montligne' => $montligne,
                        'date' => $todayyy,
                        'devise' => $devise,
                        'mont_devise' => $mont_devise1,
                        'fournisseur_id' => $fou,
                        'en_stock' => $qtesto,
                        'apres' => ($qtesto + $pep[1 +$i]),
                    ]
                );
				
                $i += count($pep->toArray()); 
        }
		$lh = DB::table('ligne_appro')->where('appro_id', $idLastappro)->get()->sum('montligne');
			$lh22 = DB::table('ligne_appro')->where('appro_id', $idLastappro)->get()->sum('montligne_euro');
			
              //$lh1 =  number_format($lh, 0, ' ', ' ');
				DB::table('approvisionnement')->where('id', $idLastappro)->update(
                            [
                             'montant_appro' => $lh,
                             'total_devise' => $lh22,
                            ]);
		$message = [
            "title" => 'success',
            "type" => 'success',
            "response" => 'Opération effectué avec succes !',
        ];

        return $message;
        
    }}}
	
	//ENREGISTREMENT PRODUIT
	function enregistrer(Request $request)
    {
        //$code=request('code');
        $categorie_id=request('categorie');
        $designation=request('designation');
        $marque=request('marque');
        $marque = strtoupper($marque);
        $code=request('code');
        $stock_mini=request('stock_mini');
        $prix_detail=request('prix_detail');
        $prix_gros=request('prix_gros');
		$today = date('Y-m-d H:i:s');
        $today2 = date('Y-m-d'); 

        if($marque == "") {

           $desi = $designation;

        }else{

            $desi = $marque." / ".$designation;

        }


        $verification= DB::table('produit_vendable')->where('designation',$designation)->first();
        if($verification){
            $message = [
                "title" => 'Erreur d\'enregistrement',
                "type" => 'error',
                "response" => 'Ce produit existe déjà',
            ];

            return $message;

        }
        else {


            DB::table('produit_vendable')->insert(
                [

                    'categorie_id' => $categorie_id,
                    'designation' => $designation,
                    'code' => $code,
                    'marque' => $marque,
                    'stock_mini' => $stock_mini,
					'date_entree' => $today,
					'prix_gros' => $prix_gros,
                    'prix_detail' => $prix_detail,
                    'desi' => $desi,
					
                ]
            );
			 $message = [
                "title" => 'success',
                "type" => 'success',
                "response" => 'Produit enregistré avec succès !',
            ];

            return $message;
        }
           
    }
	//MISE A JOUR PRODUIT
	function modif($id)
    {
		 if(session('user')== null) {
            return redirect('/');
        }

		$produit=DB::table('produit_vendable')->where('id', $id)->first();
		$categorie=DB::table('categorie')->get();
		return view('produit/modifier_produit', [
			'categorie'=> $categorie,
			'produit'=> $produit,
		]);
		
	}
    
    function update (Request $request, $id)
    {
        $code=request('code');
        $categorie_id=request('categorie');
        $designation=request('designation');
        $marque=request('marque');
        $marque = strtoupper($marque);
        $stock_mini=request('stock_mini');
        $prix_detail=request('prix_detail');
        $prix_gros=request('prix_gros');
		$today = date('Y-m-d H:i:s');
        $today2 = date('Y-m-d'); 

        if($marque == "") {

            $desi = $designation;
 
         }else{
 
            $desi = $marque." / ".$designation;
         }

            DB::table('produit_vendable')->where('id', $id)->update(
            [

                    'categorie_id' => $categorie_id,
                    'designation' => $designation,
                    'code' => $code,
                    'marque' => $marque,
                    'stock_mini' => $stock_mini,
                    'prix_gros' => $prix_gros,
                    'prix_detail' => $prix_detail,
                    'desi' => $desi,
                ]
            );
			 return redirect()->route('liste-des-produits')->with('status', 'Modification effectuée avec succes');
    }
	
	function liste(){

        if(session('user')== null) {
            return redirect('/');
        }
		if(session('user')->roles == "Admin") {
            $produits = DB::table('produit_vendable')->get();
			$magasin = DB::table('magasin')->get();
			$totappro = DB::table('ligne_appro_vendable')->where('etat', 'Validée')->get()->sum('qte');
			//$totvente = DB::table('ligne_appro_cuisine')->get()->sum('qte');
			$totstk = DB::table('produit_vendable')->get()->sum('stock_general');
			$qtevendu = DB::table('ligne_vente')->where('etat', 'Validée')->get()->sum('qte');
        } else {
			$produits = DB::table('produit_vendable')->get();
			$magasin = DB::table('magasin')->get();
			$totappro = DB::table('ligne_appro_vendable')->where('etat', 'Validée')->where('magasin_id', session('user')->magasin_id)->get()->sum('qte');
			//$totvente = DB::table('ligne_appro_cuisine')->get()->sum('qte');
			$totstk = DB::table('stock_magasin')->where('magasin_id', session('user')->magasin_id)->orderBydesc('id')->take(1)->first()->apres;
			$qtevendu = DB::table('ligne_vente')->where('magasin_id', session('user')->magasin_id)->where('etat', 'Validée')->get()->sum('qte');
		}
			return view('produit/liste',[
            'produits' => $produits,
            'magasin' => $magasin,
            'totappro' => $totappro,
            //'totvente' => $totvente,
            'totstk' => $totstk,
            'qtevendu' => $qtevendu,
        ]);	
	}
	function liste2(){

        if(session('user')== null) {
            return redirect('/');
        }
	$produits = DB::table('produit_vendable')->where('categorie_id','!=', '4')->get();
	$totappro = DB::table('ligne_appro_cuisine')->where('etat', 'Validée')->get()->sum('qte');
	$totvente = DB::table('ligne_utilisation')->get()->sum('qte');
	$totstk = DB::table('produit_vendable')->get()->sum('stock_cuisine');
	//$qtevendu = $totappro - $totstk;
	$qtevendu = DB::table('ligne_utilisation')->get()->sum('qte');
			return view('produit/stock-cuisine',[
            'produits' => $produits,
            'totappro' => $totappro,
            'totvente' => $totvente,
            'totstk' => $totstk,
            'qtevendu' => $qtevendu,
        ]);	
	}
	function liste3(){

        if(session('user')== null) {
            return redirect('/');
        }
	$produits = DB::table('produit_vendable_fini')->get();
	$totappro = DB::table('ligne_utilisation')->get()->sum('nbre');
	$totvente = DB::table('ligne_vente')->where('etat', 'Validée')->get()->sum('qte');
	$totstk = DB::table('produit_vendable_fini')->get()->sum('stock_gene');
	//$qtevendu = $totappro - $totstk;
	$qtevendu = DB::table('ligne_vente')->get()->sum('qte');
			return view('produit/stock-resto',[
            'produits' => $produits,
            'totappro' => $totappro,
            'totvente' => $totvente,
            'totstk' => $totstk,
            'qtevendu' => $qtevendu,
        ]);	
	}
	//STOCK RESTO BOISSON
	function liste33(){

        if(session('user')== null) {
            return redirect('/');
        }
		$today = date('Y-m-d');
	$produits = DB::table('produit_vendable_fini')->where('cat_id', 4)->get();
	$totappro = DB::table('ligne_utilisation')->where('date', $today)->get()->sum('nbre');
	$totvente = DB::table('ligne_vente')->where('etat', 'Validée')->where('date', $today)->get()->sum('qte');
	$totstk = DB::table('produit_vendable_fini')->get()->sum('stock_gene');
	//$qtevendu = $totappro - $totstk;
	$qtevendu = DB::table('ligne_vente')->where('date', $today)->get()->sum('qte');
			return view('produit/stock-resto-boisson',[
            'produits' => $produits,
            'totappro' => $totappro,
            'totvente' => $totvente,
            'totstk' => $totstk,
            'qtevendu' => $qtevendu,
        ]);	
	}
	function liste333(){

        if(session('user')== null) {
            return redirect('/');
        }
		$date_debut = request('date_debut');
        $date_debut= explode('/', $date_debut);
        $date_debut= array_reverse($date_debut);
        $date_debut= implode('-', $date_debut);

        $date_fin = request('date_fin');
        $date_fin= explode('/', $date_fin);
        $date_fin= array_reverse($date_fin);
        $date_fin= implode('-', $date_fin);
		
	$produits = DB::table('produit_vendable_fini')->where('cat_id', 4)->get();
	$totappro = DB::table('ligne_utilisation')->whereBetween('date', [$date_debut,$date_fin])->get()->sum('nbre');
	$totvente = DB::table('ligne_vente')->whereBetween('date', [$date_debut,$date_fin])->where('etat', 'Validée')->get()->sum('qte');
	$totstk = DB::table('produit_vendable_fini')->get()->sum('stock_gene');
	//$qtevendu = $totappro - $totstk;
	$qtevendu = DB::table('ligne_vente')->whereBetween('date', [$date_debut,$date_fin])->get()->sum('qte');
			$pdf = PDF::loadView('produit/stock-resto-boisson-pdf',[
            'produits' => $produits,
            'totappro' => $totappro,
            'totvente' => $totvente,
            'totstk' => $totstk,
            'qtevendu' => $qtevendu,
            'date_debut' => $date_debut,
            'date_fin' => $date_fin,
        ]);	
		return $pdf->stream();
	}
	function parproduitfini(){

        if(session('user')== null) {
            return redirect('/');
        }
	$produits = DB::table('produit_vendable_fini')->where('categorie_id', '!=',4)->get();
	$totappro = DB::table('ligne_utilisation')->get()->sum('nbre');
	$totvente = DB::table('ligne_vente')->where('etat', 'Validée')->get()->sum('qte');
	$totstk = DB::table('produit_vendable_fini')->get()->sum('stock_gene');
	//$qtevendu = $totappro - $totstk;
	$qtevendu = DB::table('ligne_vente')->get()->sum('qte');
			return view('produit/parproduitfini',[
            'produits' => $produits,
            'totappro' => $totappro,
            'totvente' => $totvente,
            'totstk' => $totstk,
            'qtevendu' => $qtevendu,
        ]);	
	}
	function parproduitfinipdf(){

       if(session('user')== null) {
            return redirect('/');
        }
		
		$date_debut = request('date_debut');
        $date_debut= explode('/', $date_debut);
        $date_debut= array_reverse($date_debut);
        $date_debut= implode('-', $date_debut);

        $date_fin = request('date_fin');
        $date_fin= explode('/', $date_fin);
        $date_fin= array_reverse($date_fin);
        $date_fin= implode('-', $date_fin);
		
		session(['date_debut'=> $date_debut]);
		session(['date_fin'=> $date_fin]);
		
		if($date_fin > $date_debut || $date_fin == $date_debut){
			
		$produits = DB::table('produit_vendable_fini')->where('categorie_id', '!=',4)->get();
		$totappro = DB::table('ligne_utilisation')->whereBetween('date', [$date_debut,$date_fin])->get()->sum('nbre');
		$totvente = DB::table('ligne_vente')->where('etat', 'Validée')->whereBetween('date', [$date_debut,$date_fin])->get()->sum('qte');
		$totstk = DB::table('produit_vendable_fini')->get()->sum('stock_gene');
		//$qtevendu = $totappro - $totstk;
		$qtevendu = DB::table('ligne_vente')->get()->sum('qte');
				$pdf = PDF::loadView('produit/parproduitfinipdf',[
				'produits' => $produits,
				'totappro' => $totappro,
				'totvente' => $totvente,
				'totstk' => $totstk,
				'qtevendu' => $qtevendu,
				'date_debut' => $date_debut,
				'date_fin' => $date_fin,
			]);	
			return $pdf->stream();
	} else 
		 {
			return redirect()->route('parproduitfini')->with('error', 'La date de fin ne doit pas dépasser la date de début!');
	}}
	//Liste appro
	function listeappro(){

        if(session('user')== null) {
            return redirect('/');
        }
	$appro = DB::table('approvisionnement')->where('etat2', 'Validé')->get();
	$fournisseur = DB::table('fournisseur')->orderBydesc('id')->get();
	$approcount = DB::table('approvisionnement')->where('etat2', 'Validé')->get()->count();
			return view('liste_appro',[
            'appro' => $appro,
            'fournisseur' => $fournisseur,
            'approcount' => $approcount,
        ]);	
	}
	//Paiement
	function pf($id)
    {

		$fournisseur = DB::table('fournisseur')->where('id',$id)->first();

		return view('produit/paiement_appro',[
            'fournisseur' => $fournisseur,
        ]);	
    }
	//enreg paimeent
	function enregistrer3(Request $request)
    {
        $fournisseurid=request('fou_id');
        $montant=request('montant');
        $mode=request('mode');
		$note=request('note');
		//$today = date('Y-m-d H:i:s');
        $today2 = date('Y-m-d');
		$apayer = DB::table('approvisionnement')->where('fournisseur_id', $fournisseurid)->get()->sum('montant_appro');
		//$fou = DB::table('approvisionnement')->where('id', $fournisseurid)->first()->fournisseur_id;
		$sommePaiement =  DB::table('paiement_fou')->where('fournisseur_id', $fournisseurid)->get()->sum('montant');
		$total = $sommePaiement + $montant ;
		//$mtd = DB::table('approvisionnement')->where('fournisseur_id', $fournisseurid)->first()->mont_devise;
		//$mtpd = $montant/$mtd;
		
		if( $total >  $apayer ) {
                $message = [
                "title" => 'Erreur',
                "type" => 'error',
                "response" => 'Le montant saisi ne doit pas dépasser le restant à payer :'. ' '. ($apayer - $sommePaiement).' F',
                ];

                return $message;
       }else{
                DB::table('paiement_fou')->insert(
                    [
                        'fournisseur_id' => $fournisseurid,
                        'montant' => $montant,
                        'mode' => $mode,
                        'date' => $today2,
                        'note' => $note,
                        //'montant_paye_devise' => $mtpd,
                        //'devise' => $mtd,
                        

                    ]
                );
                $solde = DB::table('solde')->get()->count();
				if ($solde > 0){
					$solde = DB::table('solde')->orderBydesc('id')->take(1)->first()->solde;
					$ss = $solde - $montant;
				}else{
					$ss = 0 - $montant;
				}
                
                $fou1 = DB::table('fournisseur')->where('id', $fournisseurid)->first()->nom;
                DB::table('solde')->insert(
                    [
                        'libelle' => 'Paiement '.$fou1,
                        'montant' => $montant,
                        'nature' => 'Dépense',
                        //'reference' => 'R-Apro'.$appro_id,
                        'date' => $today2,
                        'solde' => $ss,

                    ]
                );
				$totalfou = DB::table('ligne_appro')->where('fournisseur_id', $fournisseurid)->where('etat2', "Validé")->get()->sum('montligne');
				$totalfou2 = DB::table('paiement_fou')->where('fournisseur_id', $fournisseurid)->get()->sum('montant');
				$soldo = $totalfou - $totalfou2;
				DB::table('transaction_fournisseur')->insert(
                    [
                        'date' => $today2,
                        'libelle' => 'Règlement',
                        'montant' => $montant,
						'solde' => $soldo,
						'type' => 'Débit',
						'fournisseur_id' => $fournisseurid,
						//'devise' => $mtd,
						//'appro_id' => $appro_id,
                    ]
                );

                $message = [
                    "title" => 'success',
                    "type" => 'success',
                    "response" => 'Paiement enregistré avec succes !',
                    "id" => session('fournisseurid'),
                ];

                return $message;

		}  }
	function listee(){

        if(session('user')== null) {
            return redirect('/');
        }
	$produits = DB::table('produit_vendable')->where('stock_general','>',0)->get();
			return view('produit/stock',[
            'produits' => $produits,
        ]);	
	}
	function listeee(){

        if(session('user')== null) {
            return redirect('/');
        }
	$produits = DB::table('produit_vendable')->get();
	$pdf = PDF::loadView('produit/stockPDF', [
			'produits' => $produits,
		]);
        return $pdf->stream();
	}
	//liste détails
	public function consulter($id)
	{
        if(session('user')== null) {
            return redirect('/');
        }

		$detail=DB::table('ligne_appro')->where('appro_id',$id)->get();
		$totqte = DB::table('ligne_appro')->where('appro_id',$id)->get()->sum('qte');
		$totml = DB::table('ligne_appro')->where('appro_id',$id)->get()->sum('montligne_euro');

		return view('detail_appro', [
			'detail'=> $detail,
			'totqte'=> $totqte,
			'totml'=> $totml,
		]);
	}
	public function consulter2($id)
	{
        if(session('user')== null) {
            return redirect('/');
        }

		$detail=DB::table('ligne_appro_vendable')->where('produit_id',$id)->orderBydesc('id')->get();

		return view('produit/detail-appro-produit', [
			'detail'=> $detail,
		]);
	}
	public function consulter3($id)
	{
        if(session('user')== null) {
            return redirect('/');
        }
		session(['id'=> $id]);
		$detail=DB::table('stock_magasin')->where('produit_id',$id)->orderBydesc('id')->get();
		$magasin=DB::table('magasin')->orderBydesc('id')->get();

		return view('produit/detail-mouvement-magasin', [
			'detail'=> $detail,
			'magasin'=> $magasin,
		]);
	}
		public function mouvementPost()
	{
        if(session('user')== null) {
            return redirect('/');
        }
		$id = session('id');
		$magasin = request('magasin');
		$date_debut = request('date_debut');
        $date_debut= explode('/', $date_debut);
        $date_debut= array_reverse($date_debut);
        $date_debut= implode('-', $date_debut);

        $date_fin = request('date_fin');
        $date_fin= explode('/', $date_fin);
        $date_fin= array_reverse($date_fin);
        $date_fin= implode('-', $date_fin);
		
		session(['date_debut'=> $date_debut]);
		session(['date_fin'=> $date_fin]);
		session(['magasin'=> $magasin]);
		
		if($date_fin > $date_debut || $date_fin == $date_debut){
		if ($magasin==0){
			$detail=DB::table('stock_magasin')->where('produit_id',$id)->whereBetween('date', [$date_debut,$date_fin])->get();
		} else {
			$detail=DB::table('stock_magasin')->where('produit_id',$id)->where('magasin_id', $magasin)->whereBetween('date', [$date_debut,$date_fin])->get();
		}
		//$detail=DB::table('stock_magasin')->where('produit_id',$id)->whereBetween('date', [$date_debut,$date_fin])->orderBydesc('id')->get();
		$magasin1=DB::table('magasin')->orderBydesc('id')->get();

		return view('produit/detail-mouvement-magasin-rech', [
			'detail'=> $detail,
			'date_debut'=> $date_debut,
			'date_fin'=> $date_fin,
			'magasin1'=> $magasin1,
			'magasin'=> $magasin,
		]);
	}else {
			return redirect()->route('detail-mouvement-magasin')->with('error', 'La date de fin ne doit pas dépasser la date de début!');
	}}
	public function mouvementPDF()
	{
        if(session('user')== null) {
            return redirect('/');
        }
		$id = session('id');
		$date_debut = session('date_debut');
		$date_fin = session('date_fin');
		$magasin = session('magasin');
		
		 if($date_fin > $date_debut || $date_fin == $date_debut){

		//$detail=DB::table('stock_magasin')->where('produit_id',$id)->whereBetween('date', [$date_debut,$date_fin])->orderBydesc('id')->get();
		if ($magasin==0){
			$detail=DB::table('stock_magasin')->where('produit_id',$id)->whereBetween('date', [$date_debut,$date_fin])->get();
		} else {
			$detail=DB::table('stock_magasin')->where('produit_id',$id)->where('magasin_id', $magasin)->whereBetween('date', [$date_debut,$date_fin])->get();
		}
		$pdf = PDF::loadView('produit/detail-mouvement-magasin-pdf', [
			'detail'=> $detail,
			'date_debut'=> $date_debut,
			'date_fin'=> $date_fin,
			'magasin'=> $magasin,
		]);
		
		return $pdf->stream();
	}}
	public function consulter4($id)
	{
        if(session('user')== null) {
            return redirect('/');
        }

		$detail=DB::table('stock_cuisine')->where('produit_id',$id)->get();

		return view('produit/detail-mouvement-cuisine', [
			'detail'=> $detail,
		]);
	}
	public function consulter5($id)
	{
        if(session('user')== null) {
            return redirect('/');
        }

        $detail=DB::table('stock_resto')->where('produit_id',$id)->orderBydesc('id')->get();

		return view('produit/detail-mouvement-resto', [
			'detail'=> $detail,
		]);
	}
	public function consulter22($id)
	{
        if(session('user')== null) {
            return redirect('/');
        }

        $detail=DB::table('ligne_appro_cuisine')->where('produit_id',$id)->orderBydesc('id')->get();
        
		return view('produit/detail-appro-cuisine', [
			'detail'=> $detail,
		]);
	}
	public function consulter23($id)
	{
        if(session('user')== null) {
            return redirect('/');
        }

		$detail=DB::table('ligne_utilisation')->where('produit_id',$id)->orderBydesc('id')->get();

		return view('produit/detail-appro-resto', [
			'detail'=> $detail,
		]);
	}
	public function consulter222($id)
	{
        if(session('user')== null) {
            return redirect('/');
        }

		$detail=DB::table('ligne_utilisation')->where('produit_id',$id)->orderBydesc('id')->get();

		return view('produit/detail-utilisation-cuisine', [
			'detail'=> $detail,
		]);
	}
	public function recherche() {
		$date_debut = request('date_debut');
		$fou = request('fou');
        $date_debut= explode('/', $date_debut);
        $date_debut= array_reverse($date_debut);
        $date_debut= implode('-', $date_debut);

        $date_fin = request('date_fin');
        $date_fin= explode('/', $date_fin);
        $date_fin= array_reverse($date_fin);
        $date_fin= implode('-', $date_fin);
		
				session(['date_debut'=> $date_debut]);
				session(['date_fin'=> $date_fin]);
				session(['fou'=> $fou]);
		
		 if($date_fin > $date_debut || $date_fin == $date_debut){
			if ($fou==0){
				$appro = DB::table('approvisionnement')->where('etat2', 'Validé')->whereBetween('date2', [$date_debut,$date_fin])->get();
				$approcount=DB::table('approvisionnement')->where('etat2', 'Validé')->whereBetween('date2', [$date_debut,$date_fin])->get()->count();
			} else {
				$appro = DB::table('approvisionnement')->where('fournisseur_id', $fou)->where('etat2', 'Validé')->whereBetween('date2', [$date_debut,$date_fin])->get();
				$approcount=DB::table('approvisionnement')->where('fournisseur_id', $fou)->where('etat2', 'Validé')->whereBetween('date2', [$date_debut,$date_fin])->get()->count();
			}
			$fournisseur = DB::table('fournisseur')->orderBydesc('id')->get();
			return view('liste_appro_recherche',[
            'appro' => $appro,
            'fou' => $fou,
            'fournisseur' => $fournisseur,
            'approcount' => $approcount,
            'date_debut' => $date_debut,
            'date_fin' => $date_fin,
        ]);	
		 } else 
		 {
			return redirect()->route('liste_appro')->with('error', 'La date de fin ne doit pas dépasser la date de début!');
		 }
	}
	function liste4(){

        if(session('user')== null) {
            return redirect('/');
        }
		$date_debut = session('date_debut');
		$date_fin = session('date_fin');
		$fou = session('fou');
		if($date_fin > $date_debut || $date_fin == $date_debut){
			if ($fou==0){
				$appro = DB::table('approvisionnement')->where('etat2', 'Validé')->whereBetween('date2', [$date_debut,$date_fin])->get();
			} else {
				$appro = DB::table('approvisionnement')->where('fournisseur_id', $fou)->where('etat2', 'Validé')->whereBetween('date2', [$date_debut,$date_fin])->get();
				
			}
			$fournisseur = DB::table('fournisseur')->orderBydesc('id')->get();
			$approcount=DB::table('approvisionnement')->where('fournisseur_id', $fou)->where('etat2', 'Validé')->whereBetween('date2', [$date_debut,$date_fin])->get()->count();
			$pdf = PDF::loadView('liste_appro_recherchePDF', [
            'appro' => $appro,
            'fou' => $fou,
            'fournisseur' => $fournisseur,
            'approcount' => $approcount,
            'date_debut' => $date_debut,
            'date_fin' => $date_fin,
		]);
        return $pdf->stream();
	}else 
		 {
			return redirect()->route('listeVente')->with('error', 'La date de fin ne doit pas dépasser la date de début!');
		 }
	
	}
	//VENTES PAR PRODUIT
	function vp(){

        if(session('user')== null) {
            return redirect('/');
        }
	$lv = DB::table('ligne_vente')->where('etat', 'Validée')->get();
	$lvcount = DB::table('ligne_vente')->where('etat', 'Validée')->get()->count();
	$produit = DB::table('produit')->orderBydesc('id')->get();
			return view('produit/vente_par_produit',[
            'lv' => $lv,
            'produit' => $produit,
            'lvcount' => $lvcount,

        ]);	
	}
	function vp2(){

        if(session('user')== null) {
            return redirect('/');
        }
		$date_debut = request('date_debut');
		$pro = request('pro');
        $date_debut= explode('/', $date_debut);
        $date_debut= array_reverse($date_debut);
        $date_debut= implode('-', $date_debut);

        $date_fin = request('date_fin');
        $date_fin= explode('/', $date_fin);
        $date_fin= array_reverse($date_fin);
        $date_fin= implode('-', $date_fin);
		
				session(['date_debut'=> $date_debut]);
				session(['date_fin'=> $date_fin]);
				session(['pro'=> $pro]);
		
		 if($date_fin > $date_debut || $date_fin == $date_debut){
			if ($pro==0){
				$lv = DB::table('ligne_vente')->where('etat', 'Validée')->whereBetween('date', [$date_debut,$date_fin])->get();
				$lvcount = DB::table('ligne_vente')->where('etat', 'Validée')->whereBetween('date', [$date_debut,$date_fin])->get()->count();
			} else {
				$lv = DB::table('ligne_vente')->where('produit_id', $pro)->where('etat', 'Validée')->whereBetween('date', [$date_debut,$date_fin])->get();
				$lvcount = DB::table('ligne_vente')->where('produit_id', $pro)->where('etat', 'Validée')->whereBetween('date', [$date_debut,$date_fin])->get()->count();
			}
			//$lv = DB::table('ligne_vente')->get();
			$produit = DB::table('produit')->orderBydesc('id')->get();
			return view('produit/vente_par_produit_rech',[
            'lv' => $lv,
            'produit' => $produit,
            'lvcount' => $lvcount,
            'pro' => $pro,
            'date_debut' => $date_debut,
            'date_fin' => $date_fin,

        ]);	
	}}
	//PDF VENTE PAR PRODUIT
	function venteparpropdf(){

        if(session('user')== null) {
            return redirect('/');
        }
        
	$lv = DB::table('ligne_vente')->where('etat', 'Validée')->get();
	$produit = DB::table('produit')->orderBydesc('id')->get();
			$pdf = PDF::loadView('produit/vente_par_produitPDF', [
            'lv' => $lv,

        ]);	
		return $pdf->stream();
	}
	function vp3(){

        if(session('user')== null) {
            return redirect('/');
        }
		
		
				$date_debut = session('date_debut');
				$date_fin = session('date_fin');
				$pro = session('pro');
		
		 if($date_fin > $date_debut || $date_fin == $date_debut){
			if ($pro==0){
				$lv = DB::table('ligne_vente')->where('etat', 'Validée')->whereBetween('date', [$date_debut,$date_fin])->get();
				$lvcount = DB::table('ligne_vente')->where('etat', 'Validée')->whereBetween('date', [$date_debut,$date_fin])->get()->count();
			} else {
				$lv = DB::table('ligne_vente')->where('produit_id', $pro)->where('etat', 'Validée')->whereBetween('date', [$date_debut,$date_fin])->get();
				$lvcount = DB::table('ligne_vente')->where('produit_id', $pro)->where('etat', 'Validée')->whereBetween('date', [$date_debut,$date_fin])->get()->count();
			}
			//$lv = DB::table('ligne_vente')->get();
			$produit = DB::table('produit')->orderBydesc('id')->get();
			$pdf = PDF::loadView('produit/vente_par_produit_rechPDF',[
            'lv' => $lv,
            'produit' => $produit,
            'lvcount' => $lvcount,
            'pro' => $pro,
            'date_debut' => $date_debut,
            'date_fin' => $date_fin,

        ]);	
		 return $pdf->stream();
	}}
	//RECHERCHER MOUVEMENTS MAGASIN
	function magasinPost(){

        if(session('user')== null) {
            return redirect('/');
        }
		$magasin = request('magasin');
		session(['magasin'=> $magasin]);
		
		 if($magasin==0){
			$produits = DB::table('produit_vendable')->get();
			$totappro = DB::table('ligne_appro_vendable')->where('etat', 'Validée')->get()->sum('qte');
			$qtevendu = DB::table('ligne_vente')->where('etat', 'Validée')->get()->sum('qte');
		 } else {
			 $produits = DB::table('produit_vendable')->get();
			$totappro = DB::table('ligne_appro_vendable')->where('magasin_id', $magasin)->where('etat', 'Validée')->get()->sum('qte');
			$qtevendu = DB::table('ligne_vente')->where('etat', 'Validée')->get()->sum('qte');
		 }
			
			return view('produit/stock-general-rech',[
            'produits' => $produits,
            'totappro' => $totappro,
            'qtevendu' => $qtevendu,
            'magasin' => $magasin,
        ]);	
	}
	//MAGASIN POST PDF
	function magasinpostpdf(){

        if(session('user')== null) {
            return redirect('/');
        }
        $magasin = session('magasin');
		if($magasin==0){
			$produits = DB::table('produit_vendable')->get();
			$totappro = DB::table('ligne_appro_vendable')->where('etat', 'Validée')->get()->sum('qte');
			$qtevendu = DB::table('ligne_vente')->where('etat', 'Validée')->get()->sum('qte');
		 } else {
			 $produits = DB::table('produit_vendable')->get();
			$totappro = DB::table('ligne_appro_vendable')->where('magasin_id', $magasin)->where('etat', 'Validée')->get()->sum('qte');
			$qtevendu = DB::table('ligne_vente')->where('etat', 'Validée')->get()->sum('qte');
		 }
			$pdf = PDF::loadView('produit/stock-general-rech-pdf', [
            'produits' => $produits,
            'totappro' => $totappro,
            //'totvente' => $totvente,
            'magasin' => $magasin,
            'qtevendu' => $qtevendu,

        ]);	
		return $pdf->stream();
	}
}
