/home/dvjjulio/softtrash/app/Ordenes.php
<?php

namespace Trash;

use Illuminate\Database\Eloquent\Model;

class Ordenes extends Model
{
    //
  protected $table = 'orden';
  public $timestamps = false;

  public function checkOrden($data){
    	 $sql="SELECT *
    	   FROM orden
	 		WHERE orden_no = '".$data['orden']."'  ";
		 $data = \DB::select( \DB::raw( $sql ));
  		if(count($data)  < 1 ){
  			return true ;
  		}else{
  			return false;
  		}
  	}

	public function checkOrdenInicio($id){
    	$sql="SELECT o.id, o.orden_no, o.cliente_id, c.nombre_comercial, o.user_id, o.camion_id, o.fecha_inicio, 
      DATE(o.fecha_inicio) fecha, TIME(o.fecha_inicio) hora_inicio, un.unidad, g.giro
			FROM orden o
			JOIN cliente c ON o.cliente_id = c.id
      JOIN unidad un ON un.id = c.unidad_id
      LEFT JOIN giro_empresa g ON g.id = c.giro_id
	 		WHERE user_id = ".$id." AND
				DATE(fecha_inicio) = '".date('Y-m-d')."' AND
				DATE(fecha_termino) = '0000-00-00'";
		 $data = \DB::select( \DB::raw( $sql ));
		if(count($data)  < 1 ){
			return response()->json(array('status'=>true , 'data'=>$data));
		}else{
			return response()->json(array('status'=>false , 'data'=>$data));
		}
	}

	public function orden_day($fecha){
		   $sql="SELECT o.id, o.orden_no, u.username, u.ape_pat, ca.placas, cl.nombre_comercial, un.unidad, o.cantidad, o.observaciones,
			o.latitude_inicio lat_ini,o.longitude_inicio lng_ini,
			o.latitude_termino lat_ter, o.longitude_termino lng_ter,
			cl.latitude cliente_lat, cl.longitude cliente_lng, o.fecha_inicio, o.fecha_termino,
			TIME(o.fecha_inicio) hora_inicio,
			TIME(o.fecha_termino) hora_termino, o.km, o.km_dif, h.kilometraje_inicio, o.cancel, o.tiempo_traslado, r.reciclable, o.peso_reciclable
			FROM orden o
			JOIN user u ON u.id = o.user_id
			JOIN camion ca ON ca.id = o.camion_id
			JOIN cliente cl ON cl.id = o.cliente_id
			JOIN unidad un ON un.id = cl.unidad_id
      LEFT JOIN reciclable r ON r.id = o.reciclable_id
      JOIN history_choferes h ON h.user_id = o.user_id AND DATE(h.fecha_inicio) = '$fecha'
			 WHERE DATE(o.fecha_inicio) = '$fecha'
       ORDER BY id DESC";
		 $data = \DB::select( \DB::raw( $sql ));
		if(count($data) != null ){
			return response()->json(array('status'=>true , 'data'=>$data));
		}else{
			return response()->json(array('status'=>false ));
		}
	}

	public function km_day($km,$id){
		$sql="SELECT km, fecha_termino FROM orden WHERE DATE(fecha_inicio) = CURDATE() AND km >= $km AND user_id=$id Order BY km DESC limit 0, 1";
		$data = \DB::select( \DB::raw( $sql ));
		if(count($data) != null ){
			return response()->json(array('status'=>true , 'data'=>$data));
		}else{
			return response()->json(array('status'=>false ));
		}
	}

	public function ordenReport($fecha_ini,$fecha_ter,$conductores,$clientes){
		$conductores_;$clientes_;
		if($conductores == 'null' | $conductores == 'undefined'){
			$conductores_ = ' ';
		}else{
			$conductores_ = ' AND u.id in ('.$conductores.') ';
		}

		if($clientes == 'null' | $clientes == 'undefined'){
			$clientes_ = ' ';
		}else{
			$clientes_ = ' AND cl.id in ('.$clientes.') ';
		}

		$sql=" SELECT o.orden_no,  DATE(o.fecha_inicio) fecha,
           CASE DAYNAME(o.fecha_inicio)
            WHEN 'Sunday' THEN 'Domingo'
            WHEN 'Monday' THEN 'Lunes'
            WHEN 'Tuesday' THEN 'Martes'
            WHEN 'Wednesday' THEN 'Miercoles'
            WHEN 'Thursday' THEN 'Jueves'
            WHEN 'Friday' THEN 'Viernes'
            WHEN 'Saturday' THEN 'Sabado' END dia,
          MONTH(o.fecha_inicio) Mes, cl.semades,	cl.cliente razon_social, cl.nombre_comercial cliente, cu.cuota, un.unidad, cl.pu, ca.placas, u.username, pc.peso, ((pc.peso*o.cantidad)*.001) toneladas, o.cantidad,
            r.reciclable, r.clasificacion, o.peso_reciclable, (o.peso_reciclable*.001) toneladas_r, o.observaciones,
			TIME(o.fecha_inicio) hora_inicio,
			TIME(o.fecha_termino) hora_termino, o.km, h.kilometraje_inicio, o.km_dif,
      (cl.inorganicos*((pc.peso*o.cantidad)*.001) )/100 inorganicos,
      (cl.organicos*((pc.peso*o.cantidad)*.001) )/100 organicos,
      (cl.sanitarios*((pc.peso*o.cantidad)*.001) )/100 sanitarios, o.costo_pago, o.costo_cliente
			FROM orden o
			JOIN user u ON u.id = o.user_id  $conductores_
			JOIN camion ca ON ca.id = o.camion_id
			JOIN cliente cl ON cl.id = o.cliente_id $clientes_
			JOIN unidad un ON un.id = cl.unidad_id
            JOIN cuota cu ON cu.id = cl.cuota_id
			LEFT JOIN reciclable r ON r.id = o.reciclable_id
			JOIN history_choferes h ON h.user_id = o.user_id AND DATE(h.fecha_inicio) = DATE(o.fecha_inicio)
			LEFT JOIN peso_cliente pc ON pc.cliente_id = cl.id AND MONTH(o.fecha_inicio) = pc.mes_id AND YEAR(o.fecha_inicio) = pc.year
			WHERE DATE(o.fecha_inicio) BETWEEN '$fecha_ini' AND '$fecha_ter' AND o.cancel = 0
            ORDER BY fecha";
		 $data = \DB::select( \DB::raw( $sql ));
		if(count($data) != null ){
			return response()->json(array('status' => true , 'data'=>$data));
		}else{
			return response()->json(array('status' => false ));
		}
	}

