<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Classes\ChiffreEnLettre;
use DB;

use PDF;

class RetourcommandeController extends Controller
{
	function voir ($id) {

        $retour= DB::table('retourcommande')->where('id',$id)->first();
        return [
            'retour' => $retour,
        ];
	}
	
	
	function valider () {

		$id=request('id');	
		$smt = DB::table('ligneretourcommande')->where('retourcommande_id', $id)->get()->sum('montligne');

		DB::table('retourcommande')->where('id', $id)->update(
			[
				'etat' => "Validée",
			]
		);
		DB::table('ligneretourcommande')->where('retourcommande_id', $id)->update(
			[
				'etat' => "Validée",
			]
		);

		$vo = DB::table('ligneretourcommande')->where('retourcommande_id', $id)->where('etat','Validée')->get();

		$today = date('Y-m-d'); 


		foreach($vo as $vos){
					
					$sg = DB::table('produit_vendable')->where('id', $vos->produit_id)->first()->stock_general;
					$qtestoc = DB::table('stock_magasin')->where('produit_id', $vos->produit_id)->where('magasin_id', session('user')->magasin_id)->first();
					if ($qtestoc){
					$qtesto = DB::table('stock_magasin')->where('produit_id', $vos->produit_id)->where('magasin_id', session('user')->magasin_id)->orderBydesc('id')->take(1)->first()->apres;
					} else {
						$qtesto = 0;
					}
					$qteval = $vos->qte;
		            
					$pru = DB::table('ligneretourcommande')->where('retourcommande_id', $id)->where('produit_id', $vos->produit_id)->first()->pr;
					$pv = DB::table('ligneretourcommande')->where('retourcommande_id', $id)->where('produit_id', $vos->produit_id)->first()->pu;
					$benef = ($pv - $pru) * $qteval;
		            DB::table('ligneretourcommande')->where('retourcommande_id', $id)->where('produit_id', $vos->produit_id)->update(
						[
							'benef' => $benef,
						]
					);
					$sv = DB::table('produit_vendable')->where('id',  $vos->produit_id)->first()->totvendu;
					DB::table('produit_vendable')->where('id', $vos->produit_id)->update(
						[
							'stock_general' => ($sg + $qteval),
							'totvendu' => $sv - $qteval,
						]
					);
					DB::table('stock_magasin')->insert(
							[
								'date' => $today,
								'produit_id' => $vos->produit_id,
								'qte' => $qteval,
								'type_operation' => 'Retour',
								'en_stock' => $qtesto,
								'apres' => ($qtesto + $qteval),
								'stock_general' => ($sg + $qteval),
								'magasin_id' => session('user')->magasin_id,
							]
						);
			}
		return redirect()->route('nouveau-retour')->with('status', 'Vente validée avec succès !');
	
	}
	function supprimer () {

        $id=request('id');
		DB::table('ligneretourcommande')->where('retourcommande_id', $id)->delete();
		DB::table('retourcommande')->where('id', $id)->delete();
        return redirect()->route('nouveau-retour')->with('status', 'Suppression effectuée avec succès');
    }
	public function detail($id)
	{
        if(session('user')== null) {
            return redirect('/');
        }

		$detail=DB::table('ligneretourcommande')->where('retourcommande_id',$id)->get();
		$totqte = DB::table('ligneretourcommande')->where('retourcommande_id',$id)->get()->sum('qte');
		$totml = DB::table('ligneretourcommande')->where('retourcommande_id',$id)->get()->sum('montligne');
		return view('retourcommande/detail', [
			'detail'=> $detail,
			'totqte'=> $totqte,
			'totml'=> $totml,
		]);
	}
    public function retourcommande(){
		
        if(session('user')== null) {
            return redirect('/');
        }
		
		//$produit=DB::table('produit_vendable')->where('stock_general', '>', 0)->orderby('designation','asc')->get();
		$produit=DB::table('produit_vendable')->orderby('designation','asc')->get();
		//$produit=DB::table('produit_vendable')->orderby('designation','asc')->get();
		$client=DB::table('client')->take(1)->get();
		$remise=DB::table('remise')->where('magasin_id', session('user')->magasin_id)->orderBydesc('id')->where('etat', 'Actif')->get();
		$categorie=DB::table('categorie')->get();
		$retourcommandes = DB::table('retourcommande')->where('magasin_id', session('user')->magasin_id)->orderBydesc('id')->take(30)->get();
		//$retourcommandes = DB::table('retourcommande')->where('magasin_id', session('user')->magasin_id)->where('date','2021-12-05')->take(30)->get();
		return view('retourcommande/retourcommande', [
			'produit'=> $produit,
			'retour'=> $retourcommandes,
			'client'=> $client,
			'cat'=> $categorie,
			'remise'=> $remise,
		]);
	}
	function enregistrer()
    {

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

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

		$today = implode('-', array_reverse(explode('/', $dat)));
		$todayyy = date('Y-m-d'); 
		$numfact=request('numfact');
		$nomcli=request('nomcli');
		$contact=request('contact');
		$peps=collect(request('peps'))->chunk(2);
		$vente = DB::table('vente')->where('numero', $numfact)->where('magasin_id', session('user')->magasin_id)->where('etat','Validée')->first();
		
		if ($vente){
			
		$vente_id = DB::table('vente')->where('numero', $numfact)->first()->id;
			
		DB::table('retourcommande')->insert(
				[
					'date' => $today,
					'heure' => $hour,
					'numfact' => $numfact,
					'nomcli' => $nomcli,
					'contact' => $contact,
					'vente_id' => $vente_id,
					'user_id' => session('user')->id,
					'magasin_id' => session('user')->magasin_id,
				]
			);

			$idLastretourcommande = DB::table('retourcommande')->get()->last()->id;
			$idLast= strlen($idLastretourcommande);
	
			if ($idLast==1){
				DB::table('retourcommande')->where('id', $idLastretourcommande)->update(
					[
						'numero' => '000'.$idLastretourcommande,
					]
				);
			} elseif ($idLast==2){
		
				DB::table('retourcommande')->where('id', $idLastretourcommande)->update(
					[
						'numero' => '00'.$idLastretourcommande,
					]
				);
			} elseif ($idLast==3){
				DB::table('retourcommande')->where('id', $idLastretourcommande)->update(
					[
						'numero' => '0'.$idLastretourcommande,
					]
				);
			} else {
				DB::table('retourcommande')->where('id', $idLastretourcommande)->update(
					[
						'numero' => $idLastretourcommande,
					]
				);
			}
	
			$i=0;
			
	foreach ($peps as $key=> $pep){
				$desi =  DB::table('produit_vendable')->where('id', $pep[0 +$i])->first()->desi;
				$pr =  DB::table('ligne_vente')->where('vente_id', $vente_id)->where('produit_id', $pep[0 +$i])->first()->pr;
				$pv =  DB::table('ligne_vente')->where('vente_id', $vente_id)->where('produit_id', $pep[0 +$i])->first()->pv;
				$categorie_id =  DB::table('produit_vendable')->where('id', $pep[0 +$i])->first()->categorie_id;
				$qtesc =  DB::table('ligne_vente')->where('vente_id', $vente_id)->where('produit_id', $pep[0 +$i])->first();
				if ($qtesc){
				$qtes =  DB::table('ligne_vente')->where('vente_id', $vente_id)->where('produit_id', $pep[0 +$i])->first()->qte;
				
				if($qtes < $pep[1 +$i]){

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

                DB::table('ligneretourcommande')->where('retourcommande_id', $idLastretourcommande)->delete();

                $message = [
                    "title" => 'Erreur d\'enregistrement',
                    "type" => 'error',
                    "response" => 'La quantité retournée ne peut pas être supérieur à la quantité achetée '.' '.$desi.' : '.$qtes,
                ];
    
                return $message;

            }else{
				
				DB::table('ligneretourcommande')->insert(
						[
							'retourcommande_id' => $idLastretourcommande,
							'categorie_id' => $categorie_id,
							'produit_id' => $pep[0 +$i],
							'qte' => $pep[1 +$i],
							'pu' => $pv,
							'pr' => $pr,
							'montligne' => ($pep[1 +$i] * $pv),
							'montlignepr' => ($pep[1 +$i] * $pr),
							'date' => $todayyy,  
							'user_id' => session('user')->id,
							'magasin_id' => session('user')->magasin_id,
						]
					);
						$i += count($pep->toArray()); 
			}
	} else {
		$message = [
                    "title" => 'Erreur d\'enregistrement',
                    "type" => 'error',
                    "response" => 'Aucune quantité de '.' '.$desi.' n\'est trouvée sur la facture '.$numfact,
                ];
    
                return $message;
	}
				
	}
			$mht = DB::table('ligneretourcommande')->where('retourcommande_id', $idLastretourcommande)->get()->sum('montligne');
			
			DB::table('retourcommande')->where('id', $idLastretourcommande)->update(
						[
							'montant' => $mht,
						]
					);
					
			$today = date('Y-m-d'); 
			
			$message = [
				"title" => 'success',
				"type" => 'success',
				"response" => 'Opération effectué avec succes !',
			];
	
			return $message;
			} else {
				$message = [
				"title" => 'Erreur',
				"type" => 'error',
				"response" => 'Le numéro de facture que vous saisissez n\'existe pas dans la base ou n\a pas été enregistrée dans votre magasin',
			];
	
			return $message;
			}
	
	}
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
}
