<?php

namespace App\Http\Controllers;

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

class InventaireController extends Controller
{
    //

    public function inventairemagasin(){
	
        if(session('user')== null) {
            return redirect('/');
        }
        $produit=DB::table('produit_vendable')->orderby('designation','asc')->get();
		if ( session('user')->roles =="Admin"){
			$magasin=DB::table('magasin')->get();
		} else {
			$magasin=DB::table('magasin')->where('id', session('user')->magasin_id)->get();
		}

		$inventaire = DB::table('ligne_inv_magasin')->orderBy('etat','ASC')->take(200)->get();

		return view('inventaire/inventaire_magasin', [
			'produit'=> $produit,
			'magasin'=> $magasin,
			'inventaire'=> $inventaire,
		]);
    }
	public function inventairegeneral(){
	
        if(session('user')== null) {
            return redirect('/');
        }
        $produit=DB::table('produit_vendable')->orderby('designation','asc')->get();
		$inventaire = DB::table('inventaire_general')->where('etat','En cours')->orderBy('id','ASC')->get();
        $depot=DB::table('depot')->orderby('nom','asc')->get();
		return view('inventaire/inventaire_general', [
			'produit'=> $produit,
			'inventaire'=> $inventaire,
			'depot'=> $depot,
		]);
    }

   
    public function inventaireresto(){
	
        if(session('user')== null) {
            return redirect('/');
        }
        $produit=DB::table('produit_vendable_fini')->get();

		$inventaire = DB::table('ligne_inv_resto')->orderBydesc('id')->take(5)->get();

		return view('inventaire/inventaire_resto', [
			'produit'=> $produit,
			'inventaire'=> $inventaire,
		]);
    }


    public function inventairecuisine(){
	
        if(session('user')== null) {
            return redirect('/');
        }
        $produit=DB::table('produit_vendable')->get();

		$inventaire = DB::table('ligne_inv_cuisine')->orderBydesc('id')->take(5)->get();

		return view('inventaire/inventaire_cuisine', [
			'produit'=> $produit,
			'inventaire'=> $inventaire,
		]);
    }


    function enregistrerresto(Request $request)
    {
        $today=date('Y-m-d');
        $invrestorant = collect(request('invrestorant'))->chunk(2);

        DB::table('ligne_inv_resto')->insert(
            [
                'date' => $today,
               
            ]
        );

        $idLastres = DB::table('ligne_inv_resto')->get()->last()->id;

        $id2= strlen($idLastres);

        if ($id2==1){

            DB::table('ligne_inv_resto')->where('id', $idLastres)->update(
                [
                    'reference' => 'INVRESTO-000'.$idLastres,
                ]
            );

        } elseif ($id2==2){

            DB::table('ligne_inv_resto')->where('id', $idLastres)->update(
                [
                    'reference' => 'INVRESTO-00'.$idLastres,
                ]
            );

        } elseif ($id2==3){

            DB::table('ligne_inv_resto')->where('id', $idLastres)->update(
                [
                    'reference' => 'INVRESTO-0'.$idLastres,
                ]
            );

        } else {

            DB::table('ligne_inv_resto')->where('id', $idLastres)->update(
                [
                    'reference' => 'INVRESTO-'.$idLastres,
                ]
            );
        }
       
        $z=0;

        foreach ($invrestorant as $key=> $invrestorants){

            $qtesto =  DB::table('produit_vendable_fini')->where('id', $invrestorants[0 +$z])->first()->stock_gene;

            DB::table('inventaire_resto')->insert(
                [
                    'ligne_id' => $idLastres,
                    'produit_id' => $invrestorants[0 +$z],
                    'nbre' => $invrestorants[1 +$z],
                    'qte_theo' => $qtesto,
                  
                ]
            );

            $z += count($invrestorants->toArray());

        }

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

        return $message;


    }


