public static function refillPrepaid($coupon, $recharge)
 {
     $limit = VoucherLimit::findOrFail($recharge->limit_id);
     $balance = Recharge::findOrFail($recharge->id);
     if ($coupon->have_time && $coupon->have_data && $limit->limit_type != BOTH_LIMITS) {
         throw new Exception("Coupon having both Time and Data can only be applied to account having both limits.");
     }
     if ($coupon->have_time && !$coupon->have_data && $limit->limit_type != TIME_LIMIT) {
         throw new Exception("Time Balance coupons can only be applied to accounts with Time Limit.");
     }
     if ($coupon->have_data && !$coupon->have_time && $limit->limit_type != DATA_LIMIT) {
         throw new Exception("Data Balance coupons can only be applied to account with Data Limit");
     }
     $result = FALSE;
     if ($coupon->have_time && ($limit->limit_type == TIME_LIMIT || $limit->limit_type == BOTH_LIMITS)) {
         if ($limit->time_limit >= 0) {
             $balance->increment('time_limit', $coupon->time_limit * constant($coupon->time_unit));
         } else {
             $balance->time_limit = $coupon->time_limit * constant($coupon->time_unit);
             $balance->save();
         }
         $result = TRUE;
     }
     if ($coupon->have_data && ($limit->limit_type == DATA_LIMIT || $limit->limit_type == BOTH_LIMITS)) {
         if ($limit->data_limit >= 0) {
             $balance->increment('data_limit', $coupon->data_limit * constant($coupon->data_unit));
         } else {
             $balance->data_limit = $coupon->data_limit * constant($coupon->data_unit);
             $balance->save();
         }
         $result = TRUE;
     }
     if ($result == TRUE && $recharge->aq_access == ALLOWED) {
         DB::table('user_recharges')->where(['user_id' => $recharge->id])->update(['aq_invocked' => 0]);
         $this->_invokeCoA($recharge->uname);
     }
     return $result;
 }