public function post() { $post = Input::all(); if ($post['products'] == '[]') { $post['products'] = ''; } $validator = SupplierOrder::validate($post); if ($validator->fails()) { return Redirect::to('pedidos/' . $post['id'])->withErrors($validator)->withInput(); } else { try { DB::transaction(function () use($post) { $supplierOrder = self::__checkExistence($post['id']); if (!$supplierOrder) { //new order $supplierOrder = new SupplierOrder(); $supplierOrder->suppliers_id = $post['suppliers_id']; $supplierOrder->users_id = Auth::user()->id; $supplierOrder->code = $post['code']; $supplierOrder->save(); $products = json_decode($post['products']); $toSync = array(); foreach ($products as $current) { $product = Product::find($current->id); if (!is_null($product)) { $toSync[$current->id]['cost'] = $product->cost; $toSync[$current->id]['amount'] = $current->amount; } } $supplierOrder->products()->sync($toSync); Globals::triggerAlerts(5, array('supplierOrderId' => $supplierOrder->id)); } else { if (isset($post['received']) and $post['received'] == 1) { //received $supplierOrder->status = 'received'; $supplierOrder->save(); foreach ($supplierOrder->products as $pivotProduct) { $array = $pivotProduct->toArray(); $product = Product::find($array['id']); if (!is_null($product)) { $product->stock = $product->stock + $array['pivot']['amount']; $product->save(); } } Globals::triggerAlerts(6, array('supplierOrderId' => $supplierOrder->id)); } elseif (isset($post['received']) and $post['received'] == 2) { //canceled $supplierOrder->status = 'canceled'; $supplierOrder->save(); } else { Session::flash('error', 'Error en la recepción de su pedido, por favor vuelva a intentarlo.'); } } }); Session::flash('success', 'Pedido procesado exitosamente.'); } catch (Exception $e) { Session::flash('error', 'Ocurrió un error inesperado, por favor vuelva a intentarlo.'); } return Redirect::to('pedidos'); } }