	public function getOrden($id,$fecha){
		$sql="SELECT o.id, o.orden_no, o.user_id, o.cliente_id, o.camion_id, u.username, u.ape_pat, ca.placas, cl.nombre_comercial, un.unidad, o.cantidad, o.observaciones,  o.reciclable_id, o.peso_reciclable,
			o.latitude_inicio lat_ini,o.longitude_inicio lng_ini,
			o.latitude_termino lat_ter, o.longitude_termino lng_ter,
			cl.latitude cliente_lat, cl.longitude cliente_lng,
			TIME(o.fecha_inicio) hora_inicio,
			TIME(o.fecha_termino) hora_termino, o.km, o.km_dif, h.kilometraje_inicio, o.cancel, g.giro, vo.nota nota_vertedero, vo.peso_neto, vo.precio, vo.hora hora_vertedero,
      co.nota nota_combustible, co.litros, co.precio_litro, co.hora hora_combustible, co.tipo
			FROM orden o
			JOIN user u ON u.id = o.user_id
			JOIN camion ca ON ca.id = o.camion_id
			JOIN cliente cl ON cl.id = o.cliente_id
      JOIN giro_empresa g ON cl.giro_id = g.id
			JOIN unidad un ON un.id = cl.unidad_id
      JOIN history_choferes h ON h.user_id = o.user_id AND date(h.fecha_inicio) = '$fecha'
      LEFT JOIN vertedero_orden vo ON vo.orden_id = o.id AND vo.status_id = 1
      LEFT JOIN combustible_orden co ON co.orden_id = o.id AND co.status_id = 1
			 WHERE o.id = $id";
		 $data = \DB::select( \DB::raw( $sql ));
		if(count($data) != null ){
			return response()->json(array('status'=>true , 'data'=>$data));
		}else{
			return response()->json(array('status'=>false ));
		}
	}

  public function orden_inicio($id){
     $sql= "SELECT orden_no
          FROM orden
          WHERE user_id = $id AND
          DATE(fecha_inicio) = CURDATE()
          ORDER BY id DESC Limit 0, 1";
    $data = \DB::select( \DB::raw( $sql ));
     if(count($data) != null ){
       return response()->json(array('status'=>true , 'data'=>$data));
     }else{
       return response()->json(array('status'=>false, 'data'=>'' ));
     }
  }

  public function tota_orden($id = "null", $year = "null", $month = "null", $op = 0){
    $costumer = "";
    $yearWhere = " YEAR(CURDATE()) ";
    $monthWhere = "";
    if($id != "null"){
      $costumer = " AND cl.id = ".$id;
    }
    if($year != "null"){
      $yearWhere = " $year ";
    }
    if(!$op){
      $monthWhere = " AND MONTH(o.fecha_inicio) = ".$month;
    }else{
      $monthWhere = " AND MONTH(o.fecha_inicio) <= ".$month;
    }

      $sql= "SELECT YEAR(o.fecha_inicio) Year, MONTH(o.fecha_inicio) NoMes,
           CASE WHEN MONTH(o.fecha_inicio) = 1 THEN 'Enero'
             WHEN MONTH(o.fecha_inicio) = 2 THEN 'Febrero'
             WHEN MONTH(o.fecha_inicio) = 3 THEN 'Marzo'
             WHEN MONTH(o.fecha_inicio) = 4 THEN 'Abril'
             WHEN MONTH(o.fecha_inicio) = 6 THEN 'Junio'
             WHEN MONTH(o.fecha_inicio) = 5 THEN 'Mayo'
             WHEN MONTH(o.fecha_inicio) = 7 THEN 'Julio'
             WHEN MONTH(o.fecha_inicio) = 8 THEN 'Agosto'
             WHEN MONTH(o.fecha_inicio) = 9 THEN 'Septiembre'
             WHEN MONTH(o.fecha_inicio) = 10 THEN 'Octubre'
             WHEN MONTH(o.fecha_inicio) = 11 THEN 'Noviembre'
             WHEN MONTH(o.fecha_inicio) = 12 THEN 'Diciembre'
             ELSE 'Error' END AS Mes,
                cl.nombre_comercial cliente, cl.cliente cliente2, cl.direccion, cl.colonia,
                SUM((cl.inorganicos*((pc.peso*o.cantidad)*.001) )/100) inorganicos,
                SUM((cl.organicos*((pc.peso*o.cantidad)*.001) )/100) organicos,
                SUM((cl.sanitarios*((pc.peso*o.cantidad)*.001) )/100) sanitarios,
                SUM((cl.inorganicos*((pc.peso*o.cantidad)*.001) )/100) +
                SUM((cl.organicos*((pc.peso*o.cantidad)*.001) )/100) +
                SUM((cl.sanitarios*((pc.peso*o.cantidad)*.001) )/100)
                Total
          FROM orden o
          JOIN cliente cl ON cl.id = o.cliente_id $costumer -- AND cl.status_id = 1
          LEFT JOIN peso_cliente pc ON pc.cliente_id = cl.id AND MONTH(o.fecha_inicio) = pc.mes_id AND YEAR(o.fecha_inicio) = pc.year
          WHERE YEAR(o.fecha_inicio) = $yearWhere AND o.cancel = 0 $monthWhere
          GROUP BY Year, Mes, cl.id
          ORDER BY Year DESC, NoMes, cliente ASC";
    $data = \DB::select( \DB::raw( $sql ));
     if(count($data) != null ){
       return response()->json(array('status'=>true , 'data'=>$data));
     }else{
       return response()->json(array('status'=>false, 'data'=>'' ));
     }
  }

