<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use DB;

class MatiereController extends Controller
{
    public function nouveau(){

        if(session('user')== null) {
            return redirect('/');
        }
		$matiere = DB::table('matiere')->orderBy('designation','asc')->get();
		return view('matiere/nouveau', [
			'matiere' => $matiere,
		]);
	}
	function enregistrer(Request $request)
    {
        $code=request('code');
        $designation=request('designation');
        $stock_mini=request('stock_mini');
        $unite_mesure=request('unite_mesure');
		$today = date('Y-m-d H:i:s');
        $today2 = date('Y-m-d'); 
        $verification= DB::table('matiere')->where('designation',$designation)->first();
        if($verification){
            $message = [
                "title" => 'Erreur d\'enregistrement',
                "type" => 'error',
                "response" => 'Cet enregistrement existe déjà',
            ];
            return $message;
        }
        else {


            DB::table('matiere')->insert(
                [
                    'designation' => $designation,
                    'code' => $code,
                    'stock_mini' => $stock_mini,
					'date_entree' => $today,
					'unite_mesure' => $unite_mesure,
					'user_id' => session('user')->id,
                ]
            );
			 $message = [
                "title" => 'success',
                "type" => 'success',
                "response" => 'matiere enregistrée avec succès !',
            ];

            return $message;
        }
           
    }
	 public function modifier($id){

        if(session('user')== null) {
            return redirect('/');
        }
		$matiere1 = DB::table('matiere')->where('id', $id)->first();
		$matiere = DB::table('matiere')->orderBy('designation','asc')->get();
		return view('matiere/modifier', [
			'matiere1' => $matiere1,
			'matiere' => $matiere,
		]);
	}
	function modifierpost($id)
    {
        $code=request('code');
        $designation=request('designation');
        $stock_mini=request('stock_mini');
        $unite_mesure=request('unite_mesure');
		$today = date('Y-m-d H:i:s');
        $today2 = date('Y-m-d'); 
        $verification= DB::table('matiere')->where('designation',$designation)->first();

            DB::table('matiere')->where('id',$id)->update(
                [
                    'designation' => $designation,
                    'code' => $code,
                    'stock_mini' => $stock_mini,
					'date_entree' => $today,
					'unite_mesure' => $unite_mesure,
					'user_id' => session('user')->id,
                ]
            );
			return redirect()->route('nouvelle-matiere')->with('success', 'Succès de la modification');
    }
	
	function voir ($id) {
        $matiere= DB::table('matiere')->where('id',$id)->first();
        return [
            'matiere' => $matiere,
        ];
    }
	function supprimer () {

        $id=request('id');
		$verif = DB::table('stock_matiere')->where('matiere_id',$id)->first();
		if ($verif){
			return redirect()->route('liste-des-matieres')->with('error', 'Suppression impossible. Cet enregistrement est lié à d\'autres données');
		} else {
			DB::table('matiere')->where('id',$id)->delete();
			return redirect()->route('liste-des-matieres')->with('status', 'Suppression effectuée');
		}
    }
	
	function liste(){

        if(session('user')== null) {
            return redirect('/');
        }
	$matiere = DB::table('matiere')->orderBy('designation','asc')->get();
	//$totappro = DB::table('ligne_appro')->where('etat2', 'Validé')->get()->sum('qte');
	//$totvente = DB::table('ligne_production')->where('etat', 'Validée')->get()->sum('qte');
	//$totstk = DB::table('produit')->get()->sum('stock_general');
	//$qtevendu = $totappro - $totstk;
	//$qtevendu = DB::table('ligne_production')->where('etat', 'Validée')->get()->sum('qte');
			return view('matiere/liste',[
            'matiere' => $matiere,
            //'totappro' => $totappro,
            //'totvente' => $totvente,
            //'totstk' => $totstk,
            //'qtevendu' => $qtevendu,
        ]);	
	}
	//INVENTAIRE
	public function inventaire(){
	
        if(session('user')== null) {
            return redirect('/');
        }
        $matiere=DB::table('matiere')->get();

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

		return view('matiere/inventaire_matiere', [
			'matiere'=> $matiere,
			'inventaire'=> $inventaire,
		]);
    }