    function enregistrercuisine(Request $request)
    {
        $today=date('Y-m-d');
        $invcuisine = collect(request('invcuisine'))->chunk(2);

        DB::table('ligne_inv_cuisine')->insert(
            [
                'date' => $today,
               
            ]
        );

        $idLastcui = DB::table('ligne_inv_cuisine')->get()->last()->id;

        $id2= strlen($idLastcui);

        if ($id2==1){

            DB::table('ligne_inv_cuisine')->where('id', $idLastcui)->update(
                [
                    'reference' => 'INVCUI-000'.$idLastcui,
                ]
            );

        } elseif ($id2==2){

            DB::table('ligne_inv_cuisine')->where('id', $idLastcui)->update(
                [
                    'reference' => 'INVCUI-00'.$idLastcui,
                ]
            );

        } elseif ($id2==3){

            DB::table('ligne_inv_cuisine')->where('id', $idLastcui)->update(
                [
                    'reference' => 'INVCUI-0'.$idLastcui,
                ]
            );

        } else {

            DB::table('ligne_inv_cuisine')->where('id', $idLastcui)->update(
                [
                    'reference' => 'INVCUI-'.$idLastcui,
                ]
            );
        }
       
        $j=0;

        foreach ($invcuisine as $key=> $invcuisines){

            //$qtesto =  DB::table('produit_vendable')->where('id', $invcuisines[0 +$j])->first()->stock_cuisine;
			//Verifions sil ya deja une ligne du produit dans la table stock magasin
			$qtecount =  DB::table('stock_cuisine')->where('produit_id', $invcuisines[0 +$j])->get()->count();
			if ($qtecount > 0) {
				/* Stock actuel du produit */
            $qtesto =  DB::table('stock_cuisine')->where('produit_id', $invcuisines[0 +$j])->orderBydesc('id')->take(1)->first()->apres;
				DB::table('inventaire_cuisine')->insert(
                [
                    'ligne_id' => $idLastcui,
                    'produit_id' => $invcuisines[0 +$j],
                    'qte' => $invcuisines[1 +$j],
                    'qte_theo' => $qtesto,
                  
                ]
            );
			/*  Comparer les stock reel et theorique*/
			if ($invcuisines[1 +$j] > $qtesto){
				$ajust = $invcuisines[1 +$j] - $qtesto;
				DB::table('stock_cuisine')->insert(
                    [
                        'date' => $today,
                        'produit_id' => $invcuisines[0 +$j],
                        'nbre' => $ajust,
						'type_operation' => 'Inventaire',
						'en_stock' => $qtesto,
						'apres' => ($qtesto + $ajust),
                    ]
                );
				//Mise a jour du stock cuisine dans la table produit_vendable
				DB::table('produit_vendable')->where('id', $invcuisines[0 +$j])->update(
                [
                    'stock_cuisine' => ($qtesto + $ajust),
                ]
            );
			} elseif ($invcuisines[1 +$j] < $qtesto){
				$ajust = $invcuisines[1 +$j] - $qtesto;
				$ajust2 = $qtesto - $invcuisines[1 +$j];
				DB::table('stock_cuisine')->insert(
                    [
                        'date' => $today,
                        'produit_id' => $invcuisines[0 +$j],
                        'nbre' => $ajust,
						'type_operation' => 'Inventaire',
						'en_stock' => $qtesto,
						'apres' => ($qtesto - $ajust2),
                    ]
                );
				//Mise a jour du stock cuisine dans la table produit_vendable
				DB::table('produit_vendable')->where('id', $invcuisines[0 +$j])->update(
                [
                    'stock_cuisine' => ($qtesto - $ajust2),
                ]
            );
			} else {
				DB::table('stock_cuisine')->insert(
                    [
                        'date' => $today,
                        'produit_id' => $invcuisines[0 +$j],
                        'nbre' => 0,
						'type_operation' => 'Inventaire',
						'en_stock' => $qtesto,
						'apres' => $qtesto,
                    ]
                );
			}
            
			} else {
				//$qtesto =  DB::table('stock_cuisine')->where('produit_id', $invmags[0 +$i])->orderBydesc('id')->take(1)->first()->apres;
				DB::table('inventaire_cuisine')->insert(
                [
                    'ligne_id' => $idLastcui,
                    'produit_id' => $invcuisines[0 +$j],
                    'qte' => $invcuisines[1 +$j],
                    'qte_theo' => 0,
                  
                ]
            );
			DB::table('stock_cuisine')->insert(
                    [
                        'date' => $today,
                        'produit_id' => $invcuisines[0 +$j],
                        'nbre' => $invcuisines[1 +$j],
						'type_operation' => 'Inventaire',
						'en_stock' => 0,
						'apres' => $invcuisines[1 +$j],
                    ]
                );
			//Mettre à jour le stock cuisine dans la table produit vendable
				$sc = DB::table('produit_vendable')->where('id', $invcuisines[0 +$j])->first()->stock_cuisine;
				DB::table('produit_vendable')->where('id', $invcuisines[0 +$j])->update(
                [
                    'stock_cuisine' => ($sc + $invcuisines[1 +$j]),
                ]
            );	
			}
            $j += count($invcuisines->toArray());

        }

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

        return $message;


    }
    

    function enregistrermagasin(Request $request)
    {

        $magasin=request('magasin');
        $today=date('Y-m-d');
        $invmag=request('item');

        DB::table('ligne_inv_magasin')->insert(
            [
                'magasin_id' => $magasin,
                'date' => $today,
				'user_id' => session('user')->id,
				'etat' => 'En cours',
            ]
        );

        $idLastmag = DB::table('ligne_inv_magasin')->get()->last()->id;

        $id2= strlen($idLastmag);

        if ($id2==1){

            DB::table('ligne_inv_magasin')->where('id', $idLastmag)->update(
                [
                    'reference' => 'INVMAG-000'.$idLastmag,
                ]
            );

        } elseif ($id2==2){

            DB::table('ligne_inv_magasin')->where('id', $idLastmag)->update(
                [
                    'reference' => 'INVMAG-00'.$idLastmag,
                ]
            );

        } elseif ($id2==3){

            DB::table('ligne_inv_magasin')->where('id', $idLastmag)->update(
                [
                    'reference' => 'INVMAG-0'.$idLastmag,
                ]
            );

        } else {

            DB::table('ligne_inv_magasin')->where('id', $idLastmag)->update(
                [
                    'reference' => 'INVMAG-'.$idLastmag,
                ]
            );
        }

        $i=0;

        foreach ($invmag as $key=> $invmags){
			
            //Verifions sil ya deja une ligne du produit dans la table stock magasin
			//$qtecount =  DB::table('stock_magasin')->where('produit_id', $invmags[0 +$i])->where('magasin_id', $magasin)->get()->count();
			/* Stock actuel du produit */
            $qtestoc =  DB::table('stock_magasin')->where('produit_id', $invmags[0 +$i])->where('magasin_id', $magasin)->get()->count();
			if ($qtestoc == 0){
				$qtesto = 0;
			} else {
				$qtesto =  DB::table('stock_magasin')->where('produit_id', $invmags[0 +$i])->where('magasin_id', $magasin)->orderBydesc('id')->take(1)->first()->apres;
			}
            
            //$sg =  DB::table('produit_vendable')->where('id', $invmags[0 +$i])->first()->stock_general;
            DB::table('inventaire_magasin')->insert(
                [
                    'ligne_id' => $idLastmag,
                    'produit_id' => $invmags[0 +$i],
                    'qte' => $invmags[1 +$i],
                    'qte_theo' => $qtesto,
                    'date' => $today,
                    'pa' => $invmags[3 +$i],
                    'montligne' => ($invmags[3 +$i] * $invmags[1 +$i]),
					'user_id' => session('user')->id,
					'magasin_id' => $magasin,
					'etat' => 'En cours',
                ]
            );
			DB::table('produit_vendable')->where('id', $invmags[0 +$i])->update(
						[
							'prix_detail' => $invmags[2 +$i],
							'pr' => $invmags[3 +$i],
						]
			);
			$i;
			
		}
        return redirect()->route('inventaire_magasin')->with('status', 'Inventaire enregistré avec succès !');
		
	}
	//VALIER L'INVENTAIRE
	