  public function year_order(){
    $sql = "SELECT YEAR(o.fecha_inicio) Year
          FROM orden o
          JOIN cliente cl ON cl.id = o.cliente_id  AND cl.status_id = 1
          LEFT JOIN peso_cliente pc ON pc.cliente_id = cl.id AND MONTH(o.fecha_inicio) = pc.mes_id AND YEAR(o.fecha_inicio) = pc.year
          WHERE  o.cancel = 0
          GROUP BY YEAR(o.fecha_inicio)
          ORDER BY YEAR(o.fecha_inicio)  DESC";
    $data = \DB::select( \DB::raw( $sql ));
     if(count($data) != null ){
       return $data;
     }
  }

  public function tota_orden_mes($year, $month){
      $sql= "SELECT YEAR(o.fecha_inicio) Year,
           CASE WHEN MONTH(o.fecha_inicio) = 1 THEN 'Enero'
             WHEN MONTH(o.fecha_inicio) = 2 THEN 'Febrero'
             WHEN MONTH(o.fecha_inicio) = 3 THEN 'Marzo'
             WHEN MONTH(o.fecha_inicio) = 4 THEN 'Abril'
             WHEN MONTH(o.fecha_inicio) = 6 THEN 'Junio'
             WHEN MONTH(o.fecha_inicio) = 5 THEN 'Mayo'
             WHEN MONTH(o.fecha_inicio) = 7 THEN 'Julio'
             WHEN MONTH(o.fecha_inicio) = 8 THEN 'Agosto'
             WHEN MONTH(o.fecha_inicio) = 9 THEN 'Septiembre'
             WHEN MONTH(o.fecha_inicio) = 10 THEN 'Octubre'
             WHEN MONTH(o.fecha_inicio) = 11 THEN 'Noviembre'
             WHEN MONTH(o.fecha_inicio) = 12 THEN 'Diciembre'
             ELSE 'Error' END AS Mes,
                cl.nombre_comercial cliente,
                SUM((cl.inorganicos*((pc.peso*o.cantidad)*.001) )/100) inorganicos,
                SUM((cl.organicos*((pc.peso*o.cantidad)*.001) )/100) organicos,
                SUM((cl.sanitarios*((pc.peso*o.cantidad)*.001) )/100) sanitarios,
                SUM((cl.inorganicos*((pc.peso*o.cantidad)*.001) )/100) +
                SUM((cl.organicos*((pc.peso*o.cantidad)*.001) )/100) +
                SUM((cl.sanitarios*((pc.peso*o.cantidad)*.001) )/100)
                Total
          FROM orden o
          JOIN cliente cl ON cl.id = o.cliente_id
          LEFT JOIN peso_cliente pc ON pc.cliente_id = cl.id AND MONTH(o.fecha_inicio) = pc.mes_id AND YEAR(o.fecha_inicio) = pc.year
          WHERE YEAR(o.fecha_inicio) = $year AND MONTH(o.fecha_inicio) = $month AND o.cancel = 0
          GROUP BY Mes
          ORDER BY Mes";
    $data = \DB::select( \DB::raw( $sql ));
     if(count($data) != null ){
       return response()->json(array('status'=>true , 'data'=>$data));
     }else{
       return response()->json(array('status'=>false, 'data'=>'' ));
     }
  }

