public function crear()
 {
     DB::beginTransaction();
     try {
         $data = Input::all();
         $new = $data;
         unset($new['apikey']);
         unset($new['session_key']);
         $items = array();
         $pagos = array();
         $new = array_map(function ($n) {
             return $n == 'NULL' ? NULL : $n;
         }, $new);
         if (isset($new["items"])) {
             foreach ($new["items"] as $i => $item) {
                 $items[$i] = array_map(function ($n) {
                     return $n == 'NULL' ? NULL : $n;
                 }, $item);
             }
             unset($new["items"]);
         }
         if (isset($new["pago"])) {
             foreach ($new["pago"] as $p => $pago) {
                 $pagos[$p] = array_map(function ($n) {
                     return $n == 'NULL' ? NULL : $n;
                 }, $pago);
             }
             unset($new["pago"]);
         }
         $new["user_id"] = Auth::user()->id;
         $modelo_ctacte = new Ctacte();
         $ctacte = $modelo_ctacte->create($new);
         if ($ctacte->save()) {
             $this->eventoAuditar($ctacte);
             if (count($items)) {
                 foreach ($items as $item) {
                     $ctacte_fac_lin = new CtacteFacLin();
                     $item['ctacte_id'] = $ctacte->id;
                     $fac_lin = $ctacte_fac_lin->create($item);
                     if (!$fac_lin->save()) {
                         DB::rollback();
                         return Response::json(array('error' => true, 'mensaje' => HerramientasController::getErrores($fac_lin->validator), 'listado' => $data, 'paso' => 1), 200);
                     }
                 }
             }
             if (count($pagos)) {
                 $referencia = $ctacte->id;
                 if (substr($ctacte->tipo_prev, 0, 1) == 'F') {
                     $new["tipo_cbte"] = !empty($new["tipo_cbte"]) ? 'RE' : NULL;
                     $new["tipo_prev"] = 'RE';
                     $new["referencia"] = $ctacte->id;
                     $new["importe_iva"] = 0;
                     $importe = 0;
                     foreach ($pagos as $p) {
                         $importe += $p["importe"];
                     }
                     $new["importe_neto"] = $importe;
                     $new["importe_bruto"] = $importe;
                     $modelo_ctacte1 = new Ctacte();
                     $ctacte1 = $modelo_ctacte1->create($new);
                     if ($ctacte1->save()) {
                         $this->eventoAuditar($ctacte1);
                         $referencia = $ctacte1->id;
                     } else {
                         DB::rollback();
                         return Response::json(array('error' => true, 'mensaje' => HerramientasController::getErrores($ctacte1->validator), 'paso' => 2, 'listado' => $data), 200);
                     }
                 }
                 foreach ($pagos as $pago) {
                     $ctacte_rec_lin = new CtacteRecLin();
                     $pago['ctacte_id'] = $referencia;
                     $rec_lin = $ctacte_rec_lin->create($pago);
                     if (!$rec_lin->save()) {
                         DB::rollback();
                         return Response::json(array('error' => true, 'mensaje' => HerramientasController::getErrores($rec_lin->validator), 'listado' => $data, 'pas' => 3), 200);
                     }
                 }
                 if (!MovimientoCaja::ingresoCtacte($referencia)) {
                     DB::rollback();
                     return Response::json(array('error' => true, 'mensaje' => "No se pudo grabar movimiento de caja asociado", 'listado' => $data), 200);
                 }
             }
             DB::commit();
             return Response::json(array('error' => false, 'listado' => $ctacte->where('id', '=', $ctacte->id)->get()->toArray()), 200);
         } else {
             DB::rollback();
             return Response::json(array('error' => true, 'mensaje' => HerramientasController::getErrores($ctacte->validator), 'paso' => 4, 'listado' => $data), 200);
         }
     } catch (\Exception $e) {
         DB::rollback();
         return Response::json(array('error' => true, 'mensaje' => $e->getMessage()), 200);
     }
 }