	function vdmagasin()
    {
		$id = request('id');
		$vo = DB::table('inventaire_magasin')->where('ligne_id', $id)->get();
		$today = date('Y-m-d');
		foreach($vo as $vos){
			$qtestoc = DB::table('stock_magasin')->where('produit_id', $vos->produit_id)->where('magasin_id', session('user')->magasin_id)->get()->count();
			if ($qtestoc == 0){
				$qtesto = 0;
			} else {
				$qtesto = DB::table('stock_magasin')->where('produit_id', $vos->produit_id)->where('magasin_id', session('user')->magasin_id)->orderBydesc('id')->take(1)->first()->apres;
			}
			$qteval = $vos->qte;
		
					DB::table('produit_vendable')->where('id', $vos->produit_id)->update(
						[
							'stock_general' => $qteval,
							'pr' => $vos->pa,
						]
					);
					DB::table('stock_magasin')->insert(
							[
								'date' => $vos->date,
								'magasin_id' => $vos->magasin_id,
								'produit_id' => $vos->produit_id,
								'qte' => $vos->qte,
								'type_operation' => 'Inventaire',
								'en_stock' => $qtesto,
								'apres' => $vos->qte,
								'inventaire_id' => $id,
								//'stock_general' => $sg + $invmags[1 +$i],
								'pa' => $vos->pa,
								'montligne' => $vos->montligne,
							]
						);	
			}
			DB::table('inventaire_magasin')->where('ligne_id', $id)->update(
			[
				'etat' => "Validée",
			]
		);
		DB::table('ligne_inv_magasin')->where('id', $id)->update(
			[
				'etat' => "Validée",
			]
		);

			return redirect()->route('inventaire_magasin')->with('status', 'Inventaire validé avec succès !');
	}
	function vdgeneral()
    {
		$id = request('id');
		$inv = DB::table('inventaire_general')->where('id', $id)->first();
		$vo = DB::table('ligne_inv_general')->where('ligne_id', $id)->get();
		$today = date('Y-m-d');
		foreach($vo as $vos){
			$qtestoc = DB::table('magasin_general')->where('produit_id', $vos->produit_id)->where('depot_id', $inv->depot_id)->get()->count();
			if ($qtestoc == 0){
				$qtesto = 0;
			} else {
				$qtesto = DB::table('magasin_general')->where('produit_id', $vos->produit_id)->where('depot_id', $inv->depot_id)->orderBydesc('id')->take(1)->first()->apres;
			}
			$qteval = $vos->qte;
		
					DB::table('produit_vendable')->where('id', $vos->produit_id)->update(
						[
							'stock_magasin' => $qteval,
						]
					);
					DB::table('magasin_general')->insert(
							[
								'depot_id' => $inv->depot_id,
								'date' => $vos->date,
								'produit_id' => $vos->produit_id,
								'qte' => $vos->qte,
								'type_operation' => 'Inventaire',
								'en_stock' => $qtesto,
								'apres' => $vos->qte,
								'pa' => $vos->pa,
								'montligne' => $vos->montligne,
							]
						);	
			}
			DB::table('ligne_inv_general')->where('ligne_id', $id)->update(
			[
				'etat' => "Validée",
			]
		);
		DB::table('inventaire_general')->where('id', $id)->update(
			[
				'etat' => "Validée",
			]
		);

			return redirect()->route('inventaire-general')->with('status', 'Inventaire validé avec succès !');
	}
	
	
	//ANNULER INVENTAIRE MAGASIN
	
