<?php

namespace App\Http\Controllers;

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

use PDF;

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

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

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

		DB::table('retourcommandeclient')->where('id', $id)->update(
			[
				'etat' => "Validée",
			]
		);
		DB::table('ligneretourcommandeclient')->where('retourcommandeclient_id', $id)->update(
			[
				'etat' => "Validée",
			]
		);

		$vo = DB::table('ligneretourcommandeclient')->where('retourcommandeclient_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('ligneretourcommandeclient')->where('retourcommandeclient_id', $id)->where('produit_id', $vos->produit_id)->first()->pr;
					$pv = DB::table('ligneretourcommandeclient')->where('retourcommandeclient_id', $id)->where('produit_id', $vos->produit_id)->first()->pu;
					$benef = ($pv - $pru) * $qteval;
		            DB::table('ligneretourcommandeclient')->where('retourcommandeclient_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,
							]
						);
						/*DB::table('ligne_vente_client')->where('id', $vos->ligne_vente_client_id)->update(
						[
							'etat' => 'Annulée',
						]
					);*/
			}
		return redirect()->route('nouveau-retour-client')->with('status', 'Vente validée avec succès !');
	
	}
	function supprimer () {

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

		$detail=DB::table('ligneretourcommandeclient')->where('retourcommandeclient_id',$id)->get();
		$totqte = DB::table('ligneretourcommandeclient')->where('retourcommandeclient_id',$id)->get()->sum('qte');
		$totml = DB::table('ligneretourcommandeclient')->where('retourcommandeclient_id',$id)->get()->sum('montligne');
		return view('retourcommandeclient/detail', [
			'detail'=> $detail,
			'totqte'=> $totqte,
			'totml'=> $totml,
		]);
	}
    public function retourcommandeclient(){
		
        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();
		$retourcommandeclients = DB::table('retourcommandeclient')->where('user_id', session('user')->id)->orderBydesc('id')->get();
		return view('retourcommandeclient/retourcommandeclient', [
			'produit'=> $produit,
			'retour'=> $retourcommandeclients,
			'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_client')->where('id', $numfact)->where('magasin_id', session('user')->magasin_id)->where('etat','Validée')->first();
		
		if ($vente){
			
		$vente_id = DB::table('vente_client')->where('id', $numfact)->first()->id;
		$client_id = DB::table('vente_client')->where('id', $numfact)->first()->client_id;
			
		DB::table('retourcommandeclient')->insert(
				[
					'date' => $today,
					'heure' => $hour,
					'numfact' => $numfact,
					'nomcli' => $nomcli,
					'contact' => $contact,
					'vente_id' => $vente_id,
					'client_id' => $client_id,
					'user_id' => session('user')->id,
					'magasin_id' => session('user')->magasin_id,
				]
			);

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

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

                DB::table('ligneretourcommandeclient')->where('retourcommandeclient_id', $idLastretourcommandeclient)->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('ligneretourcommandeclient')->insert(
						[
							'retourcommandeclient_id' => $idLastretourcommandeclient,
							'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' => $today, 
							'client_id' => $client_id,
							'ligne_vente_client_id' => $lvcid,
							'user_id' => session('user')->id,
							'magasin_id' => session('user')->magasin_id,
						]
					);
						$i += count($pep->toArray()); 
			}
	} else {
				DB::table('retourcommandeclient')->where('id', $idLastretourcommandeclient)->delete();

                DB::table('ligneretourcommandeclient')->where('retourcommandeclient_id', $idLastretourcommandeclient)->delete();
		$message = [
                    "title" => 'Erreur d\'enregistrement',
                    "type" => 'error',
                    "response" => 'Aucune quantité de '.' '.$desi.' n\'est trouvée sur le BL '.$numfact,
                ];
    
                return $message;
	}
				
	}
			$mht = DB::table('ligneretourcommandeclient')->where('retourcommandeclient_id', $idLastretourcommandeclient)->get()->sum('montligne');
			
			DB::table('retourcommandeclient')->where('id', $idLastretourcommandeclient)->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;
			}
	
	}