  public function orden_mes_year($year = null){
    $where = "";
    $groupBy = " GROUP BY YEAR(o.fecha_inicio) ";
    if($year!= null){
      $where = " WHERE YEAR(o.fecha_inicio) = $year ";
      $groupBy = " GROUP BY Year,Mes ";
    }

      $sql= "SELECT YEAR(o.fecha_inicio) Year, MONTH(o.fecha_inicio) Month,
           CASE WHEN MONTH(o.fecha_inicio) = 1 THEN 'Enero'
             WHEN MONTH(o.fecha_inicio) = 2 THEN 'Febrero'
             WHEN MONTH(o.fecha_inicio) = 3 THEN 'Marzo'
             WHEN MONTH(o.fecha_inicio) = 4 THEN 'Abril'
             WHEN MONTH(o.fecha_inicio) = 6 THEN 'Junio'
             WHEN MONTH(o.fecha_inicio) = 5 THEN 'Mayo'
             WHEN MONTH(o.fecha_inicio) = 7 THEN 'Julio'
             WHEN MONTH(o.fecha_inicio) = 8 THEN 'Agosto'
             WHEN MONTH(o.fecha_inicio) = 9 THEN 'Septiembre'
             WHEN MONTH(o.fecha_inicio) = 10 THEN 'Octubre'
             WHEN MONTH(o.fecha_inicio) = 11 THEN 'Noviembre'
             WHEN MONTH(o.fecha_inicio) = 12 THEN 'Diciembre'
             ELSE 'Error' END AS Mes
          FROM orden o
          JOIN cliente cl ON cl.id = o.cliente_id
          LEFT JOIN peso_cliente pc ON pc.cliente_id = cl.id AND MONTH(o.fecha_inicio) = pc.mes_id AND YEAR(o.fecha_inicio) = pc.year AND pc.peso <> NULL AND o.cancel = 0
          ".$where."
          ".$groupBy."
          ORDER BY YEAR(o.fecha_inicio),MONTH(o.fecha_inicio)";
   $data = \DB::select( \DB::raw( $sql ));
    if(count($data) != null ){
      return response()->json(array('status'=>true , 'data'=>$data));
    }else{
      return response()->json(array('status'=>false, 'data'=>'' ));
    }
  }

  public function total_month($costumer,$month,$year){
    $sql = "SELECT o.id, o.orden_no,  DATE(o.fecha_inicio) fecha,
            cl.nombre_comercial cliente, cl.cliente cliente_n, cl.direccion, cl.colonia,
            pc.peso, o.cantidad, u.unidad,
    		    SUM((cl.inorganicos*((pc.peso*o.cantidad)*.001) )/100) inorganicos,
    		    SUM((cl.organicos*((pc.peso*o.cantidad)*.001) )/100) organicos,
    		    SUM((cl.sanitarios*((pc.peso*o.cantidad)*.001) )/100) sanitarios,
            SUM((cl.inorganicos*((pc.peso*o.cantidad)*.001) )/100) +
            SUM((cl.organicos*((pc.peso*o.cantidad)*.001) )/100) +
            SUM((cl.sanitarios*((pc.peso*o.cantidad)*.001) )/100) total
			FROM orden o
			JOIN cliente cl ON cl.id = o.cliente_id AND cl.id = $costumer
      JOIN unidad u ON u.id = cl.unidad_id
			LEFT JOIN peso_cliente pc ON pc.cliente_id = cl.id AND MONTH(o.fecha_inicio) = pc.mes_id AND YEAR(o.fecha_inicio) = pc.year
			WHERE MONTH(o.fecha_inicio) = $month AND YEAR(o.fecha_inicio) = $year AND o.cancel = 0
      GROUP BY id, orden_no
      ORDER BY fecha";

      $data = \DB::select( \DB::raw( $sql ));
       if(count($data) != null ){
         return response()->json(array('status'=>true , 'data'=>$data));
       }else{
         return response()->json(array('status'=>false, 'data'=>'' ));
       }
  }

  public function ordenReciclable($id,$year,$month){
    $sql = "SELECT o.id, o.orden_no, r.reciclable, c.cliente, c.nombre_comercial, 
            DATE(o.fecha_inicio) fecha, (o.peso_reciclable) peso_kg, (o.peso_reciclable  / 1000) peso_tn,
            c.direccion, c.colonia, o.costo_pago, o.costo_cliente
            FROM orden o
            JOIN cliente c ON c.id = o.cliente_id AND c.id = $id
            JOIN reciclable r ON r.id = o.reciclable_id
            WHERE reciclable_id <> 0 AND o.cancel = 0 AND o.peso_reciclable <> 0 AND YEAR(o.fecha_inicio) = $year AND MONTH(o.fecha_inicio) = $month
            ORDER BY fecha_inicio";

    $data = \DB::select( \DB::raw( $sql ));
    if(count($data) != null ){
      return $data;
    }else{
      return false;
    }
  }

  public function ordenReciclableAnual($id, $year, $month = null, $type = null){
    $whereMonth = "";
    $whereType = "";
    if($month != null){
      $whereMonth = " AND MONTH(o.fecha_inicio) <= $month ";
    }
    if($type != null){
      $whereType = " AND r.reciclable = '$type' ";
      $whereMonth = " AND MONTH(o.fecha_inicio) = $month ";
    }
     $sql = "SELECT o.id, o.orden_no, c.nombre_comercial, c.cliente, c.direccion, c.colonia, r.reciclable, MONTH(o.fecha_inicio) NoMes, SUM((o.peso_reciclable) * 100) peso_kg, SUM(o.peso_reciclable) peso_tn
            FROM orden o
            JOIN cliente c ON c.id = o.cliente_id AND c.id = $id
            JOIN reciclable r ON r.id = o.reciclable_id $whereType
            WHERE reciclable_id <> 0 AND o.cancel = 0 $whereMonth AND YEAR(o.fecha_inicio) = $year AND o.peso_reciclable <> 0
              AND o.peso_reciclable <> 0 
            GROUP BY MONTH(o.fecha_inicio), reciclable
            ORDER BY reciclable";

    $data = \DB::select( \DB::raw( $sql ));
    if(count($data) != null ){
      return $data;
    }else{
      return false;
    }
  }


