public function cancelar($id, Request $request)
 {
     $motivo = $request->input('motivo');
     if (empty($motivo)) {
         return redirect()->back()->with(['message' => 'Por favor especifique motivo de cancelación', 'alert-class' => 'alert-warning']);
     }
     $egreso = Egreso::findOrFail($id);
     if (empty($egreso->cheque)) {
         return redirect()->back()->with(['message' => 'Error: El egreso ' . $egreso->poliza . ' no es un cheque', 'alert-class' => 'alert-danger']);
     }
     /**
      * @todo Analizar caso cuando exista comprobación
      */
     //Actualiza Estatus de Solicitud || Oc&Req => Autorizada
     $pago = new PagoDocumento();
     $pago->cancelarPago($egreso);
     //Generar Póliza de Cancelación
     $poliza = Poliza::create(['fecha' => Carbon::today()->toDateString(), 'tipo' => 'Cancelación', 'concepto' => 'Cancelación Cheque ' . $egreso->cheque . ' ' . $motivo, 'user_id' => \Auth::user()->id]);
     $poliza_abono = $poliza->polizaAbonos()->create(['cuenta_id' => $egreso->cuenta_id, 'monto' => $egreso->monto, 'origen_id' => $egreso->id, 'origen_type' => 'Guia\\Models\\Egreso']);
     //Insertar RMs si existen en Egreso
     if (count($egreso->rms) > 0) {
         foreach ($egreso->rms as $rm) {
             $monto_rm = $rm->pivot->monto;
             $poliza_abono->rms()->attach($rm->id, ['monto' => $monto_rm]);
         }
     }
     $poliza->polizaCargos()->create(['cuenta_id' => 27, 'monto' => $egreso->monto, 'origen_id' => $egreso->id, 'origen_type' => 'Guia\\Models\\Egreso']);
     $cheque = $egreso->cheque;
     $egreso->estatus = 'Cancelado';
     $egreso->fecha_cobro = Carbon::today()->toDateString();
     $egreso->save();
     $egreso->delete();
     return redirect()->back()->with(['message' => 'Cheque ' . $cheque . ' cancelado con éxito']);
 }
 /**
  * Genera egreso para pago total de una solicitud u orden de compra.
  *
  * @return Response
  */
 public function store(Request $request)
 {
     if ($request->input('doc_type') == 'Solicitud') {
         $doc = Solicitud::findOrFail($request->input('doc_id'));
         $benef_id = $doc->benef_id;
         $concepto = $doc->concepto;
         $monto = $doc->monto;
         $ocultar_id = 'sol-' . $request->input('doc_id');
         $message = "Solicitud " . $request->input('doc_id') . " agregada";
     }
     if ($request->input('doc_type') == 'Oc') {
         $doc = Oc::findOrFail($request->input('doc_id'));
         $doc->load('articulos.rms');
         $benef_id = $doc->benef_id;
         $concepto = '';
         /**
          * @todo Determinar Monto de OC
          */
         $monto = 0;
         $ocultar_id = 'oc-' . $request->input('doc_id');
         $message = "Orden de Compra " . $doc->oc . " agregada";
     }
     $tipo_egreso = $request->input('tipo_egreso');
     if ($tipo_egreso == 'cheque') {
         $cheque = $request->input('cheque');
         if (empty($cheque)) {
             $cheque = \Consecutivo::nextCheque($request->input('cuenta_bancaria_id'));
         }
         $poliza = 0;
     } else {
         $poliza = \Consecutivo::nextPolizaEgreso($request->input('cuenta_bancaria_id'));
         $cheque = 0;
     }
     $egreso = new Egreso();
     $egreso->cuenta_bancaria_id = $request->input('cuenta_bancaria_id');
     $egreso->poliza = $poliza;
     $egreso->cheque = $cheque;
     $egreso->fecha = $request->input('fecha');
     $egreso->benef_id = $benef_id;
     $egreso->cuenta_id = 1;
     //Presupuesto
     $egreso->concepto = $concepto;
     $egreso->monto = $monto;
     $egreso->user_id = \Auth::user()->id;
     $egreso->save();
     if ($request->input('doc_type') == 'Solicitud') {
         $rms = $doc->rms;
         foreach ($rms as $rm) {
             $monto_rm = $rm->pivot->monto;
             $egreso->rms()->attach($rm->id, ['monto' => $monto_rm]);
         }
     } else {
         $sum_monto = 0;
         //Creación de Arreglo
         foreach ($doc->articulos as $articulo) {
             foreach ($articulo->rms as $rm) {
                 $arr_rms[$rm->id] = 0;
             }
         }
         //Suma por Rm
         foreach ($doc->articulos as $articulo) {
             foreach ($articulo->rms as $rm) {
                 $arr_rms[$rm->id] += round($rm->pivot->monto, 2);
             }
         }
         //Crea Registro
         foreach ($arr_rms as $rm_id => $monto_rm) {
             $sum_monto += $monto_rm;
             $egreso->rms()->attach($rm_id, ['monto' => $monto_rm]);
         }
         $egreso->monto = $sum_monto;
         $egreso->save();
     }
     $pago = new PagoDocumento($doc, $request->input('doc_type'));
     $pago->pagarDocumento($egreso, 'Total');
     //Inserta suma por proyecto en tabla egreso_proyecto
     $egreso_rms = $egreso->rms()->get();
     $egreso_rms = $egreso_rms->groupBy('proyecto_id');
     $egreso_rms->each(function ($item, $key) use($egreso) {
         $egreso->proyectos()->attach($key, ['monto' => $egreso->rms()->where('proyecto_id', '=', $key)->sum('egreso_rm.monto')]);
     });
     return redirect(action('GenerarEgresoController@index'))->with(['message' => 'Cheque ' . $cheque . ' Generado']);
     //        if($request->ajax()) {
     //            return response()->json([
     //                'message' => $message,
     //                'ocultar' => $ocultar_id
     //            ]);
     //        }
 }