	function annulermagasin()
    {

        $id=request('id');
        $today=date('Y-m-d');
        
        DB::table('ligne_inv_magasin')->insert(
            [
                'magasin_id' => $magasin,
                'date' => $today,
				'user_id' => session('user')->id,
            ]
        );

        $idLastmag = DB::table('ligne_inv_magasin')->get()->last()->id;

        $id2= strlen($idLastmag);

        if ($id2==1){

            DB::table('ligne_inv_magasin')->where('id', $idLastmag)->update(
                [
                    'reference' => 'INVMAG-000'.$idLastmag,
                ]
            );

        } elseif ($id2==2){

            DB::table('ligne_inv_magasin')->where('id', $idLastmag)->update(
                [
                    'reference' => 'INVMAG-00'.$idLastmag,
                ]
            );

        } elseif ($id2==3){

            DB::table('ligne_inv_magasin')->where('id', $idLastmag)->update(
                [
                    'reference' => 'INVMAG-0'.$idLastmag,
                ]
            );

        } else {

            DB::table('ligne_inv_magasin')->where('id', $idLastmag)->update(
                [
                    'reference' => 'INVMAG-'.$idLastmag,
                ]
            );
        }

        $i=0;

        foreach ($invmag as $key=> $invmags){
			
            //Verifions sil ya deja une ligne du produit dans la table stock magasin
			$qtecount =  DB::table('stock_magasin')->where('produit_id', $invmags[0 +$i])->where('magasin_id', $magasin)->get()->count();
			if ($qtecount > 0) {
			/* Stock actuel du produit */
            $qtesto =  DB::table('stock_magasin')->where('produit_id', $invmags[0 +$i])->where('magasin_id', $magasin)->orderBydesc('id')->take(1)->first()->apres;
            $sg =  DB::table('produit_vendable')->where('id', $invmags[0 +$i])->first()->stock_general;
			
            DB::table('inventaire_magasin')->insert(
                [
                    'ligne_id' => $idLastmag,
                    'produit_id' => $invmags[0 +$i],
                    'qte' => $invmags[1 +$i],
                    'qte_theo' => $qtesto,
                    'date' => $today,
                    'pa' => $invmags[2 +$i],
                    'montligne' => ($invmags[2 +$i] * $invmags[1 +$i]),
					'user_id' => session('user')->id,
					'magasin_id' => $magasin,
                  
                ]
            );
			/* Mise a jour des stocks par la quantite de l'inventaire*/
			//Cas ou le stock reel saisi depasse celui theorique
			if ($invmags[1 +$i] > $qtesto){
				$ajuste = $invmags[1 +$i] - $qtesto;
				DB::table('stock_magasin')->insert(
                    [
                        'date' => $today,
                        'magasin_id' => $magasin,
                        'produit_id' => $invmags[0 +$i],
                        'qte' => $ajuste,
                        'type_operation' => 'Inventaire',
						'en_stock' => $qtesto,
						'apres' => ($qtesto + $ajuste),
						'stock_general' => ($sg + $ajuste),
						'pa' => $invmags[2 +$i],
						'inventaire_id' => $idLastmag,
						'montligne' => ($invmags[2 +$i] * $invmags[1 +$i]),
                    ]
                );
				//Mettre à jour le stock général dans la table produit vendable
				$sg = DB::table('produit_vendable')->where('id', $invmags[0 +$i])->first()->stock_general;
				DB::table('produit_vendable')->where('id', $invmags[0 +$i])->update(
                [
                    'stock_general' => $sg + $ajuste,
                ]
            );	
			} elseif ($invmags[1 +$i] < $qtesto){
				$ajuste = $invmags[1 +$i] - $qtesto;
				$ajuste2 =  $qtesto - $invmags[1 +$i];
				DB::table('stock_magasin')->insert(
                    [
                        'date' => $today,
                        'magasin_id' => $magasin,
                        'produit_id' => $invmags[0 +$i],
                        'qte' => $ajuste,
                        'type_operation' => 'Inventaire',
						'en_stock' => $qtesto,
						'apres' => ($qtesto - $ajuste2),
						'pa' => $invmags[2 +$i],
						'inventaire_id' => $idLastmag,
						'montligne' => ($invmags[2 +$i] * $invmags[1 +$i]),
						'stock_general' => ($sg - $ajuste),
                    ]
                );
				//Mettre à jour le stock général dans la table produit vendable
				$sg = DB::table('produit_vendable')->where('id', $invmags[0 +$i])->first()->stock_general;
				DB::table('produit_vendable')->where('id', $invmags[0 +$i])->update(
                [
                    'stock_general' => $sg - $ajuste,
                ]
            );	
			} else {
				$sg = DB::table('produit_vendable')->where('id', $invmags[0 +$i])->first()->stock_general;
				DB::table('stock_magasin')->insert(
                    [
                        'date' => $today,
                        'magasin_id' => $magasin,
                        'produit_id' => $invmags[0 +$i],
                        'qte' => 0,
                        'type_operation' => 'Inventaire',
						'en_stock' => $qtesto,
						'apres' => $qtesto,
						'stock_general' => $sg,
						'inventaire_id' => $idLastmag,
						'pa' => $invmags[2 +$i],
						'montligne' => ($invmags[2 +$i] * $invmags[1 +$i]),
                    ]
                );	
			}
			} else {
				$sg = DB::table('produit_vendable')->where('id', $invmags[0 +$i])->first()->stock_general;
				DB::table('inventaire_magasin')->insert(
                [
                    'ligne_id' => $idLastmag,
                    'produit_id' => $invmags[0 +$i],
                    'qte' => $invmags[1 +$i],
                    'qte_theo' => 0,
                    'date' => $today,
					'pa' => $invmags[2 +$i],
                    'montligne' => ($invmags[2 +$i] * $invmags[1 +$i]),
					'user_id' => session('user')->id,
					'magasin_id' => $magasin,
					
                ]
            );
			DB::table('stock_magasin')->insert(
                    [
                        'date' => $today,
                        'magasin_id' => $magasin,
                        'produit_id' => $invmags[0 +$i],
                        'qte' => $invmags[1 +$i],
                        'type_operation' => 'Inventaire',
						'en_stock' => 0,
						'apres' => $invmags[1 +$i],
						'inventaire_id' => $idLastmag,
						'stock_general' => $sg + $invmags[1 +$i],
						'pa' => $invmags[2 +$i],
						'montligne' => ($invmags[2 +$i] * $invmags[1 +$i]),
                    ]
                );
			//Mettre à jour le stock général dans la table produit vendable
				$sg = DB::table('produit_vendable')->where('id', $invmags[0 +$i])->first()->stock_general;
				DB::table('produit_vendable')->where('id', $invmags[0 +$i])->update(
                [
                    'stock_general' => $sg + $invmags[1 +$i],
                ]
            );	
			}
            $i += count($invmags->toArray());
			
			
        }

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

        return $message;


    }
	