  public function totalReciclable($id, $year, $month){
    $sql = "SELECT  r.reciclable, SUM((o.peso_reciclable) * (.001)) peso_tn
            FROM orden o
            JOIN cliente c ON c.id = o.cliente_id AND c.id = $id
            JOIN reciclable r ON r.id = o.reciclable_id
            WHERE reciclable_id <> 0 AND o.cancel = 0 AND YEAR(o.fecha_inicio) = $year AND MONTH(o.fecha_inicio) <= $month
              AND o.peso_reciclable <> 0
            GROUP BY reciclable
            ORDER BY reciclable	";
    $data = \DB::select( \DB::raw( $sql ));
    if(count($data) != null ){
      return $data;
    }else{
      return false;
    }
  }

  public function reciclableUser($user_id){
    $sql = "SELECT o.id, o.user_id, o.fecha_inicio, r.id reciclable_id, r.reciclable, o.costo_cliente, o.costo_pago
            FROM orden o
            JOIN reciclable r ON r.id = o.reciclable_id AND r.status_id = 1
            WHERE date(fecha_inicio) = CURDATE() 
            AND o.user_id = $user_id
            AND o.peso_reciclable != 0 
            AND o.cancel = 0 
            GROUP BY r.id";
    $data = \DB::select( \DB::raw( $sql ));
    if(count($data) != null ){
      return $data;
    }
  }

  public function getOrdenesCosto($user_id, $id, $fecha = null, $cliente = null){
    $where_fecha = " CURDATE() ";
    $where_cliente = " ";
    if($fecha != null){
      $where_fecha = " '$fecha' ";
    }
    if($cliente != null){
      $where_cliente = " AND cliente_id = $cliente ";
    }
    $sql = "SELECT id 
            FROM orden 
            WHERE user_id = $user_id 
              AND reciclable_id = $id
              $where_cliente
              AND DATE(fecha_inicio) = $where_fecha ";
    $data = \DB::select( \DB::raw( $sql ));
    if(count($data) != null ){
      return $data;
    }
  }

  public function updateCostoOrden($ids,$costo, $type = 1){
    try{
      \DB::beginTransaction();
      if($type == 1){
        $sql="UPDATE orden SET costo_pago = $costo WHERE id IN ($ids) ";
      }else{
        $sql="UPDATE orden SET costo_cliente = $costo WHERE id IN ($ids) ";
      }
     $data = \DB::update( \DB::raw( $sql ));
    }catch ( \Exception $e ){
        \DB::rollback();
        return \Response::json(array('status'=>false));
    }
    \DB::commit();
    return \Response::json(array('status'=>true));
  }

  public function getReciclableCosto($date1 = null, $date2 = null){
    $where_dates = " = CURDATE() ";
    if($date1 != null){
      $where_dates = " BETWEEN '$date1' AND '$date2' ";
    }
    $sql = "SELECT o.orden_no, o.user_id, o.cliente_id, u.username, c.nombre_comercial, o.reciclable_id, r.reciclable, o.peso_reciclable, DATE(o.fecha_inicio) fecha, o.costo_pago, o.costo_cliente 
            FROM orden o
            JOIN cliente c ON c.id = o.cliente_id
            JOIN user u ON u.id = o.user_id
            JOIN reciclable r ON r.id = o.reciclable_id AND r.id <> 13
            WHERE o.reciclable_id <> 0 
            AND DATE(o.fecha_inicio) $where_dates
            AND o.cancel = 0
            GROUP BY o.user_id, o.reciclable_id, fecha_inicio
            ORDER BY fecha_inicio DESC";
    $data = \DB::select( \DB::raw( $sql ));
    if(count($data) != null ){
      return $data;
    }
  }

