111 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			111 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace App;
 | |
| 
 | |
| use Illuminate\Database\Eloquent\Model;
 | |
| use Mpdf\Mpdf;
 | |
| use League\Csv\CannotInsertRecord;
 | |
| use League\Csv\Writer;
 | |
| use App\Producto;
 | |
| use DB;
 | |
| use League\Csv\Reader;
 | |
| 
 | |
| class GrupoDeCompra extends Model
 | |
| {
 | |
|   public $timestamps = false;
 | |
|   protected $fillable = [ "nombre","region","telefono","correo","referente_finanzas","cantidad_de_nucleos","fila"];
 | |
|   protected $table = 'grupos_de_compra';
 | |
|   protected $hidden = ['password'];
 | |
| 
 | |
|   public function subpedidos() {
 | |
|   	return $this->hasMany('App\Subpedido');
 | |
|   }
 | |
| 
 | |
|   public function pedidosAprobados() {
 | |
|     return $this->subpedidos->where('aprobado',1);
 | |
|   }
 | |
| 
 | |
|   public function exportarPlanillasAPdf() {
 | |
|       $subpedidos = $this->pedidosAprobados();
 | |
|       //generar pdf
 | |
|       $mpdf = new Mpdf();
 | |
|       foreach ($subpedidos as $subpedido) {
 | |
|           $tabla = $subpedido->generarHTML();
 | |
|           // agregar la tabla al pdf en una nueva página
 | |
|           $mpdf->WriteHTML($tabla);
 | |
|           $mpdf->AddPage();
 | |
|       }
 | |
|       $filename = $this->nombre . '.pdf';
 | |
|       // imprimir el pdf
 | |
|       $mpdf->Output($filename, "D");
 | |
|   }
 | |
| 
 | |
|   //Asume que los productos están gruadados en orden de fila
 | |
|   public function obtenerTemplateDeFilasVacias(){
 | |
|     $productosFilaID = Producto::productosFilaID();
 | |
|     $productosIDNombre = Producto::productosIDNombre();
 | |
|     $num_fila = 1;
 | |
|     $template = [];
 | |
|     foreach ($productosFilaID as $fila => $id) {
 | |
|       for ($i = $num_fila; $i < $fila; $i++) {
 | |
|         $template[$i] = ["", "0"];
 | |
|       }
 | |
|       $template[$fila] = [$productosIDNombre[$id], "0"];
 | |
|       $num_fila = $fila+1;
 | |
|     }
 | |
|     $template[$this->obtenerFilaDeBonoTransporte()] = ["Bonos de transporte", 0];
 | |
|     return $template;
 | |
|   }
 | |
| 
 | |
|   private function obtenerFilaDeBonoTransporte() {
 | |
|     $csv = Reader::createFromPath(resource_path('csv/productos.csv'), 'r');
 | |
|     $csv->setDelimiter("|");
 | |
|     $csv->setEnclosure("'");
 | |
|     $registros = $csv->getRecords();
 | |
| 
 | |
|     foreach($registros as $key => $registro)
 | |
|       if ($registro[0] == 'T') return $key;
 | |
| 
 | |
|     throw new Exception('No hay bono de transporte');
 | |
|   }
 | |
| 
 | |
|   private function totalPedidosSinBonos() {
 | |
|     $total = 0;
 | |
|     foreach ($this->pedidosAprobados() as $pedido) {
 | |
|       $total += ceil($pedido->totalSinBonos());
 | |
|     }
 | |
|     return $total;
 | |
|   }
 | |
| 
 | |
|   public function calcularCantidadBDT() {
 | |
|       return ceil($this->totalPedidosSinBonos() / 500);
 | |
|   }
 | |
| 
 | |
|   public function exportarPedidoEnCSV(){
 | |
|     $productos_en_pedido = DB::table('pedidos_aprobados')->where('grupo_de_compra_id',$this->id)->get()->keyBy('producto_id');
 | |
| 
 | |
|     //si no hay pedidos aprobados, salir
 | |
|     if ($productos_en_pedido->count() == 0) { \Log::debug("El grupo de compra ". $this->nombre . " no tiene pedidos aprobados."); return; }
 | |
|     $records = $this->obtenerTemplateDeFilasVacias();
 | |
|     $productos_id_fila = Producto::productosIdFila();
 | |
|     foreach ($productos_en_pedido as $id => $producto_pedido){
 | |
|       $fila = $productos_id_fila[$id];
 | |
|       $records[$fila][1] = $producto_pedido->cantidad_pedida;
 | |
|     }
 | |
| 
 | |
|     $records[$this->obtenerFilaDeBonoTransporte()][1] = $this->calcularCantidadBDT();
 | |
| 
 | |
|     try {
 | |
|       $writer = Writer::createFromPath(resource_path('csv/exports/'.$this->nombre.'.csv'), 'w');
 | |
|       $writer->insertAll($records);
 | |
|     } catch (CannotInsertRecord $e) {
 | |
|       var_export($e->getRecords());
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   public static function exportarTodosLosPedidosEnCSV(){
 | |
|     $gdcs=GrupoDeCompra::all();
 | |
|     foreach ($gdcs as $gdc){ $gdc->exportarPedidoEnCSV(); }
 | |
|   }
 | |
| 
 | |
| }
 |