/**
  * Update the specified resource in storage.
  *
  * @param  int  $id
  * @return Response
  */
 public function update(Request $request, $id)
 {
     // update a specific vendor
     $vendor = Vendor::with('codes')->find($id);
     $vendor->name = $request->name;
     $vendor->email = $request->email;
     $vendor->business = $request->business;
     $vendor->phone = $request->phone;
     $vendor->rent = $request->rent;
     $vendor->rate = $request->rate;
     $vendor->status = $request->status;
     $vendor->notes = $request->notes;
     $vendor->email_notification = $request->email_notification;
     $vendor->touch();
     // sync codes
     $codes = array();
     $newCodes = array();
     // current codes
     foreach ($vendor->codes as $code) {
         array_push($codes, $code->name);
     }
     // new codes
     if (isset($request->codes)) {
         foreach ($request->codes as $code) {
             array_push($newCodes, $code['name']);
         }
     }
     $deleteCodes = array_diff($codes, $newCodes);
     // sync codes
     if (count($deleteCodes)) {
         Code::where('name', $deleteCodes)->delete();
     }
     foreach ($newCodes as $code) {
         Code::firstOrCreate(array('vendor_id' => $vendor->id, 'name' => $code));
     }
     // check for transactions
     if (count($newCodes)) {
         $transactions = Transaction::where('code', $newCodes)->get();
         if (!$transactions->isEmpty()) {
             foreach ($transactions as $transaction) {
                 $transaction->vendor_id = $vendor->id;
                 $transaction->save();
             }
         }
     }
     return response(Vendor::with(['transactions' => function ($query) {
         $query->orderBy('processed_at', 'desc');
         $query->limit(100);
     }, 'codes'])->find($id), 200);
 }