/**
  * 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
     //            ]);
     //        }
 }
 /**
  * Update the specified resource in storage.
  *
  * @param  int  $id
  * @return Response
  */
 public function update($id, SolicitudFormRequest $request)
 {
     $solicitud = Solicitud::findOrFail($id);
     //Actualización de estatus
     $accion = $request->input('accion');
     if (isset($accion)) {
         if ($accion == 'Enviar') {
             $estatus = 'Enviada';
         } elseif ($accion == 'Recuperar') {
             $estatus = '';
         } elseif ($accion == 'Autorizar') {
             $estatus = 'Autorizada';
             if (count($solicitud->rms) == 0) {
                 return redirect()->action('SolicitudController@show', array($solicitud->id))->with(['message' => 'No se puede autorizar una solicitud sin recursos materiales', 'alert-class' => 'alert-warning']);
             }
         } elseif ($accion == 'Desautorizar') {
             $estatus = 'Recibida';
         }
         $solicitud->estatus = $estatus;
         $solicitud->save();
         //Creación de registro
         $fecha_hora = Carbon::now();
         $registro = new Registro(['user_id' => Auth::user()->id, 'estatus' => $estatus, 'fecha_hora' => $fecha_hora]);
         $solicitud->registros()->save($registro);
     } else {
         $solicitud->tipo_solicitud = $request->input('tipo_solicitud');
         $solicitud->proyecto_id = $request->input('proyecto_id');
         $solicitud->urg_id = $request->input('urg_id');
         $solicitud->benef_id = $request->input('benef_id');
         $solicitud->no_documento = $request->input('no_documento');
         $solicitud->concepto = $request->input('concepto');
         $solicitud->obs = $request->input('obs');
         $solicitud->autoriza = FirmasSolRec::getUserAutoriza($request->input('proyecto_id'));
         $solicitud->viaticos = $request->input('viaticos');
         $solicitud->vobo = $request->input('vobo');
         $solicitud->save();
     }
     return redirect()->action('SolicitudController@show', array($solicitud->id));
 }
 /**
  * Remove the specified resource from storage.
  *
  * @param  int  $id
  * @return Response
  */
 public function destroy($solicitud_id, $recurso_id)
 {
     $solicitud = Solicitud::findOrFail($solicitud_id);
     if (count($solicitud->objetivos) > 0) {
         $solicitud->objetivos()->detach($recurso_id);
     } else {
         $solicitud->rms()->detach($recurso_id);
     }
     $solicitud->monto = $this->getMontoTotal($solicitud);
     $solicitud->save();
     return redirect()->action('SolicitudController@show', array($solicitud->id));
 }