  public function metricasReciclables($year = null){
    if($year == null){
      $year = date('Y');
    }
    $sql = "SELECT cliente, id, clasificacion, SUM(mes_1) mes_1, SUM(mes_2) mes_2, SUM(mes_3) mes_3, SUM(mes_4) mes_4, SUM(mes_5) mes_5, 
            SUM(mes_6) mes_6, SUM(mes_7) mes_7, SUM(mes_8) mes_8, SUM(mes_9) mes_9, SUM(mes_10) mes_10, SUM(mes_11) mes_11, SUM(mes_12) mes_12,
            SUM(peso_kg) peso_kg, SUM(peso_tn) peso_tn
            FROM(  
              SELECT c.nombre_comercial cliente, c.id , r.clasificacion, 
                      IF(MONTH(o.fecha_inicio) = 1,SUM(o.peso_reciclable),0) mes_1,
                      IF(MONTH(o.fecha_inicio) = 2,SUM(o.peso_reciclable),0) mes_2,
                      IF(MONTH(o.fecha_inicio) = 3,SUM(o.peso_reciclable),0) mes_3,
                      IF(MONTH(o.fecha_inicio) = 4,SUM(o.peso_reciclable),0) mes_4,
                      IF(MONTH(o.fecha_inicio) = 5,SUM(o.peso_reciclable),0) mes_5,
                      IF(MONTH(o.fecha_inicio) = 6,SUM(o.peso_reciclable),0) mes_6,
                      IF(MONTH(o.fecha_inicio) = 7,SUM(o.peso_reciclable),0) mes_7,
                      IF(MONTH(o.fecha_inicio) = 8,SUM(o.peso_reciclable),0) mes_8,
                      IF(MONTH(o.fecha_inicio) = 9,SUM(o.peso_reciclable),0) mes_9,
                      IF(MONTH(o.fecha_inicio) = 10,SUM(o.peso_reciclable),0) mes_10,
                      IF(MONTH(o.fecha_inicio) = 11,SUM(o.peso_reciclable),0) mes_11,
                      IF(MONTH(o.fecha_inicio) = 12,SUM(o.peso_reciclable),0) mes_12,
                      SUM(o.peso_reciclable) peso_kg, SUM(o.peso_reciclable) peso_tn
                      FROM orden o
                      JOIN cliente c ON c.id = o.cliente_id 
                      JOIN reciclable r ON r.id = o.reciclable_id 
              WHERE reciclable_id <> 0 AND o.cancel = 0 AND YEAR(o.fecha_inicio) = $year 
                AND o.peso_reciclable <> 0
              GROUP BY  c.id, r.clasificacion, MONTH(o.fecha_inicio) 
              ORDER BY c.nombre_comercial
            ) as derived GROUP BY  id, clasificacion
            ORDER BY cliente, clasificacion";
    $data = \DB::select( \DB::raw( $sql ));
    if(count($data) != null ){
      return $data;
    }
  }

  public function metricasReciclablesCantidad($year = null){
    if($year == null){
      $year = date('Y');
    }
    $sql = "SELECT nombre_comercial, id, unidad, fiscal, cuota, pu, SUM(mes_1) mes_1, SUM(mes_2) mes_2, SUM(mes_3) mes_3, SUM(mes_4) mes_4, SUM(mes_5) mes_5, 
    SUM(mes_6) mes_6, SUM(mes_7) mes_7, SUM(mes_8) mes_8, SUM(mes_9) mes_9, SUM(mes_10) mes_10, SUM(mes_11) mes_11, SUM(mes_12) mes_12,
    SUM(total) total
    FROM(  
     SELECT c.nombre_comercial, c.id, u.unidad, c.fiscal, cu.cuota, c.pu,
              IF(MONTH(o.fecha_inicio) = 1,SUM(o.cantidad),0) mes_1,
              IF(MONTH(o.fecha_inicio) = 2,SUM(o.cantidad),0) mes_2,
              IF(MONTH(o.fecha_inicio) = 3,SUM(o.cantidad),0) mes_3,
              IF(MONTH(o.fecha_inicio) = 4,SUM(o.cantidad),0) mes_4,
              IF(MONTH(o.fecha_inicio) = 5,SUM(o.cantidad),0) mes_5,
              IF(MONTH(o.fecha_inicio) = 6,SUM(o.cantidad),0) mes_6,
              IF(MONTH(o.fecha_inicio) = 7,SUM(o.cantidad),0) mes_7,
              IF(MONTH(o.fecha_inicio) = 8,SUM(o.cantidad),0) mes_8,
              IF(MONTH(o.fecha_inicio) = 9,SUM(o.cantidad),0) mes_9,
              IF(MONTH(o.fecha_inicio) = 10,SUM(o.cantidad),0) mes_10,
              IF(MONTH(o.fecha_inicio) = 11,SUM(o.cantidad),0) mes_11,
              IF(MONTH(o.fecha_inicio) = 12,SUM(o.cantidad),0) mes_12,
              SUM(o.cantidad) total
              FROM orden o
              JOIN cliente c ON c.id = o.cliente_id
              LEFT JOIN unidad u ON u.id = c.unidad_id
              LEFT JOIN cuota cu ON cu.id = c.cuota_id
      WHERE  o.cancel = 0 AND YEAR(o.fecha_inicio) = $year 
      GROUP BY  c.id, MONTH(o.fecha_inicio) 
      ORDER BY c.nombre_comercial
    ) as derived GROUP BY  id, unidad having total > 0
    ORDER BY nombre_comercial, unidad";
    $data = \DB::select( \DB::raw( $sql ));
    if(count($data) != null ){
      return $data;
    }
  }