function rembourser()
    {
        if(session('user')== null) {
            return redirect('/');
		}
		//$retour = DB::table('retourcommandeclient')->where('id',$id)->first();
		$rembour = DB::table('remboursement')->orderBydesc('id')->get();
		return view('retourcommandeclient/paiement',[
            'rembour' => $rembour,
            //'paie' => $paie,
        ]);	
    }
	function voirremb ($id) {

        $remb= DB::table('remboursement')->where('id',$id)->first();
        return [
            'remb' => $remb,
        ];
	}
	function supprimerremb () {

        $id=request('id');
		DB::table('remboursement')->where('id', $id)->delete();
        return redirect()->route('nouveau-retour-client')->with('status', 'Suppression effectuée avec succès');
    }
	
	function validerremb () {

		$id=request('id');	
		$retour_id = DB::table('remboursement')->where('id', $id)->first()->retourcommandeclient_id;
		DB::table('remboursement')->where('id', $id)->update(
			[
				'etat1' => "Validée",
			]
	);
	return redirect()->route('remboursement', ['id'=>$retour_id])->with('status', 'Vente validée avec succès !');
	}


	function enregistrer3(Request $request)
    {
        $typer=request('typer');
        $numfact=request('numfact');
        $nomcli=request('nomcli');
        $montant=request('montant');
        $mode=request('mode');
		$note=request('note');
        $today2 = date('Y-m-d');
		
		if ($typer=="BL"){
		    $v1 = DB::table('retourcommandeclient')->where('numfact', $numfact)->get()->count();
		    if($v1 == 0){
		        $message = [
                "title" => 'Attention!',
                "type" => 'error',
                "response" => 'Aucun retour d\'article n\'a été enregistré sous le numéro de BL saisi',
                ];
                return $message;
		    }else{
		        $rt = DB::table('retourcommandeclient')->where('numfact', $numfact)->where('etat','Validée')->sum('montant');
		        $rb = DB::table('remboursement')->where('numfact', $numfact)->sum('montant');
		        $mtfact = DB::table('vente_client')->where('numero', $numfact)->where('etat','Validée')->sum('montant');
		        $vid = DB::table('vente_client')->where('numero', $numfact)->first()->id;
		        $cid = DB::table('vente_client')->where('numero', $numfact)->first()->client_id;
		        $sp = DB::table('paiement_client')->where('vente_id', $vid)->sum('montant');
		        $apayer = ($mtfact - $rt) - $sp;
		        // il faut verifier aaussi la comparaison du total remboursé avec le total de retour
		        //reste à faire
		        
		        if ($apayer > 0){
		            $message = [
                    "title" => 'Attention!',
                    "type" => 'error',
                    "response" => 'Le remboursement n\'est pas possible car le montant total du BL n\'a  totalement pas été payé!',
                    ];
                    return $message;
		        }else{
		            DB::table('remboursement')->insert(
                        [
                            'numfact' => $numfact,
                            'client_id' => $cid,
                            'vente_client_id' => $vid,
                            'nom_client' => $nomcli,
                            'montant' => $montant,
                            'mode' => $mode,
                            'date' => $today2,
                            'notes' => $note,
                            'user_id' => session('user')->id,
                            'magasin_id' => session('user')->magasin_id,
                        ]
                    );
                    $message = [
                        "title" => 'success',
                        "type" => 'success',
                        "response" => 'Enregistré avec succès !',
                    ];
                    return $message;
		        }
		    }
		}else{
		    $v1 = DB::table('retourcommande')->where('numfact', $numfact)->get()->count();
		    if($v1 == 0){
		        $message = [
                "title" => 'Attention!',
                "type" => 'error',
                "response" => 'Aucun retour d\'article n\'a été enregistré sous le numéro de facture saisi',
                ];
                return $message;
		    }else{
		        $vrb = DB::table('remboursement')->where('numfact', $numfact)->get()->count();
		        if ($vrb>0){
		            $message = [
                    "title" => 'Attention!',
                    "type" => 'error',
                    "response" => 'Un remboursement a déjà été saisi sur cette facture',
                    ];
                    return $message;
		        }else{
		            $mr = DB::table('retourcommande')->where('numfact', $numfact)->sum('montant');
		            if ($montant > $mr){
		                $message = [
                        "title" => 'Attention!',
                        "type" => 'error',
                        "response" => 'Le montant saisi ne doit pas dépasser le montant à rembourser',
                        ];
                        return $message;
		            }else{
		            $vid = DB::table('vente')->where('numero', $numfact)->first()->id;
		             DB::table('remboursement')->insert(
                        [
                            'numfact' => $numfact,
                            'client_id' => $cid,
                            'vente_id' => $vid,
                            'nom_client' => $nomcli,
                            'montant' => $montant,
                            'mode' => $mode,
                            'date' => $today2,
                            'notes' => $note,
                            'user_id' => session('user')->id,
                            'magasin_id' => session('user')->magasin_id,
                        ]
                    );
                    $message = [
                        "title" => 'success',
                        "type" => 'success',
                        "response" => 'Enregistré avec succès !',
                    ];
                    return $message;
		        }
		            
		        }
		        
		    }
		}
    }
}