	//ENREGISTRER INV GENERAL
	function enregistrergeneral(Request $request)
    {
        $today=date('Y-m-d');
        $depot_id=request('depot_id');
        $invmag=collect(request('invmag'))->chunk(3);

        DB::table('inventaire_general')->insert(
            [
                'date' => $today,
                'depot_id' => $depot_id,
				'user_id' => session('user')->id,
				'etat' => 'En cours',
            ]
        );

        $idLastmag = DB::table('inventaire_general')->get()->last()->id;

        $id2= strlen($idLastmag);

        if ($id2==1){

            DB::table('inventaire_general')->where('id', $idLastmag)->update(
                [
                    'reference' => 'INVMAG-000'.$idLastmag,
                ]
            );

        } elseif ($id2==2){

            DB::table('inventaire_general')->where('id', $idLastmag)->update(
                [
                    'reference' => 'INVMAG-00'.$idLastmag,
                ]
            );

        } elseif ($id2==3){

            DB::table('inventaire_general')->where('id', $idLastmag)->update(
                [
                    'reference' => 'INVMAG-0'.$idLastmag,
                ]
            );

        } else {

            DB::table('inventaire_general')->where('id', $idLastmag)->update(
                [
                    'reference' => 'INVMAG-'.$idLastmag,
                ]
            );
        }

        $i=0;

        foreach ($invmag as $key=> $invmags){
			if ($invmags[2 +$i] == 1){
				$count = DB::table('ligne_appro_vendable')->where('produit_id', $invmags[0 +$i])->where('etat', 'Validée')->sum('qte');
				$totalpa = DB::table('ligne_appro_vendable')->where('produit_id', $invmags[0 +$i])->where('etat', 'Validé')->sum('montligne');
				if ($count>0){
					$count2=$count;
				} else {
					$count2=1;
				}
				$paa = $totalpa/$count2;
			} else {
				$paa = $invmags[2 +$i];
			}
			$qtestoc = DB::table('magasin_general')->where('produit_id', $invmags[0 +$i])->get()->count();
			if ($qtestoc == 0){
				$qtesto = 0;
			} else {
				$qtesto = DB::table('magasin_general')->where('produit_id', $invmags[0 +$i])->orderBydesc('id')->take(1)->first()->apres;
			}
			
            DB::table('ligne_inv_general')->insert(
                [
                    'depot_id' => $depot_id,
                    'ligne_id' => $idLastmag,
                    'produit_id' => $invmags[0 +$i],
                    'qte' => $invmags[1 +$i],
                    'qte_theo' => $qtesto,
                    'date' => $today,
                    'pa' => $paa,
                    'montligne' => ($paa * $invmags[1 +$i]),
					'user_id' => session('user')->id,
					'etat' => 'En cours',
                ]
            );
			
            $i += count($invmags->toArray());
			
			
        }

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

        return $message;


    }


    function modif_resto($id) {

        if(session('user')== null) {
            return redirect('/');
        }
       
        $ligne = DB::table('inventaire_resto')->where('id', $id)->first();
        $produit=DB::table('produit_vendable_fini')->get();

        return view('inventaire/modif_inventaire_resto',[

            'ligne' => $ligne,
            'produit'=> $produit,
        ]);
    }


    function modif_cuisine($id) {

        if(session('user')== null) {
            return redirect('/');
        }
       
        $ligne = DB::table('inventaire_cuisine')->where('id', $id)->first();
        $produit=DB::table('produit_vendable')->get();

        return view('inventaire/modif_inventaire_cuisine',[

            'ligne' => $ligne,
            'produit'=> $produit,
           
        ]);
    } 

    function modif_magasin($id) {

        if(session('user')== null) {
            return redirect('/');
        }
       
        $invent = DB::table('ligne_inv_magasin')->where('id', $id)->first();
        $ligne = DB::table('inventaire_magasin')->where('ligne_id', $id)->get();
        $produit=DB::table('produit_vendable')->get();
        if ( session('user')->roles =="Admin"){
			$magasin=DB::table('magasin')->get();
		} else {
			$magasin=DB::table('magasin')->where('id', session('user')->magasin_id)->get();
		}

        return view('inventaire/modif_inventaire_magasin',[

            'invent' => $invent,
            'ligne' => $ligne,
            'produit'=> $produit,
			'magasin'=> $magasin,
        ]);
    }
	function modif_general($id) {

        if(session('user')== null) {
            return redirect('/');
        }
       
        $invent = DB::table('inventaire_general')->where('id', $id)->first();
        $ligne = DB::table('ligne_inv_general')->where('ligne_id', $id)->get();
        $produit=DB::table('produit_vendable')->get();

        return view('inventaire/modif_inventaire_general',[

            'invent' => $invent,
            'ligne' => $ligne,
            'produit'=> $produit,
        ]);
    }
    
    function detailmagasin($id) {

        if(session('user')== null) {
            return redirect('/');
        }
       
        $ligne = DB::table('inventaire_magasin')->where('ligne_id', $id)->get();

        $iddetailmag= $id;

        session(['iddetailmag'=> $iddetailmag]);

        return view('inventaire/detail_magasin',[

            'ligne' => $ligne,
        ]);
    }
	//DETAIL INV GENERAL
	function detailgeneral($id) {

        if(session('user')== null) {
            return redirect('/');
        }
       
        $ligne = DB::table('ligne_inv_general')->where('ligne_id', $id)->get();

        $iddetailmag= $id;

        session(['iddetailmag'=> $iddetailmag]);

        return view('inventaire/detail_general',[

            'ligne' => $ligne,
        ]);
    }
    function detailcuisine($id) {

        if(session('user')== null) {
            return redirect('/');
        }
       
        $ligne = DB::table('inventaire_cuisine')->where('ligne_id', $id)->get();

        $iddetailcui= $id;

        session(['iddetailcui'=> $iddetailcui]);

        return view('inventaire/detail_cuisine',[

            'ligne' => $ligne,
        ]);
    }

    function detailresto($id) {

        if(session('user')== null) {
            return redirect('/');
        }
       
        $ligne = DB::table('inventaire_resto')->where('ligne_id', $id)->get();

        $iddetailrest= $id;

        session(['iddetailrest'=> $iddetailrest]);

        return view('inventaire/detail_resto',[

            'ligne' => $ligne,
        ]);
    }

    function ajoutcuisine($id) {

        if(session('user')== null) {
            return redirect('/');
        }
       
        $produit=DB::table('produit_vendable')->get();

        return view('inventaire/ajout_inventaire_cuisine',[

            'produit' => $produit,
            'idinvligne' => session('iddetailcui'),
        ]);
    }


    function ajoutresto($id) {

        if(session('user')== null) {
            return redirect('/');
        }
       
        $produit=DB::table('produit_vendable_fini')->get();

        return view('inventaire/ajout_inventaire_resto',[

            'produit' => $produit,
            'idinvligne' => session('iddetailrest'),
        ]);
    }