  public function metricasResiduos($year = null){
    if($year == null){
      $year = date('Y');
    }
    $sql = "SELECT id, nombre_comercial, semades, SUM(mes_1) mes_1, SUM(mes_2) mes_2, SUM(mes_3) mes_3, SUM(mes_4) mes_4, SUM(mes_5) mes_5, 
            SUM(mes_6) mes_6, SUM(mes_7) mes_7, SUM(mes_8) mes_8, SUM(mes_9) mes_9, SUM(mes_10) mes_10, SUM(mes_11) mes_11, SUM(mes_12) mes_12, SUM(total) total
            FROM(  
              SELECT c.id, c.nombre_comercial, c.semades,
                      IF(MONTH(o.fecha_inicio) = 1, SUM((c.inorganicos*((pc.peso*o.cantidad)*.001) )/100) +
                                    SUM((c.organicos*((pc.peso*o.cantidad)*.001) )/100) +
                                    SUM((c.sanitarios*((pc.peso*o.cantidad)*.001) )/100),0)  mes_1,
                      IF(MONTH(o.fecha_inicio) = 2,SUM((c.inorganicos*((pc.peso*o.cantidad)*.001) )/100) +
                                    SUM((c.organicos*((pc.peso*o.cantidad)*.001) )/100) +
                                    SUM((c.sanitarios*((pc.peso*o.cantidad)*.001) )/100),0) mes_2,
                      IF(MONTH(o.fecha_inicio) = 3,SUM((c.inorganicos*((pc.peso*o.cantidad)*.001) )/100) +
                                    SUM((c.organicos*((pc.peso*o.cantidad)*.001) )/100) +
                                    SUM((c.sanitarios*((pc.peso*o.cantidad)*.001) )/100),0) mes_3,
                      IF(MONTH(o.fecha_inicio) = 4,SUM((c.inorganicos*((pc.peso*o.cantidad)*.001) )/100) +
                                    SUM((c.organicos*((pc.peso*o.cantidad)*.001) )/100) +
                                    SUM((c.sanitarios*((pc.peso*o.cantidad)*.001) )/100),0) mes_4,
                      IF(MONTH(o.fecha_inicio) = 5,SUM((c.inorganicos*((pc.peso*o.cantidad)*.001) )/100) +
                                    SUM((c.organicos*((pc.peso*o.cantidad)*.001) )/100) +
                                    SUM((c.sanitarios*((pc.peso*o.cantidad)*.001) )/100),0) mes_5,
                      IF(MONTH(o.fecha_inicio) = 6,SUM((c.inorganicos*((pc.peso*o.cantidad)*.001) )/100) +
                                    SUM((c.organicos*((pc.peso*o.cantidad)*.001) )/100) +
                                    SUM((c.sanitarios*((pc.peso*o.cantidad)*.001) )/100),0) mes_6,
                      IF(MONTH(o.fecha_inicio) = 7,SUM((c.inorganicos*((pc.peso*o.cantidad)*.001) )/100) +
                                    SUM((c.organicos*((pc.peso*o.cantidad)*.001) )/100) +
                                    SUM((c.sanitarios*((pc.peso*o.cantidad)*.001) )/100),0) mes_7,
                      IF(MONTH(o.fecha_inicio) = 8,SUM((c.inorganicos*((pc.peso*o.cantidad)*.001) )/100) +
                                    SUM((c.organicos*((pc.peso*o.cantidad)*.001) )/100) +
                                    SUM((c.sanitarios*((pc.peso*o.cantidad)*.001) )/100),0) mes_8,
                      IF(MONTH(o.fecha_inicio) = 9,SUM((c.inorganicos*((pc.peso*o.cantidad)*.001) )/100) +
                                    SUM((c.organicos*((pc.peso*o.cantidad)*.001) )/100) +
                                    SUM((c.sanitarios*((pc.peso*o.cantidad)*.001) )/100),0) mes_9,
                      IF(MONTH(o.fecha_inicio) = 10,SUM((c.inorganicos*((pc.peso*o.cantidad)*.001) )/100) +
                                    SUM((c.organicos*((pc.peso*o.cantidad)*.001) )/100) +
                                    SUM((c.sanitarios*((pc.peso*o.cantidad)*.001) )/100),0) mes_10,
                      IF(MONTH(o.fecha_inicio) = 11,SUM((c.inorganicos*((pc.peso*o.cantidad)*.001) )/100) +
                                    SUM((c.organicos*((pc.peso*o.cantidad)*.001) )/100) +
                                    SUM((c.sanitarios*((pc.peso*o.cantidad)*.001) )/100),0) mes_11,
                      IF(MONTH(o.fecha_inicio) = 12,SUM((c.inorganicos*((pc.peso*o.cantidad)*.001) )/100) +
                                    SUM((c.organicos*((pc.peso*o.cantidad)*.001) )/100) +
                                    SUM((c.sanitarios*((pc.peso*o.cantidad)*.001) )/100),0) mes_12,
                      SUM((c.inorganicos*((pc.peso*o.cantidad)*.001) )/100) +
                      SUM((c.organicos*((pc.peso*o.cantidad)*.001) )/100) +
                      SUM((c.sanitarios*((pc.peso*o.cantidad)*.001) )/100) total
                      FROM orden o
                      JOIN cliente c ON c.id = o.cliente_id
                      LEFT JOIN peso_cliente pc ON pc.cliente_id = c.id AND MONTH(o.fecha_inicio) = pc.mes_id AND YEAR(o.fecha_inicio) = pc.year
              WHERE o.cancel = 0 AND YEAR(o.fecha_inicio) = $year 
              GROUP BY  c.nombre_comercial, MONTH(o.fecha_inicio) 
              ORDER BY c.nombre_comercial
            ) as derived WHERE total <> 0 
            GROUP BY  nombre_comercial
            ORDER BY nombre_comercial";
    $data = \DB::select( \DB::raw( $sql ));
    if(count($data) != null ){
      return $data;
    }
  }

