/home/dvjjulio/softtrash/app/Http/Controllers/ReciclableController.php
<?php

namespace Trash\Http\Controllers;

use Illuminate\Http\Request;

use Trash\Http\Requests;
use Trash\Http\Controllers\Controller;
use Trash\Ordenes;
use Trash\Clientes;
use Trash\Reciclables;
use Trash\CostoReciclable;
use Helper;
use Auth;

class ReciclableController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //
         return view('catalogo.reciclable');
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function saveReciclable()
    {
        //
        $data = \Input::all();
        $validator = $this->get_validate($data);
        if( $validator->fails() )
            return response()->json( array( 'status' => false, 'message' => $validator->errors()->all() ));
        return response()->json( $this->store($data));
    }

        public function get_validate( $data ){
        $array_rules = array(
                'reciclable'        => 'required',
                'clasificacion'     => 'required',
                );
        $messages    =  array(
                'reciclable.required'       => 'Por favor ingrese el Reciclable',
                'clasificacion.required'    => 'Por favor ingrese la clasificacion',
                 );

        return \Validator::make( $data, $array_rules, $messages );
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store($data, Reciclables $r = null)
    {
        try{
            \DB::beginTransaction();
            if( $data[ 'id' ] != 'undefined'){
                $reciclable = Reciclables::find($data['id']);
            }
            else {
                $reciclable = new Reciclables();
                $existReciclable=$this->checkReciclable($data);
                if( $existReciclable==false )throw new \Exception('Ya existe reciclable: '.$data['reciclable']);
            }
            $reciclable->reciclable         = $data['reciclable'];
            $reciclable->clasificacion      = $data['clasificacion'];
            $reciclable->status_id          = 1;
            $reciclable->user_created       = Auth::user()->username;

            $reciclable->save();

        } catch( \Exception $e ){
            \DB::rollback();
            return array( 'status' => false, 'message' => $e->getMessage() );
        }
        \DB::commit();
        return  array( 'status' => true , 'data' => $reciclable );
    }

    public function checkReciclable($data){
         $exist = Reciclables::where('reciclable','=',$data['reciclable'])->get();
        if( count( $exist ) < 1){
             return true;
         }else{
            return false;
         }
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function showReciclable()
    {
        //
        $reciclable = Reciclables::all();
        return view('catalogo.reciclableAll')->with(compact('reciclable'));
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function getReciclable()
    {
        //
        $data = \Input::all();
        $reciclable = Reciclables::find($data['id']);
        return response()->json(array('status'=> true, 'data'=>$reciclable));

    }


    public function costo_reciclable()
    {
        $c_reciclables = new Ordenes();
        $costo_reciclable = $c_reciclables->getReciclableCosto();

        return View('catalogo.costo_reciclable')->with(compact('costo_reciclable'));
    }

    public function tableReciclable(Request $request){
        $date1 = $request->input('date1');
        $date2 = $request->input('date2');
        $c_reciclables = new Ordenes();
        $costo_reciclable = $c_reciclables->getReciclableCosto($date1, $date2);

        return View('catalogo.costo_reciclable_table')->with(compact('costo_reciclable'));
    }


    public function savePayReciclable(Request $request)
    {
        //
        $data = $request->all();
        $validator = $this->get_validateCosto($data);
        if( $validator->fails() )
            return response()->json( array( 'status' => false, 'message' => $validator->errors()->all() ));
        return response()->json( $this->storeCost($data));
    }

    public function get_validateCosto( $data ){
        $array_rules = array(
                'reciclable'        => 'required',
                'cliente'           => 'required',
                'year'              => 'required',
                'month'             => 'required',
                );
        $messages    =  array(
                'reciclable.required' => 'Por favor seleccione el Reciclable',
                'cliente.required'    => 'Por favor seleccione un Cliente',
                'year.required'       => 'Por favor seleccione un Año',
                'month.required'      => 'Por favor seleccione un Mes',
                 );

        return \Validator::make( $data, $array_rules, $messages );
    }

    public function storeCost($data, Reciclables $r = null)
    {
        try{
            \DB::beginTransaction();
            if( $data[ 'id' ] != '0'){
                $costo_reciclable = CostoReciclable::find($data['id']);
            }
            else {
                $costo_reciclable = new CostoReciclable();
                $costo_r = $costo_reciclable->checkCostReciclable($data);
                if( isset($costo_r) ){
                   if($costo_r[0]->status_id == 1){
                     throw new \Exception('Ya existe esta combinación de costo reciclable. ');
                   }else{
                     $costo_reciclable = CostoReciclable::find($costo_r[0]->id);
                   }
                }
            }
            $costo_reciclable->reciclable_id   = $data['reciclable'];
            $costo_reciclable->cliente_id      = $data['cliente'];
            $costo_reciclable->ano             = $data['year'];
            $costo_reciclable->mes             = $data['month'];
            $costo_reciclable->pago_cliente    = $data['pay_customer'];
            $costo_reciclable->pago_chofer     = $data['pay_driver'];
            $costo_reciclable->status_id       = 1;
            $costo_reciclable->created_by      = Auth::user()->id;
            $costo_reciclable->save();

        } catch( \Exception $e ){
            \DB::rollback();
            return array( 'status' => false, 'message' => $e->getMessage() );
        }
        \DB::commit();
        return  array( 'status' => true , 'data' => $costo_reciclable );
    }

    public function getCostReciclable()
    {
        //
        $data = \Input::all();
        $costo_reciclable = CostoReciclable::find($data['id']);
        return response()->json(array('status'=> true, 'data'=>$costo_reciclable));

    }

    public function deleteCost(Request $request){
      $id = $request->input('id');
      $costo_rec = CostoReciclable::find($id);
      $costo_rec->status_id = 0;
      if($costo_rec->save()){
        return response()->json(['status'=>true,'message'=>'Eliminado Correctamente!','type'=>'success']);
      }else{
        return response()->json(['status'=>false,'message'=>'Error al Eliminar!','type'=>'danger']);
      }
    }

    public function editReciclableCosto(Request $request){
        $data = $request->all();
        $ordenes = new Ordenes();
        $ordenes_ids = $ordenes->getOrdenesCosto($data['user_id'],$data['reciclable_id'],$data['fecha'],$data['cliente']);
        if(isset($ordenes_ids)){
            $ids = "";
            foreach($ordenes_ids as $val){
                $ids .= $val->id.","; 
            }
            $ids = substr($ids,0,-1);
        }
        $query = $ordenes->updateCostoOrden($ids,$data['costo'],$data['type']);
        if($query->getData()->status){
            return response()->json(['status'=> true, 'message'=> 'Reciclable Actualizado', 'type'=> 'success']);
        }else{
            return response()->json(['status'=> false, 'message'=> 'Error al guardar el costo pago', 'type'=> 'danger']);
        }
        
    }

}