    function ajout_ligne_resto(Request $request, $id)
    {
        $produit=request('produit');
        $qte=request('qte');
       
        $qtetheo = DB::table('produit_vendable_fini')->where('id',$produit)->first()->stock_gene;

        DB::table('inventaire_resto')->insert(
            [
                'produit_id' => $produit,
                'nbre' => $qte,
                'qte_theo' => $qtetheo,
                'ligne_id' => $id,
               
            ]
        );
       
        $message = [
            "title" => 'Succès',
            "type" => 'success',
            "response" => 'Enregistrement effectué avec succès !',
            "idresto" => $id,
        ];

        return $message;


    }


    function ajout_ligne_cuisine(Request $request, $id)
    {
        $produit=request('produit');
        $qte=request('qte');
       
        $qtetheo = DB::table('produit_vendable')->where('id',$produit)->first()->stock_cuisine;

        DB::table('inventaire_cuisine')->insert(
            [
                'produit_id' => $produit,
                'qte' => $qte,
                'qte_theo' => $qtetheo,
                'ligne_id' => $id,
               
            ]
        );
       
        $message = [
            "title" => 'Succès',
            "type" => 'success',
            "response" => 'Enregistrement effectué avec succès !',
            "idcuis" => $id,
        ];

        return $message;


    }


    function valider_resto(Request $request, $id)
    {

        $produit=request('produit');
        $qte=request('qte');
       
        $qtetheo =DB::table('produit_vendable_fini')->where('id',$produit)->first()->stock_gene;

        DB::table('inventaire_resto')->where('id', $id)->update(
            [
                'produit_id' => $produit,
                'nbre' => $qte,
                'qte_theo' => $qtetheo,
               
            ]
        );
       
        $message = [
            "title" => 'Succès',
            "type" => 'success',
            "response" => 'Modification effectué avec succès !',
            "idresto" => session('iddetailrest'),
        ];

        return $message;


    }


    function valider_cuisine(Request $request, $id)
    {

        $produit=request('produit');
        $qte=request('qte');
       
        $qtetheo =DB::table('produit_vendable')->where('id',$produit)->first()->stock_cuisine;

        DB::table('inventaire_cuisine')->where('id', $id)->update(
            [
                'produit_id' => $produit,
                'qte' => $qte,
                'qte_theo' => $qtetheo,
            ]
        );
       
        $message = [
            "title" => 'Succès',
            "type" => 'success',
            "response" => 'Modification effectué avec succès !',
            "idcuis" => session('iddetailcui'),
        ];

        return $message;


    }


    function valider_magasin(Request $request, $id)
    {
       
        $magasin=request('magasin');
        $invmag=collect(request('invmag'))->chunk(3);

        DB::table('ligne_inv_magasin')->where('id', $id)->update(
            [
                'magasin_id' => $magasin,
               
            ]
        );

        $i=0;
        $nbreLigne = DB::table('inventaire_magasin')->where('ligne_id', $id)->get()->count() - 1;

        foreach ($invmag as $key=> $invmags){

            $qtesto =  DB::table('produit_vendable')->where('id', $invmags[1 +$i])->first()->stock_general;

           if ($key <= $nbreLigne ){

            DB::table('inventaire_magasin')->where('id', $invmags[0 +$i])->update(
                [

                    'ligne_id' => $id,
                    'produit_id' => $invmags[1 +$i],
                    'qte' => $invmags[2 +$i],
                    //'qte_theo' => $qtesto,
                ]
            );
           }elseif ($key > $nbreLigne ) {

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

                    'ligne_id' => $id,
                    'produit_id' => $invmags[1 +$i],
                    'qte' => $invmags[2 +$i],
                    //'qte_theo' => $qtesto,
                ]
            );
           }

            $i += count($invmags->toArray());

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