  public function metricasUnidad($year = null){
    if($year == null){
      $year = date('Y');
    }
    $sql = "SELECT id, cliente, SUM(mes_1) mes_1, SUM(mes_2) mes_2, SUM(mes_3) mes_3, SUM(mes_4) mes_4, SUM(mes_5) mes_5, 
                SUM(mes_6) mes_6, SUM(mes_7) mes_7, SUM(mes_8) mes_8, SUM(mes_9) mes_9, SUM(mes_10) mes_10, SUM(mes_11) mes_11, SUM(mes_12) mes_12
                FROM (
            SELECT c.id, c.cliente, 
                          IF((pc.mes_id) = 1,SUM(pc.peso),0) mes_1,
                          IF((pc.mes_id) = 2,SUM(pc.peso),0) mes_2,
                          IF((pc.mes_id) = 3,SUM(pc.peso),0) mes_3,
                          IF((pc.mes_id) = 4,SUM(pc.peso),0) mes_4,
                          IF((pc.mes_id) = 5,SUM(pc.peso),0) mes_5,
                          IF((pc.mes_id) = 6,SUM(pc.peso),0) mes_6,
                          IF((pc.mes_id) = 7,SUM(pc.peso),0) mes_7,
                          IF((pc.mes_id) = 8,SUM(pc.peso),0) mes_8,
                          IF((pc.mes_id) = 9,SUM(pc.peso),0) mes_9,
                          IF((pc.mes_id) = 10,SUM(pc.peso),0) mes_10,
                          IF((pc.mes_id) = 11,SUM(pc.peso),0) mes_11,
                          IF((pc.mes_id) = 12,SUM(pc.peso),0) mes_12
            FROM cliente c
            LEFT JOIN peso_cliente pc ON pc.cliente_id = c.id AND pc.year = $year
            WHERE c.giro_id not in (24)
            GROUP BY c.cliente, pc.mes_id
            ) as derived 
            GROUP BY id
            ORDER BY cliente";
    $data = \DB::select( \DB::raw( $sql ));
    if(count($data) != null ){
      return $data;
    }
  }
  public function metricasCobroChofer($year = null, $month = null){
    if($year == null){
      $year = date('Y');
    }
    if($month == null){
      $month = date('m');
    }
    $sql = "SELECT o.id, u.username, c.cliente, c.nombre_comercial, r.reciclable, o.orden_no,  MONTH(o.fecha_inicio) mes, DATE(o.fecha_inicio) fecha, o.peso_reciclable, o.costo_cliente, o.costo_pago
            FROM orden o
            JOIN cliente c ON c.id = o.cliente_id 
            JOIN user u ON u.id = o.user_id
            JOIN reciclable r ON r.id = o.reciclable_id
            WHERE o.reciclable_id <> 0 AND o.cancel = 0 AND YEAR(o.fecha_inicio) = $year AND MONTH(o.fecha_inicio) = $month
                            AND o.peso_reciclable <> 0
            GROUP BY id
            ORDER BY username,cliente, orden_no, mes";
    $data = \DB::select( \DB::raw( $sql ));
    if(count($data) != null ){
      return $data;
    }
  }
  public function metricasCobroTotal($year = null, $month = null){
    if($year == null){
      $year = date('Y');
    }
    if($month == null){
      $month = date('m');
    }
    $sql = "SELECT o.id, u.username, c.cliente, c.id, c.nombre_comercial, MONTH(o.fecha_inicio) mes, 
          SUM(o.peso_reciclable) peso_reciclable, (o.costo_cliente) costo_cliente, (o.costo_pago) costo_pago, SUM((o.peso_reciclable) *  (o.costo_pago)) total_chofer
          FROM orden o
          JOIN cliente c ON c.id = o.cliente_id 
          JOIN user u ON u.id = o.user_id
          WHERE o.reciclable_id <> 0 AND o.cancel = 0 AND YEAR(o.fecha_inicio) = $year AND MONTH(o.fecha_inicio) = $month
                          AND o.peso_reciclable <> 0
          GROUP BY username, c.id
          ORDER BY username,cliente";
    $data = \DB::select( \DB::raw( $sql ));
    if(count($data) != null ){
      return $data;
    }
  }
  public function metricasUtilidad($year = null, $month = null){
    if($year == null){
      $year = date('Y');
    }
    if($month == null){
      $month = date('m');
    }
    $sql = "SELECT r.reciclable, c.nombre_comercial, o.orden_no, c.id,  MONTH(o.fecha_inicio) mes, SUM(o.peso_reciclable) peso_reciclable, o.costo_cliente, o.costo_pago
            FROM orden o
            JOIN cliente c ON c.id = o.cliente_id 
            JOIN user u ON u.id = o.user_id
            JOIN reciclable r ON r.id = o.reciclable_id
            WHERE o.reciclable_id <> 0 AND o.cancel = 0 AND YEAR(o.fecha_inicio) = $year AND MONTH(o.fecha_inicio) = $month
                            AND o.peso_reciclable <> 0
            GROUP BY reciclable, c.id, mes, costo_cliente, costo_pago
            ORDER BY reciclable, cliente, mes, costo_cliente, costo_pago";
    $data = \DB::select( \DB::raw( $sql ));
    if(count($data) != null ){
      return $data;
    }
  }

}