	function inventairepost(Request $request)
    {
        $today=date('Y-m-d');
        $invmag=collect(request('invmag'))->chunk(3);

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

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

        $id2= strlen($idLastmag);

        if ($id2==1){

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

        } elseif ($id2==2){

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

        } elseif ($id2==3){

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

        } else {

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

        $i=0;

        foreach ($invmag as $key=> $invmags){
			
			$qtestoc = DB::table('stock_matiere')->where('matiere_id', $invmags[0 +$i])->get()->count();
			if ($qtestoc == 0){
				$qtesto = 0;
			} else {
				$qtesto = DB::table('stock_matiere')->where('matiere_id', $invmags[0 +$i])->orderBydesc('id')->take(1)->first()->apres;
			}
			
            DB::table('ligne_inv_matiere')->insert(
                [
                    'ligne_id' => $idLastmag,
                    'matiere_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,
					'etat' => 'En cours',
                ]
            );
			
            $i += count($invmags->toArray());
			
			
        }

        $message = [
            "title" => 'Succès',
            "type" => 'success',
            "response" => 'Enregistrement effectué avec succès !',
        ];
        return $message;
    }
	function voirinv ($id) {
        $invent= DB::table('inventaire_matiere')->where('id',$id)->first();
        return [
            'invent' => $invent,
        ];
    }
	function vdmatiere()
    {
		$id = request('id');
		$vo = DB::table('ligne_inv_matiere')->where('ligne_id', $id)->get();
		$today = date('Y-m-d');
		foreach($vo as $vos){
			$qtestoc = DB::table('stock_matiere')->where('matiere_id', $vos->matiere_id)->get()->count();
			if ($qtestoc == 0){
				$qtesto = 0;
			} else {
				$qtesto = DB::table('stock_matiere')->where('matiere_id', $vos->matiere_id)->orderBydesc('id')->take(1)->first()->apres;
			}
			$qteval = $vos->qte;
		
					DB::table('matiere')->where('id', $vos->matiere_id)->update(
						[
							'stock_general' => $qteval,
						]
					);
					DB::table('stock_matiere')->insert(
							[
								'date' => $vos->date,
								'matiere_id' => $vos->matiere_id,
								'qte' => $vos->qte,
								'type_operation' => 'Inventaire',
								'en_stock' => $qtesto,
								'apres' => $vos->qte,
								'pa' => $vos->pa,
								'montligne' => $vos->montligne,
							]
						);	
			}
			DB::table('ligne_inv_matiere')->where('ligne_id', $id)->update(
			[
				'etat' => "Validée",
			]
		);
		DB::table('inventaire_matiere')->where('id', $id)->update(
			[
				'etat' => "Validée",
			]
		);

			return redirect()->route('inventaire-matiere-premiere')->with('status', 'Inventaire validé avec succès !');
	}
	function supprimermatiere () {

        $id=request('id');

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

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

        return redirect()->route('inventaire-matiere-premiere')->with('status', 'Suppression effectuée avec succès');
    }
	function modifierinv($id) {

        if(session('user')== null) {
            return redirect('/');
        }
        $invent = DB::table('inventaire_matiere')->where('id', $id)->first();
        $ligne = DB::table('ligne_inv_matiere')->where('ligne_id', $id)->get();
        $matiere=DB::table('matiere')->orderBy('designation','asc')->get();

        return view('matiere/modif_inventaire_matiere',[

            'invent' => $invent,
            'ligne' => $ligne,
            'matiere'=> $matiere,
        ]);
    }
	 function valider_matiere($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_matiere')->where('ligne_id', $id)->delete();

        foreach ($invmag as $key=> $invmags){
            DB::table('ligne_inv_matiere')->insert(
                [

                    'ligne_id' => $id,
                    'matiere_id' => $invmags[0 +$i],
                    'qte' => $invmags[1 +$i],
					'montligne' => ($invmags[1 +$i] * $invmags[2 +$i]),
					'date' => $today,
                    'pa' => $invmags[2 +$i],
                    '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 detailmatiere($id) {

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

        $iddetailmag= $id;

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

        return view('matiere/detail_matiere',[

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

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

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