        return $message;


    }
	
	//VALIDER GENERAL
	 function valider_general(Request $request, $id)
    {
        $invmag=collect(request('invmag'))->chunk(3);
		$today = date('Y-m-d');
        /*DB::table('inventaire_general')->where('id', $id)->update(
            [
                'magasin_id' => $magasin,
               
            ]
        );*/

        $i=0;
        //$nbreLigne = DB::table('ligne_inv_general')->where('ligne_id', $id)->get()->count() - 1;
        DB::table('ligne_inv_general')->where('ligne_id', $id)->delete();

        foreach ($invmag as $key=> $invmags){

           if ($invmags[2 +$i] == 1){
				$count = DB::table('ligne_appro_vendable')->where('produit_id', $invmags[0 +$i])->where('etat', 'Validée')->sum('qte');
				$totalpa = DB::table('ligne_appro_vendable')->where('produit_id', $invmags[0 +$i])->where('etat', 'Validé')->sum('montligne');
				if ($count>0){
					$count2=$count;
				} else {
					$count2=1;
				}
				$paa = $totalpa/$count2;
			} else {
				$paa = $invmags[2 +$i];
			}
            DB::table('ligne_inv_general')->insert(
                [

                    'ligne_id' => $id,
                    'produit_id' => $invmags[0 +$i],
                    'qte' => $invmags[1 +$i],
					'montligne' => ($invmags[1 +$i] * $paa),
					'date' => $today,
                    'pa' => $paa,
                    'etat' => 'En cours',
                    'user_id' => session('user')->id,
                ]
            );

            $i += count($invmags->toArray());
		}
		$message = [
            "title" => 'Succès',
            "type" => 'success',
            "response" => 'Modification effectué avec succès !',
        ];

        return $message;

	}
    function VoirSuppressionmagasin ($id) {

        $inventaire= DB::table('ligne_inv_magasin')->where('id',$id)->first();
        return [
            'invent' => $inventaire,
        ];
    }
	function voirinvgeneral ($id) {

        $inventaire= DB::table('inventaire_general')->where('id',$id)->first();
        return [
            'invent' => $inventaire,
        ];
    }
	function voirdetailgeneral ($id) {

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

    function VoirSuppressioncuisine ($id) {

        $inventaire= DB::table('ligne_inv_cuisine')->where('id',$id)->first();
        return [
            'invent' => $inventaire,
        ];
    }


    function VoirSuppressionresto ($id) {

        $inventaire= DB::table('ligne_inv_resto')->where('id',$id)->first();
        return [
            'invent' => $inventaire,
        ];
    }

    function VoirSuppressiondetailmagasin ($id) {

        $inventaire= DB::table('inventaire_magasin')->where('id',$id)->first();
        return [
            'invent' => $inventaire,
        ];
    }

    function VoirSuppressiondetailcuisine ($id) {

        $inventaire= DB::table('inventaire_cuisine')->where('id',$id)->first();
        return [
            'invent' => $inventaire,
        ];
    }

    function VoirSuppressiondetailresto ($id) {

        $inventaire= DB::table('inventaire_resto')->where('id',$id)->first();
        return [
            'invent' => $inventaire,
        ];
    }


    function Supprimermagasin () {

        $id=request('id');

        DB::table('inventaire_magasin')->where('ligne_id', $id)->delete();

        DB::table('ligne_inv_magasin')->where('id', $id)->delete();

        return redirect()->route('inventaire_magasin')->with('status', 'Suppression effectuée avec succes');

    }
	function Supprimergeneral () {

        $id=request('id');

        DB::table('inventaire_general')->where('id', $id)->delete();

        DB::table('ligne_inv_general')->where('ligne_id', $id)->delete();

        return redirect()->route('inventaire-general')->with('status', 'Suppression effectuée avec succes');

    }

    function Supprimerdetailmagasin () {

        $id=request('id');
		$invid = DB::table('inventaire_magasin')->where('id', $id)->first()->ligne_id;
        DB::table('inventaire_magasin')->where('id', $id)->delete();
		$verif = DB::table('inventaire_magasin')->where('ligne_id', $invid)->get()->count();
		if ($verif > 0){
			return redirect()->route('inventaire_magasin')->with('status', 'Ligne supprimée avec succès');
		} else {
			DB::table('ligne_inv_magasin')->where('id', $invid)->delete();
			//return redirect()->route('detail_magasin', ['id'=> session('iddetailmag')])->with('status', 'Suppression effectuée avec succes');
			return redirect()->route('inventaire_magasin')->with('status', 'Ligne supprimée avec succès');
		}
    }
	function Supprimerdetailgeneral () {

        $id=request('id');
		$invid = DB::table('ligne_inv_general')->where('id', $id)->first()->ligne_id;
        DB::table('ligne_inv_general')->where('id', $id)->delete();
		$verif = DB::table('ligne_inv_general')->where('ligne_id', $invid)->get()->count();
		if ($verif > 0){
			return redirect()->route('inventaire-general')->with('status', 'Ligne supprimée avec succès');
		} else {
			DB::table('inventaire_general')->where('id', $invid)->delete();
			//return redirect()->route('detail_magasin', ['id'=> session('iddetailmag')])->with('status', 'Suppression effectuée avec succes');
			return redirect()->route('inventaire-general')->with('status', 'Ligne supprimée avec succès');
		}
    }

    function Supprimerdetailcuisine () {

        $id=request('id');

        DB::table('inventaire_cuisine')->where('id', $id)->delete();

        return redirect()->route('detail_cuisine', ['id'=> session('iddetailcui')])->with('status', 'Suppression effectuée avec succes');

    }

    function Supprimerdetailresto () {

        $id=request('id');

        DB::table('inventaire_resto')->where('id', $id)->delete();

        return redirect()->route('detail_resto', ['id'=> session('iddetailrest')])->with('status', 'Suppression effectuée avec succes');

    }

    function Supprimercuisine () {

        $id=request('id');

        DB::table('inventaire_cuisine')->where('ligne_id', $id)->delete();

        DB::table('ligne_inv_cuisine')->where('id', $id)->delete();

        return redirect()->route('inventaire_cuisine')->with('status', 'Suppression effectuée avec succes');

    }


    function Supprimerresto () {

        $id=request('id');

        DB::table('inventaire_resto')->where('ligne_id', $id)->delete();

        DB::table('ligne_inv_resto')->where('id', $id)->delete();

        return redirect()->route('inventaire_resto')->with('status', 'Suppression effectuée avec succes');

    }
function fichemag($id)
    {

		$inv = DB::table('ligne_inv_magasin')->where('id',$id)->first();
		$ligne = DB::table('inventaire_magasin')->where('ligne_id',$id)->get();
        $pdf = PDF::loadView('/inventaire/ficheinventairemagasin', [
            'ligne' => $ligne,
			'inv' => $inv,
		]);
		
        return $pdf->stream();
    }
	function fichegene($id)
    {

		$inv = DB::table('inventaire_general')->where('id',$id)->first();
		$ligne = DB::table('ligne_inv_general')->where('ligne_id',$id)->get();
        $pdf = PDF::loadView('/inventaire/ficheinventairegeneral', [
            'ligne' => $ligne,
			'inv' => $inv,
		]);
		
        return $pdf->stream();
    }
//AJUSTER STOCK
function nouveauajust($id) {
       
        //$qte = request('qte');
        $inventaire = DB::table('inventaire_magasin')->where('id', $id)->first()->ligne_id;
        $produit = DB::table('inventaire_magasin')->where('id', $id)->first()->produit_id;
		$magasin = DB::table('ligne_inv_magasin')->where('id', $inventaire)->first()->magasin_id;
        $ajustement = DB::table('ajuster')->orderBydesc('id') ->limit(5)->get();
        

        return view('appro/ajuster',[

            'inventaire' => $inventaire,
            'produit' => $produit,
            'ajustement' => $ajustement,
            'magasin' => $magasin,
        ]);
    }
	function ajuster(Request $request)
    {

        $magasin=request('magasin');
        $produit=request('produit');
        $inventaire=request('inventaire');
		$qte=request('qte');
        $date= date('Y-m-d');
        

            DB::table('ajuster')->insert(
                [
                    'inventaire_id' => $inventaire,
                    'magasin_id' => $magasin,
                    'produit_id' => $produit,
                    'qte' => $qte,
                    'date' => $date,
                    'etat' => "Proforma",
                   
                ]
            );

            $idLastajust = DB::table('ajuster')->get()->last()->id;

            $id2= strlen($idLastajust);

            if ($id2==1){

                DB::table('ajuster')->where('id', $idLastajust)->update(
                    [
                        'numero' => '000'.$idLastajust,
                    ]
                );

            } elseif ($id2==2){

                DB::table('ajuster')->where('id', $idLastajust)->update(
                    [
                        'numero' => '00'.$idLastajust,
                    ]
                );

            } elseif ($id2==3){

                DB::table('ajuster')->where('id', $idLastajust)->update(
                    [
                        'numero' => '0'.$idLastajust,
                    ]
                );

            } else {

                DB::table('ajuster')->where('id', $idLastajust)->update(
                    [
                        'numero' => $idLastajust,
                    ]
                );
            }

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

            return $message;


    }
	//VOIR AJUST
	function voirajust ($id) {

        $ajust= DB::table('ajuster')->where('id',$id)->first();
        return [
            'ajust' => $ajust,
        ];
    }
	
	//VALIDER AJUST
	function valider () {

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

            DB::table('ajuster')->where('id', $id)->update(
                [
                    'etat' => "Validée",
                ]
            );
		$ajust = DB::table('ajuster')->where('id', $id)->first();
		$qte = DB::table('ajuster')->where('id', $id)->first()->qte;
		$magasin = DB::table('ajuster')->where('id', $id)->first()->magasin_id;
        $qtesto = DB::table('produit_vendable')->where('id', $ajust->produit_id)->first()->stock_general;
		DB::table('inventaire_magasin')->where('id', $ajust->inventaire_id)->update(
                [
                    'qte_ajuste' => $qte,
                ]
            );
			
		$verif = DB::table('stock_magasin')->where('produit_id', $ajust->produit_id)->where('magasin_id', $magasin)->get()->count();
		if ($verif>0){
				$sm = DB::table('stock_magasin')->where('produit_id', $ajust->produit_id)->where('magasin_id', $magasin)->orderBydesc('id')->take(1)->first()->apres;
				DB::table('stock_magasin')->insert(
                    [
                        'date' => $today,
                        'magasin_id' => $magasin,
                        'produit_id' => $ajust->produit_id,
                        'qte' => $qte,
                        'type_operation' => 'Ajustement par inventaire',
						'en_stock' => $sm,
						'apres' => ($sm + $qte),
                    ]
                );
			} else {
				$sm = 0;
				DB::table('stock_magasin')->insert(
                    [
                        'date' => $today,
                        'magasin_id' => $magasin,
                        'produit_id' => $ajust->produit_id,
                        'qte' => $qte,
                        'type_operation' => 'Ajustement par inventaire',
						'en_stock' => $sm,
						'apres' => ($sm + $qte),
                    ]
                );
			}
			
            DB::table('produit_vendable')->where('id', $lignes->produit_id)->update(
                [
                    'stock_general' => ($qtesto + $qte),
                ]
            );
	return redirect()->route('ajuster', ['id' => $id])->with('status', 'Ajustement effectué avec succès');
	}
	
	//RECHERCHE INVENTAIRE MAGASIN
				public function rinventairemagasin(){

					if(session('user')== null) {
						return redirect('/');
					}
					$categorie = DB::table('categorie')->orderBy('libelle', 'ASC')->get();
					return view('inventaire/recherche-inv-magasin', [
						'categorie'=> $categorie,
					]);
				}
				public function rinventairemagasinpost(){

					if(session('user')== null) {
						return redirect('/');
					}
						$categorie = DB::table('categorie')->orderBy('libelle', 'ASC')->get();
						$dateinv = implode('-', array_reverse(explode('/', request('dateinv')))) ;
						$categorie_id = request('categorie_id');
						session(['categorie_id'=> $categorie_id]);
						session(['dateinv'=> $dateinv]);
						$nom_cat = DB::table('categorie')->where('idcat', $categorie_id)->first()->libelle;
					
						$ligne_inventaire = DB::table('inventaire_magasin')->where('date', $dateinv)->get();
						$plucked = $ligne_inventaire->pluck('produit_id');
						//$produit = DB::table('produit_vendable')->whereIn('id', $plucked)->where('categorie_id', $categorie_id)->get();
						$produit = DB::table('produit_vendable')->where('categorie_id', $categorie_id)->get();
					
						return view('inventaire/recherche-inv-magasin2', [
							'produits'=> $produit,
							'categorie'=> $categorie,
							'nom_cat'=> $nom_cat,
							'dateinv'=> $dateinv,
						]);
				}
				public function rinventairemagasinpdf(){

					if(session('user')== null) {
						return redirect('/');
					}
						$dateinv = implode('-', array_reverse(explode('/', request('dateinv')))) ;
						$categorie_id = session('categorie_id');
						$dateinv = session('dateinv');
						$nom_cat = DB::table('categorie')->where('idcat', $categorie_id)->first()->libelle;
					
						$ligne_inventaire = DB::table('inventaire_magasin')->where('date', $dateinv)->get();
						$plucked = $ligne_inventaire->pluck('produit_id');
						//$produit = DB::table('produit_vendable')->whereIn('id', $plucked)->where('categorie_id', $categorie_id)->get();
						$produit = DB::table('produit_vendable')->where('categorie_id', $categorie_id)->get();
					
						$pdf = PDF::loadView('inventaire/recherche-inv-magasin-pdf', [
							'produits'=> $produit,
							'nom_cat'=> $nom_cat,
							'dateinv'=> $dateinv,
						])->setPaper('a4', 'landscape');
						return $pdf->stream();
				}



}
